annotate lib/full-write.c @ 234:df10ef6df7ce

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