Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | extern ssize_t zread (int, char *, size_t); | - |
12 | extern ssize_t zreadc (int, char *); | - |
13 | extern ssize_t zreadintr (int, char *, size_t); | - |
14 | extern ssize_t zreadcintr (int, char *); | - |
15 | | - |
16 | typedef ssize_t breadfunc_t (int, char *, size_t); | - |
17 | typedef ssize_t creadfunc_t (int, char *); | - |
18 | ssize_t | - |
19 | zgetline (fd, lineptr, n, delim, unbuffered_read) | - |
20 | int fd; | - |
21 | char **lineptr; | - |
22 | size_t *n; | - |
23 | int delim; | - |
24 | int unbuffered_read; | - |
25 | { | - |
26 | int nr, retval; | - |
27 | char *line, c; | - |
28 | | - |
29 | if (lineptr == 0TRUE | never evaluated | FALSE | evaluated 161 times by 1 test |
|| n == 0TRUE | never evaluated | FALSE | evaluated 161 times by 1 test |
|| (*TRUE | evaluated 23 times by 1 test | FALSE | evaluated 138 times by 1 test |
lineptr == 0TRUE | evaluated 23 times by 1 test | FALSE | evaluated 138 times by 1 test |
&& *TRUE | never evaluated | FALSE | evaluated 23 times by 1 test |
n != 0TRUE | never evaluated | FALSE | evaluated 23 times by 1 test |
)) | 0-161 |
30 | return never executed: return -1; -1;never executed: return -1; | 0 |
31 | | - |
32 | nr = 0; | - |
33 | line = *lineptr; | - |
34 | | - |
35 | while (1) | - |
36 | { | - |
37 | retval = unbuffered_readTRUE | evaluated 24 times by 1 test | FALSE | evaluated 2509 times by 1 test |
? zread (fd, &c, 1) : zreadc(fd, &c); | 24-2509 |
38 | | - |
39 | if (retval <= 0TRUE | evaluated 27 times by 1 test | FALSE | evaluated 2506 times by 1 test |
) | 27-2506 |
40 | { | - |
41 | if (lineTRUE | evaluated 16 times by 1 test | FALSE | evaluated 11 times by 1 test |
&& nr > 0TRUE | evaluated 7 times by 1 test | FALSE | evaluated 9 times by 1 test |
) | 7-16 |
42 | line[nr] = '\0';executed 7 times by 1 test: line[nr] = '\0'; | 7 |
43 | break;executed 27 times by 1 test: break; | 27 |
44 | } | - |
45 | | - |
46 | if (nr + 2 >= *nTRUE | evaluated 20 times by 1 test | FALSE | evaluated 2486 times by 1 test |
) | 20-2486 |
47 | { | - |
48 | size_t new_size; | - |
49 | | - |
50 | new_size = (*TRUE | evaluated 12 times by 1 test | FALSE | evaluated 8 times by 1 test |
n == 0)TRUE | evaluated 12 times by 1 test | FALSE | evaluated 8 times by 1 test |
? 16 : *n * 2; | 8-12 |
51 | line = (*TRUE | never evaluated | FALSE | evaluated 20 times by 1 test |
n >= new_size)TRUE | never evaluated | FALSE | evaluated 20 times by 1 test |
? | 0-20 |
52 | ((void *)0) | - |
53 | : sh_xrealloc((*lineptr), (new_size), "zgetline.c", 96); | - |
54 | | - |
55 | if (lineTRUE | evaluated 20 times by 1 test | FALSE | never evaluated |
) | 0-20 |
56 | { | - |
57 | *lineptr = line; | - |
58 | *n = new_size; | - |
59 | }executed 20 times by 1 test: end of block | 20 |
60 | else | - |
61 | { | - |
62 | if (*TRUE | never evaluated | FALSE | never evaluated |
n > 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
63 | { | - |
64 | (*lineptr)[*n - 1] = '\0'; | - |
65 | nr = *n - 2; | - |
66 | } never executed: end of block | 0 |
67 | break; never executed: break; | 0 |
68 | } | - |
69 | } | - |
70 | | - |
71 | line[nr] = c; | - |
72 | nr++; | - |
73 | | - |
74 | if (c == delimTRUE | evaluated 134 times by 1 test | FALSE | evaluated 2372 times by 1 test |
) | 134-2372 |
75 | { | - |
76 | line[nr] = '\0'; | - |
77 | break;executed 134 times by 1 test: break; | 134 |
78 | } | - |
79 | }executed 2372 times by 1 test: end of block | 2372 |
80 | | - |
81 | returnexecuted 161 times by 1 test: return nr - 1; nr - 1;executed 161 times by 1 test: return nr - 1; | 161 |
82 | } | - |
| | |