annotate lib/full-write.c @ 1929:f7d4ee7478d7

(get_date): Rename outermost local `probe' to `quarter'.
author Jim Meyering <jim@meyering.net>
date Sun, 29 Aug 1999 12:28:56 +0000
parents c005b7ff8483
children a64de2641650
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
1252
c005b7ff8483 protoize
Jim Meyering <jim@meyering.net>
parents: 938
diff changeset
2 Copyright (C) 1993, 1994, 1997, 1998 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
640
d60db0e1c0d9 Libit tweaks.
Jim Meyering <jim@meyering.net>
parents: 557
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
d60db0e1c0d9 Libit tweaks.
Jim Meyering <jim@meyering.net>
parents: 557
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
179
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
720
Jim Meyering <jim@meyering.net>
parents: 640
diff changeset
21 #if HAVE_CONFIG_H
640
d60db0e1c0d9 Libit tweaks.
Jim Meyering <jim@meyering.net>
parents: 557
diff changeset
22 # include <config.h>
179
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
720
Jim Meyering <jim@meyering.net>
parents: 640
diff changeset
27 #if HAVE_UNISTD_H
640
d60db0e1c0d9 Libit tweaks.
Jim Meyering <jim@meyering.net>
parents: 557
diff changeset
28 # include <unistd.h>
179
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.
557
3e36672c3a83 Revert last change. Comment didn't add anything.
Jim Meyering <jim@meyering.net>
parents: 556
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
1252
c005b7ff8483 protoize
Jim Meyering <jim@meyering.net>
parents: 938
diff changeset
40 full_write (int desc, const char *ptr, size_t len)
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 {
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
42 int total_written;
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
43
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
44 total_written = 0;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 while (len > 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 int written = write (desc, ptr, len);
938
28d73bdb3f50 (full_write): Add comment regarding failure due to bug in
Jim Meyering <jim@meyering.net>
parents: 720
diff changeset
48 /* FIXME: write on my slackware Linux 1.2.13 returns zero when
28d73bdb3f50 (full_write): Add comment regarding failure due to bug in
Jim Meyering <jim@meyering.net>
parents: 720
diff changeset
49 I try to write more data than there is room on a floppy disk.
28d73bdb3f50 (full_write): Add comment regarding failure due to bug in
Jim Meyering <jim@meyering.net>
parents: 720
diff changeset
50 This puts dd into an infinite loop. Reproduce with
28d73bdb3f50 (full_write): Add comment regarding failure due to bug in
Jim Meyering <jim@meyering.net>
parents: 720
diff changeset
51 dd if=/dev/zero of=/dev/fd0. */
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 if (written < 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 #ifdef EINTR
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 if (errno == EINTR)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 continue;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 return written;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 }
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
60 total_written += written;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 ptr += written;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 len -= written;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 }
181
Jim Meyering <jim@meyering.net>
parents: 180
diff changeset
64 return total_written;
179
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 }