]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(head_bytes, head_lines): Adapt to new safe_read ABI.
authorJim Meyering <jim@meyering.net>
Mon, 7 Oct 2002 05:13:59 +0000 (05:13 +0000)
committerJim Meyering <jim@meyering.net>
Mon, 7 Oct 2002 05:13:59 +0000 (05:13 +0000)
src/head.c

index 540d601c43d68b4ea470f3736fcd208d5fd7173f..0c972e28328db1b050153f3578d404c21d9e5750 100644 (file)
@@ -130,7 +130,6 @@ static int
 head_bytes (const char *filename, int fd, uintmax_t bytes_to_write)
 {
   char buffer[BUFSIZE];
-  int bytes_read;
   size_t bytes_to_read = BUFSIZE;
 
   /* Need BINARY I/O for the byte counts to be accurate.  */
@@ -138,10 +137,11 @@ head_bytes (const char *filename, int fd, uintmax_t bytes_to_write)
 
   while (bytes_to_write)
     {
+      size_t bytes_read;
       if (bytes_to_write < bytes_to_read)
        bytes_to_read = bytes_to_write;
       bytes_read = safe_read (fd, buffer, bytes_to_read);
-      if (bytes_read < 0)
+      if (bytes_read == SAFE_READ_ERROR)
        {
          error (0, errno, "%s", filename);
          return 1;
@@ -165,10 +165,10 @@ head_lines (const char *filename, int fd, uintmax_t lines_to_write)
 
   while (lines_to_write)
     {
-      int bytes_read = safe_read (fd, buffer, BUFSIZE);
-      int bytes_to_write = 0;
+      size_t bytes_read = safe_read (fd, buffer, BUFSIZE);
+      size_t bytes_to_write = 0;
 
-      if (bytes_read < 0)
+      if (bytes_read == SAFE_READ_ERROR)
        {
          error (0, errno, "%s", filename);
          return 1;
@@ -178,10 +178,11 @@ head_lines (const char *filename, int fd, uintmax_t lines_to_write)
       while (bytes_to_write < bytes_read)
        if (buffer[bytes_to_write++] == '\n' && --lines_to_write == 0)
          {
+           off_t n_bytes_past_EOL = bytes_read - bytes_to_write;
            /* If we have read more data than that on the specified number
               of lines, try to seek back to the position we would have
               gotten to had we been reading one byte at a time.  */
-           if (lseek (fd, bytes_to_write - bytes_read, SEEK_CUR) < 0)
+           if (lseek (fd, -n_bytes_past_EOL, SEEK_CUR) < 0)
              {
                int e = errno;
                struct stat st;