]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
.
authorJim Meyering <jim@meyering.net>
Wed, 26 Jan 1994 18:19:10 +0000 (18:19 +0000)
committerJim Meyering <jim@meyering.net>
Wed, 26 Jan 1994 18:19:10 +0000 (18:19 +0000)
src/cp.c
src/dd.c
src/install.c
src/mv.c
src/touch.c

index 7c46227d3a0d5300e730308b597033e8ab309062..fceee953c1284c4380f591ce47e0072ccc794b4e 100644 (file)
--- a/src/cp.c
+++ b/src/cp.c
@@ -56,6 +56,7 @@ char *dirname ();
 char *xstrdup ();
 enum backup_type get_version ();
 int eaccess_stat ();
+int full_write ();
 
 static int do_copy ();
 static int copy ();
@@ -1129,7 +1130,6 @@ copy_reg (src_path, dst_path)
   int dest_desc;
   int source_desc;
   int n_read;
-  int n_written;
   struct stat sb;
   char *cp;
   int *ip;
@@ -1197,6 +1197,10 @@ copy_reg (src_path, dst_path)
       n_read = read (source_desc, buf, buf_size);
       if (n_read < 0)
        {
+#ifdef EINTR
+         if (errno == EINTR)
+           continue;
+#endif
          error (0, errno, "%s", src_path);
          return_val = -1;
          goto ret;
@@ -1243,8 +1247,7 @@ copy_reg (src_path, dst_path)
        }
       if (ip == 0)
        {
-         n_written = write (dest_desc, buf, n_read);
-         if (n_written < n_read)
+         if (full_write (dest_desc, buf, n_read) < 0)
            {
              error (0, errno, "%s", dst_path);
              return_val = -1;
@@ -1262,12 +1265,12 @@ copy_reg (src_path, dst_path)
     {
 #ifdef HAVE_FTRUNCATE
       /* Write a null character and truncate it again.  */
-      if (write (dest_desc, "", 1) != 1
+      if (full_write (dest_desc, "", 1) < 0
          || ftruncate (dest_desc, n_read_total) < 0)
 #else
       /* Seek backwards one character and write a null.  */
       if (lseek (dest_desc, (off_t) -1, SEEK_CUR) < 0L
-         || write (dest_desc, "", 1) != 1)
+         || full_write (dest_desc, "", 1) < 0)
 #endif
        {
          error (0, errno, "%s", dst_path);
index 971d7eb73341811fefe1313eaa40a2c54cee0551..1da5e177f2e70a9e45175057d1be36710856b3d7 100644 (file)
--- a/src/dd.c
+++ b/src/dd.c
 
 char *xmalloc ();
 void error ();
+int safe_read ();
 
 static RETSIGTYPE interrupt_handler ();
 static int bit_count ();
@@ -446,7 +447,11 @@ skip (fdesc, file, records, blocksize, buf)
     {
       while (records-- > 0)
        {
-         if (read (fdesc, buf, blocksize) < 0)
+         if (read (fdesc, buf, blocksize) < 0
+#ifdef EINTR
+             && errno != EINTR
+#endif
+             )
            {
              error (0, errno, "%s", file);
              quit (1);
@@ -563,7 +568,7 @@ copy ()
       if ((conversions_mask & C_SYNC) && (conversions_mask & C_NOERROR))
        bzero (ibuf, input_blocksize);
 
-      nread = read (input_fd, ibuf, input_blocksize);
+      nread = safe_read (input_fd, ibuf, input_blocksize);
 
       if (nread == 0)
        break;                  /* EOF.  */
index 7c6a5d2f792d9417af7f3580a2ff92550e726bc4..77617b02ad0ec5078a33256cad5ba3050c552cd3 100644 (file)
@@ -105,6 +105,8 @@ char *basename ();
 char *stpcpy ();
 char *xmalloc ();
 void error ();
+int safe_read ();
+int full_write ();
 int make_path ();
 int isdir ();
 
@@ -374,8 +376,8 @@ copy_file (from, to, to_created)
       return 1;
     }
 
-  while ((bytes = read (fromfd, buffer, READ_SIZE)) > 0)
-    if (write (tofd, buffer, bytes) != bytes)
+  while ((bytes = safe_read (fromfd, buffer, READ_SIZE)) > 0)
+    if (full_write (tofd, buffer, bytes) < 0)
       {
        error (0, errno, "%s", to);
        goto copy_error;
index bec6939e45fafc0f64e69734e0efb68b5a8681e5..35d891cc5857689b72c508c3cbf180a8f284fae6 100644 (file)
--- a/src/mv.c
+++ b/src/mv.c
@@ -68,6 +68,8 @@ enum backup_type get_version ();
 int isdir ();
 int yesno ();
 void error ();
+int safe_read ();
+int full_write ();
 void strip_trailing_slashes ();
 int eaccess_stat ();
 char *stpcpy ();
@@ -393,25 +395,16 @@ copy_reg (source, dest)
       return 1;
     }
 
-  while ((len = read (ifd, buf, sizeof (buf))) > 0)
+  while ((len = safe_read (ifd, buf, sizeof (buf))) > 0)
     {
-      int wrote = 0;
-      char *bp = buf;
-
-      do
+      if (full_write (ofd, buf, len) < 0)
        {
-         wrote = write (ofd, bp, len);
-         if (wrote < 0)
-           {
-             error (0, errno, "%s", dest);
-             close (ifd);
-             close (ofd);
-             unlink (dest);
-             return 1;
-           }
-         bp += wrote;
-         len -= wrote;
-       } while (len > 0);
+         error (0, errno, "%s", dest);
+         close (ifd);
+         close (ofd);
+         unlink (dest);
+         return 1;
+       }
     }
   if (len < 0)
     {
index b664fae57c3c3e285353139ab6ce04fd00aa898a..33fadc2822c3c6808bad1fe6265c88d42c44bbea 100644 (file)
@@ -59,6 +59,8 @@ int argmatch ();
 time_t get_date ();
 time_t posixtime ();
 void error ();
+int safe_read ();
+int full_write ();
 void invalid_arg ();
 
 static int touch ();
@@ -365,9 +367,9 @@ utime_now (file, filesize)
 
   fd = open (file, O_RDWR, 0666);
   if (fd < 0
-      || read (fd, &c, sizeof (char)) < 0
+      || safe_read (fd, &c, sizeof (char)) < 0
       || lseek (fd, (off_t) 0, SEEK_SET) < 0
-      || write (fd, &c, sizeof (char)) < 0
+      || full_write (fd, &c, sizeof (char)) < 0
       || ftruncate (fd, filesize) < 0
       || close (fd) < 0)
     status = -1;