summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-05-15 21:23:23 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2009-05-15 21:23:23 (GMT)
commit071ede1e5de784820f39c2546000c08d74b12f6d (patch)
tree4ff68f19cafbcf5acbd67691bd80c3014d1ecdff
parentc15f40c3e7bfeae1b616c53a574308c2df707b3d (diff)
downloadbusybox-071ede1e5de784820f39c2546000c08d74b12f6d.tar.gz
busybox-071ede1e5de784820f39c2546000c08d74b12f6d.tar.bz2
xmalloc_[open_]read[_close]: do not ignore xrealloc return value
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--include/libbb.h6
-rw-r--r--libbb/read.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 128aa92..bae7efb 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -965,6 +965,12 @@ enum {
/* How long the longest ESC sequence we know? */
KEYCODE_BUFFER_SIZE = 4
};
+/* Note: fd may be in blocking or non-blocking mode, both make sense.
+ * For one, less uses non-blocking mode.
+ * Only the first read syscall inside read_key may block indefinitely
+ * (unless fd is in non-blocking mode),
+ * subsequent reads will time out after a few milliseconds.
+ */
int read_key(int fd, smalluint *nbuffered, char *buffer) FAST_FUNC;
diff --git a/libbb/read.c b/libbb/read.c
index a0c0cc6..b58982b 100644
--- a/libbb/read.c
+++ b/libbb/read.c
@@ -229,7 +229,7 @@ void* FAST_FUNC xmalloc_read(int fd, size_t *maxsz_p)
if (size > 64*1024)
size = 64*1024;
}
- xrealloc(buf, total + 1);
+ buf = xrealloc(buf, total + 1);
buf[total] = '\0';
if (maxsz_p)
@@ -273,7 +273,7 @@ void* FAST_FUNC xmalloc_open_read_close(const char *filename, size_t *maxsz_p)
free(buf);
return NULL;
}
- xrealloc(buf, size + 1);
+ buf = xrealloc(buf, size + 1);
buf[size] = '\0';
if (maxsz_p)