annotate lib/full-write.c @ 439:a9015d648b2e

No longer include safe-l?stat.h.
author Jim Meyering <jim@meyering.net>
date Fri, 19 May 1995 15:23:18 +0000
parents bd90a233f266
children 6a27e67cc59a
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 #include <config.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25 #include <sys/types.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 #ifdef HAVE_UNISTD_H
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #include <unistd.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31 #include <errno.h>
380
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
32 #ifndef errno
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 extern int errno;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 /* Write LEN bytes at PTR to descriptor DESC, retrying if interrupted.
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
37 Return LEN upon success, write's (negative) error code otherwise. */
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 int
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
40 full_write (desc, ptr, len)
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 int desc;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 char *ptr;
316
f9fa66a3a613 merge with 3.9h
Jim Meyering <jim@meyering.net>
parents: 234
diff changeset
43 size_t len;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 {
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
45 int total_written;
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
46
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
47 total_written = 0;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 while (len > 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 int written = write (desc, ptr, len);
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 if (written < 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 #ifdef EINTR
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 if (errno == EINTR)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 continue;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 return written;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 }
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
59 total_written += written;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 ptr += written;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 len -= written;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 }
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
63 return total_written;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 }