aboutsummaryrefslogtreecommitdiff
path: root/gcc/protoize.c
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-11-02 23:06:29 +0000
committerRichard Stallman <rms@gnu.org>1993-11-02 23:06:29 +0000
commitc7bfb646244bff1568ff2b1d8615f139a61aac9f (patch)
treec82be0670625b26bbdf0dbf5d182f73d25132195 /gcc/protoize.c
parent500c9e81dcb64ee5b4e3e0f15271482cb31ecc0e (diff)
downloadgcc-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.c66
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",