diff options
author | Marcus Brinkmann <marcus@gnu.org> | 2001-09-09 17:32:03 +0000 |
---|---|---|
committer | Marcus Brinkmann <marcus@gnu.org> | 2001-09-09 17:32:03 +0000 |
commit | c33495ca9cf1bb12ac5bc3263458fdf3331c1f89 (patch) | |
tree | f5575875f366c78f59c4d59f5ea24c80e77a5cc0 /libnetfs/file-get-translator.c | |
parent | cd07eece45992a52e4c6c9ad1d7ae47b0f82fbe9 (diff) | |
download | hurd-c33495ca9cf1bb12ac5bc3263458fdf3331c1f89.tar.gz hurd-c33495ca9cf1bb12ac5bc3263458fdf3331c1f89.tar.bz2 hurd-c33495ca9cf1bb12ac5bc3263458fdf3331c1f89.zip |
2001-08-31 Marcus Brinkmann <marcus@gnu.org>
* file-get-translator.c (netfs_S_file_get_translator): If
asprintf() fails, set ERR to errno.
* dir-lookup.c (netfs_S_dir_lookup): Catch if asprintf() fails and
return ENOMEM. If netfs_make_protid() fails, set ERROR to errno,
not ENOMEM. Do this before freeing USER.
* dir-mkfile.c (netfs_S_dir_mkfile): If netfs_make_protid() fails,
set ERROR to errno and free USER.
* file-exec.c (netfs_S_file_exec): Likewise.
Reported by Igor Khavkine <i_khavki@alcor.concordia.ca>.
Diffstat (limited to 'libnetfs/file-get-translator.c')
-rw-r--r-- | libnetfs/file-get-translator.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/libnetfs/file-get-translator.c b/libnetfs/file-get-translator.c index 44caa91c..3108acd7 100644 --- a/libnetfs/file-get-translator.c +++ b/libnetfs/file-get-translator.c @@ -73,14 +73,19 @@ netfs_S_file_get_translator (struct protid *user, : _HURD_BLKDEV), '\0', (np->nn_stat.st_rdev >> 8) & 0377, '\0', (np->nn_stat.st_rdev) & 0377); - buflen++; /* terminating nul */ - - if (buflen > *translen) - *trans = mmap (0, buflen, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); - memcpy (*trans, buf, buflen); - free (buf); - *translen = buflen; - err = 0; + if (buflen < 0) + err = ENOMEM; + else + { + buflen++; /* terminating nul */ + + if (buflen > *translen) + *trans = mmap (0, buflen, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); + memcpy (*trans, buf, buflen); + free (buf); + *translen = buflen; + err = 0; + } } else if (S_ISFIFO (np->nn_stat.st_mode)) { |