Greg Hartman | 76d05dc | 2016-11-23 15:51:27 -0800 | [diff] [blame^] | 1 | /* |
2 | * fgets.c | ||||
3 | * | ||||
4 | * This will be very slow due to the implementation of getc(), | ||||
5 | * but we can't afford to drain characters we don't need from | ||||
6 | * the input. | ||||
7 | */ | ||||
8 | |||||
9 | #include <stdio.h> | ||||
10 | |||||
11 | char *fgets(char *s, int n, FILE * f) | ||||
12 | { | ||||
13 | int ch; | ||||
14 | char *p = s; | ||||
15 | |||||
16 | while (n > 1) { | ||||
17 | ch = getc(f); | ||||
18 | if (ch == EOF) { | ||||
19 | *p = '\0'; | ||||
20 | return (p == s) ? NULL : s; | ||||
21 | } | ||||
22 | *p++ = ch; | ||||
23 | if (ch == '\n') | ||||
24 | break; | ||||
25 | n--; | ||||
26 | } | ||||
27 | if (n) | ||||
28 | *p = '\0'; | ||||
29 | |||||
30 | return s; | ||||
31 | } |