]> Dogcows Code - chaz/tar/blobdiff - lib/full-read.c
Update
[chaz/tar] / lib / full-read.c
index 1c6ead82826ee0df8090e793333f24a59efd8704..d20e64904aee138322ac900f79693ae039fb70c8 100644 (file)
@@ -1,5 +1,5 @@
 /* full-read.c -- an interface to read that retries after interrupts
-   Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1997, 1999 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -35,26 +35,16 @@ extern int errno;
    Return the actual number of bytes read, zero for EOF, or negative
    for an error.  */
 
-int
-full_read (desc, ptr, len)
-     int desc;
-     char *ptr;
-     size_t len;
+ssize_t
+full_read (int desc, char *ptr, size_t len)
 {
-  int n_chars;
-
-  if (len <= 0)
-    return len;
-
-#ifdef EINTR
-  do
+  for (;;)
     {
-      n_chars = read (desc, ptr, len);
-    }
-  while (n_chars < 0 && errno == EINTR);
-#else
-  n_chars = read (desc, ptr, len);
+      ssize_t n = read (desc, ptr, len);
+#ifdef EINTR
+      if (n < 0 && errno == EINTR)
+       continue;
 #endif
-
-  return n_chars;
+      return n;
+    }
 }
This page took 0.022418 seconds and 4 git commands to generate.