summaryrefslogtreecommitdiff
path: root/libnetfs/file-get-translator.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <marcus@gnu.org>2001-09-09 17:32:03 +0000
committerMarcus Brinkmann <marcus@gnu.org>2001-09-09 17:32:03 +0000
commitc33495ca9cf1bb12ac5bc3263458fdf3331c1f89 (patch)
treef5575875f366c78f59c4d59f5ea24c80e77a5cc0 /libnetfs/file-get-translator.c
parentcd07eece45992a52e4c6c9ad1d7ae47b0f82fbe9 (diff)
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.c21
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))
{