diff options
author | Richard Stallman <rms@gnu.org> | 1993-11-02 23:06:29 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-11-02 23:06:29 +0000 |
commit | c7bfb646244bff1568ff2b1d8615f139a61aac9f (patch) | |
tree | c82be0670625b26bbdf0dbf5d182f73d25132195 /gcc/protoize.c | |
parent | 500c9e81dcb64ee5b4e3e0f15271482cb31ecc0e (diff) | |
download | gcc-c7bfb646244bff1568ff2b1d8615f139a61aac9f.zip gcc-c7bfb646244bff1568ff2b1d8615f139a61aac9f.tar.gz gcc-c7bfb646244bff1568ff2b1d8615f139a61aac9f.tar.bz2 |
(safe_read): New function.
(process_aux_info_file, edit_file): Use safe_read.
From-SVN: r5977
Diffstat (limited to 'gcc/protoize.c')
-rw-r--r-- | gcc/protoize.c | 66 |
1 files changed, 44 insertions, 22 deletions
diff --git a/gcc/protoize.c b/gcc/protoize.c index 7dd0d66..a3febac 100644 --- a/gcc/protoize.c +++ b/gcc/protoize.c @@ -732,6 +732,48 @@ outer: return 0; } +/* 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 (fileno (stdout), 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, out_fname) + int desc; + char *ptr; + int len; + char *out_fname; +{ + while (len > 0) { + int written = write (fileno (stdout), ptr, len); + if (written < 0) + fprintf (stderr, "%s: error writing file `%s': %s\n", + pname, shortpath (NULL, out_fname), sys_errlist[errno]); + ptr += written; + len -= written; + } +} + /* Get setup to recover in case the edit we are about to do goes awry. */ void @@ -2228,7 +2270,7 @@ start_over: ; /* Read the aux_info file into memory. */ - if (read (aux_info_file, aux_info_base, aux_info_size) != aux_info_size) + if (safe_read (aux_info_file, aux_info_base, aux_info_size) != aux_info_size) { fprintf (stderr, "%s: error reading aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), @@ -4033,26 +4075,6 @@ scan_for_missed_items (file_p) } } -/* 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, out_fname) - int desc; - char *ptr; - int len; - char *out_fname; -{ - while (len > 0) { - int written = write (fileno (stdout), ptr, len); - if (written < 0) - fprintf (stderr, "%s: error writing file `%s': %s\n", - pname, shortpath (NULL, out_fname), sys_errlist[errno]); - ptr += written; - len -= written; - } -} - /* Do all editing operations for a single source file (either a "base" file or an "include" file). To do this we read the file into memory, keep a virgin copy there, make another cleaned in-core copy of the original file @@ -4166,7 +4188,7 @@ edit_file (hp) in one swell fwoop. Then figure out where the end of the text is and make sure that it ends with a newline followed by a null. */ - if (read (input_file, new_orig_text_base, orig_size) != orig_size) + if (safe_read (input_file, new_orig_text_base, orig_size) != orig_size) { close (input_file); fprintf (stderr, "\n%s: error reading input file `%s': %s\n", |