From: Richard Stallman Date: Wed, 3 Nov 1993 20:09:56 +0000 (+0000) Subject: (safe_read): New function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bb7de82295a953b28a4d01b378ab65ffafe9aeeb;p=gcc.git (safe_read): New function. (main, finclude, check_precompiled): Use safe_read. From-SVN: r5982 --- diff --git a/gcc/cccp.c b/gcc/cccp.c index 671d7deb5e7..f28cfe6eefd 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