aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-11-03 20:09:56 +0000
committerRichard Stallman <rms@gnu.org>1993-11-03 20:09:56 +0000
commitbb7de82295a953b28a4d01b378ab65ffafe9aeeb (patch)
tree44260cf23061392e8de35f125fd6e9fe4555d53e /gcc
parent309ffab61f6253d61fe16a8d5d0a97a56b055328 (diff)
downloadgcc-bb7de82295a953b28a4d01b378ab65ffafe9aeeb.zip
gcc-bb7de82295a953b28a4d01b378ab65ffafe9aeeb.tar.gz
gcc-bb7de82295a953b28a4d01b378ab65ffafe9aeeb.tar.bz2
(safe_read): New function.
(main, finclude, check_precompiled): Use safe_read. From-SVN: r5982
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cccp.c68
1 files changed, 45 insertions, 23 deletions
diff --git a/gcc/cccp.c b/gcc/cccp.c
index 671d7de..f28cfe6 100644
--- a/gcc/cccp.c
+++ b/gcc/cccp.c
@@ -980,6 +980,46 @@ static int deps_column;
so don't look for #include "foo" the source-file directory. */
static int ignore_srcdir;
+/* Read LEN bytes at PTR from descriptor DESC, for file FILENAME,
+ retrying if necessary. Return the actual number of bytes read. */
+
+static int
+safe_read (desc, ptr, len)
+ int desc;
+ char *ptr;
+ int len;
+{
+ int left = len;
+ while (left > 0) {
+ int nchars = read (desc, ptr, left);
+ if (nchars < 0)
+ return nchars;
+ if (nchars == 0)
+ break;
+ ptr += nchars;
+ left -= nchars;
+ }
+ return len - left;
+}
+
+/* Write LEN bytes at PTR to descriptor DESC,
+ retrying if necessary, and treating any real error as fatal. */
+
+static void
+safe_write (desc, ptr, len)
+ int desc;
+ char *ptr;
+ int len;
+{
+ while (len > 0) {
+ int written = write (desc, ptr, len);
+ if (written < 0)
+ pfatal_with_name (out_fname);
+ ptr += written;
+ len -= written;
+ }
+}
+
int
main (argc, argv)
int argc;
@@ -1880,7 +1920,7 @@ main (argc, argv)
fp->buf = (U_CHAR *) xmalloc (bsize + 2);
bufp = fp->buf;
for (;;) {
- cnt = read (f, bufp, bsize - size);
+ cnt = safe_read (f, bufp, bsize - size);
if (cnt < 0) goto perror; /* error! */
if (cnt == 0) break; /* End of file */
size += cnt;
@@ -1900,7 +1940,7 @@ main (argc, argv)
fp->buf = (U_CHAR *) xmalloc (st_size + 2);
while (st_size > 0) {
- i = read (f, fp->buf + fp->length, st_size);
+ i = safe_read (f, fp->buf + fp->length, st_size);
if (i <= 0) {
if (i == 0) break;
goto perror;
@@ -4279,7 +4319,7 @@ finclude (f, fname, op, system_header_p, dirptr)
/* Read the file contents, knowing that st_size is an upper bound
on the number of bytes we can read. */
while (st_size > 0) {
- i = read (f, fp->buf + fp->length, st_size);
+ i = safe_read (f, fp->buf + fp->length, st_size);
if (i <= 0) {
if (i == 0) break;
goto nope;
@@ -4307,7 +4347,7 @@ finclude (f, fname, op, system_header_p, dirptr)
bufp = basep;
for (;;) {
- i = read (f, bufp, bsize - st_size);
+ i = safe_read (f, bufp, bsize - st_size);
if (i < 0)
goto nope; /* error! */
if (i == 0)
@@ -4521,7 +4561,7 @@ check_precompiled (pcf, fname, limit)
buf = xmalloc (st_size + 2);
while (st_size > 0)
{
- i = read (pcf, buf + length, st_size);
+ i = safe_read (pcf, buf + length, st_size);
if (i < 0)
goto nope;
if (i == 0)
@@ -4746,24 +4786,6 @@ pcstring_used (hp)
delete_macro (hp);
}
-/* Write LEN bytes at PTR to descriptor DESC,
- retrying if necessary, and treating any real error as fatal. */
-
-static void
-safe_write (desc, ptr, len)
- int desc;
- char *ptr;
- int len;
-{
- while (len > 0) {
- int written = write (fileno (stdout), ptr, len);
- if (written < 0)
- pfatal_with_name (out_fname);
- ptr += written;
- len -= written;
- }
-}
-
/* Write the output, interspersing precompiled strings in their */
/* appropriate places. */
static void