annotate lib/safe-read.c @ 223:b701d2d6b404

GNU file utilities
author Jim Meyering <jim@meyering.net>
date Fri, 01 Jul 1994 19:45:39 +0000
parents 8124cd69ac96
children ed27c3582f3b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
148
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* safe-read.c -- an interface to read that retries after interrupts
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
2 Copyright (C) 1993, 1994 Free Software Foundation, Inc.
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
223
b701d2d6b404 GNU file utilities
Jim Meyering <jim@meyering.net>
parents: 148
diff changeset
17 */
148
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19 #ifdef HAVE_CONFIG_H
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 #if defined (CONFIG_BROKETS)
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 /* We use <config.h> instead of "config.h" so that a compilation
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 (which it would do because it found this file in $srcdir). */
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 #include <config.h>
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25 #else
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 #include "config.h"
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 #endif
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #endif
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 #include <sys/types.h>
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 #ifdef HAVE_UNISTD_H
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 #include <unistd.h>
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 #endif
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 #include <errno.h>
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 #ifndef STDC_HEADERS
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 extern int errno;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 #endif
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 /* Read LEN bytes at PTR from descriptor DESC, retrying if interrupted.
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 Return the actual number of bytes read, zero for EOF, or negative
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43 for an error. */
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 int
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 safe_read (desc, ptr, len)
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 int desc;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 char *ptr;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 int len;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 {
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 int n_chars;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 if (len <= 0)
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 return len;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 #ifdef EINTR
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 do
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 {
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 n_chars = read (desc, ptr, len);
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 }
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 while (n_chars < 0 && errno == EINTR);
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 #else
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 n_chars = read (desc, ptr, len);
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 #endif
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 return n_chars;
8124cd69ac96 GNU file utilities
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67 }