annotate lib/safe-read.c @ 1320:abeaa95922bd

(noinst_HEADERS): Add safe-read.h.
author Jim Meyering <jim@meyering.net>
date Sat, 11 Apr 1998 17:53:09 +0000
parents 2f2ee0189bb5
children 5cd2eca6193e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
182
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
1 /* safe-read.c -- an interface to read that retries after interrupts
1320
abeaa95922bd (noinst_HEADERS): Add safe-read.h.
Jim Meyering <jim@meyering.net>
parents: 728
diff changeset
2 Copyright (C) 1993, 1994, 1998 Free Software Foundation, Inc.
182
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
3
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
4 This program is free software; you can redistribute it and/or modify
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
5 it under the terms of the GNU General Public License as published by
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
7 any later version.
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
8
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
9 This program is distributed in the hope that it will be useful,
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
12 GNU General Public License for more details.
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
13
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
14 You should have received a copy of the GNU General Public License
650
b4ef1c1a0171 update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents: 642
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
b4ef1c1a0171 update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents: 642
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
183
Jim Meyering <jim@meyering.net>
parents: 182
diff changeset
17 */
182
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
18
728
Jim Meyering <jim@meyering.net>
parents: 650
diff changeset
19 #if HAVE_CONFIG_H
642
02a593f698b9 Indent nested CPP-directives.
Jim Meyering <jim@meyering.net>
parents: 371
diff changeset
20 # include <config.h>
182
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
21 #endif
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
22
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
23 #include <sys/types.h>
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
24
728
Jim Meyering <jim@meyering.net>
parents: 650
diff changeset
25 #if HAVE_UNISTD_H
642
02a593f698b9 Indent nested CPP-directives.
Jim Meyering <jim@meyering.net>
parents: 371
diff changeset
26 # include <unistd.h>
182
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
27 #endif
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
28
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
29 #include <errno.h>
371
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
30 #ifndef errno
182
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
31 extern int errno;
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
32 #endif
83507c652f09 merge with 3.9c
Jim Meyering <jim@meyering.net>
parents: 179
diff changeset
33
1320
abeaa95922bd (noinst_HEADERS): Add safe-read.h.
Jim Meyering <jim@meyering.net>
parents: 728
diff changeset
34 #include "safe-read.h"
abeaa95922bd (noinst_HEADERS): Add safe-read.h.
Jim Meyering <jim@meyering.net>
parents: 728
diff changeset
35
371
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
36 /* Read LEN bytes at PTR from descriptor DESC, retrying if interrupted.
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
37 Return the actual number of bytes read, zero for EOF, or negative
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
38 for an error. */
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39
1320
abeaa95922bd (noinst_HEADERS): Add safe-read.h.
Jim Meyering <jim@meyering.net>
parents: 728
diff changeset
40 ssize_t
abeaa95922bd (noinst_HEADERS): Add safe-read.h.
Jim Meyering <jim@meyering.net>
parents: 728
diff changeset
41 safe_read (int desc, char *ptr, size_t len)
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 {
1320
abeaa95922bd (noinst_HEADERS): Add safe-read.h.
Jim Meyering <jim@meyering.net>
parents: 728
diff changeset
43 ssize_t n_chars;
371
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
44
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
45 if (len <= 0)
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
46 return len;
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
47
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 #ifdef EINTR
371
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
49 do
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
50 {
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
51 n_chars = read (desc, ptr, len);
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
52 }
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
53 while (n_chars < 0 && errno == EINTR);
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
54 #else
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
55 n_chars = read (desc, ptr, len);
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 #endif
371
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
57
2f5dae439e46 See log in textutils/lib/.
Jim Meyering <jim@meyering.net>
parents: 364
diff changeset
58 return n_chars;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 }