OpenCoverage

full-write.c #1

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/full-write.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* An interface to read and write that retries (if necessary) until complete.-
2-
3 Copyright (C) 1993-1994, 1997-2006, 2009-2018 Free Software Foundation, Inc.-
4-
5 This program is free software: you can redistribute it and/or modify-
6 it under the terms of the GNU General Public License as published by-
7 the Free Software Foundation; either version 3 of the License, or-
8 (at your option) any later version.-
9-
10 This program is distributed in the hope that it will be useful,-
11 but WITHOUT ANY WARRANTY; without even the implied warranty of-
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
13 GNU General Public License for more details.-
14-
15 You should have received a copy of the GNU General Public License-
16 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
17-
18#include <config.h>-
19-
20/* Specification. */-
21#ifdef FULL_READ-
22# include "full-read.h"-
23#else-
24# include "full-write.h"-
25#endif-
26-
27#include <errno.h>-
28-
29#ifdef FULL_READ-
30# include "safe-read.h"-
31# define safe_rw safe_read-
32# define full_rw full_read-
33# undef const-
34# define const /* empty */-
35#else-
36# include "safe-write.h"-
37# define safe_rw safe_write-
38# define full_rw full_write-
39#endif-
40-
41#ifdef FULL_READ-
42/* Set errno to zero upon EOF. */-
43# define ZERO_BYTE_TRANSFER_ERRNO 0-
44#else-
45/* Some buggy drivers return 0 when one tries to write beyond-
46 a device's end. (Example: Linux 1.2.13 on /dev/fd0.)-
47 Set errno to ENOSPC so they get a sensible diagnostic. */-
48# define ZERO_BYTE_TRANSFER_ERRNO ENOSPC-
49#endif-
50-
51/* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if-
52 interrupted or if a partial write(read) occurs. Return the number-
53 of bytes transferred.-
54 When writing, set errno if fewer than COUNT bytes are written.-
55 When reading, if fewer than COUNT bytes are read, you must examine-
56 errno to distinguish failure from EOF (errno == 0). */-
57size_t-
58full_rw (int fd, const void *buf, size_t count)-
59{-
60 size_t total = 0;-
61 const char *ptr = (const char *) buf;-
62-
63 while (count > 0)
count > 0Description
TRUEevaluated 38821 times by 8 tests
Evaluated by:
  • cat
  • cp
  • factor
  • ginstall
  • head
  • mv
  • split
  • yes
FALSEevaluated 36861 times by 8 tests
Evaluated by:
  • cat
  • cp
  • factor
  • ginstall
  • head
  • mv
  • split
  • yes
36861-38821
64 {-
65 size_t n_rw = safe_rw (fd, ptr, count);-
66 if (n_rw == (size_t) -1)
n_rw == (size_t) -1Description
TRUEevaluated 102 times by 3 tests
Evaluated by:
  • cat
  • split
  • yes
FALSEevaluated 38716 times by 8 tests
Evaluated by:
  • cat
  • cp
  • factor
  • ginstall
  • head
  • mv
  • split
  • yes
102-38716
67 break;
executed 102 times by 3 tests: break;
Executed by:
  • cat
  • split
  • yes
102
68 if (n_rw == 0)
n_rw == 0Description
TRUEevaluated 970 times by 2 tests
Evaluated by:
  • ginstall
  • head
FALSEevaluated 37746 times by 8 tests
Evaluated by:
  • cat
  • cp
  • factor
  • ginstall
  • head
  • mv
  • split
  • yes
970-37746
69 {-
70 errno = ZERO_BYTE_TRANSFER_ERRNO;-
71 break;
executed 970 times by 2 tests: break;
Executed by:
  • ginstall
  • head
970
72 }-
73 total += n_rw;-
74 ptr += n_rw;-
75 count -= n_rw;-
76 }
executed 37746 times by 8 tests: end of block
Executed by:
  • cat
  • cp
  • factor
  • ginstall
  • head
  • mv
  • split
  • yes
37746
77-
78 return total;
executed 37933 times by 8 tests: return total;
Executed by:
  • cat
  • cp
  • factor
  • ginstall
  • head
  • mv
  • split
  • yes
37933
79}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2