]> git.sur5r.net Git - cc65/blob - libsrc/common/fgets.c
added sleep() implementation
[cc65] / libsrc / common / fgets.c
1 /*
2  * Ullrich von Bassewitz, 11.08.1998
3  *
4  * char* fgets (char* s, int size, FILE* f);
5  */
6
7
8
9 #include <stdio.h>
10 #include <errno.h>
11 #include "_file.h"
12
13
14
15 char* fgets (char* s, unsigned size, FILE* f)
16 {
17     int i = 0;
18     int c;
19
20     if (size == 0) {
21         /* Invalid size */
22         _errno = EINVAL;
23         return 0;
24     }
25
26     /* Read input */
27     i = 0;
28     while (--size) {
29
30         /* Get next character */
31         if ((c = fgetc (f)) == EOF) {
32             s[i] = '\0';
33             /* Error or EOF */
34             if ((f->f_flags & _FERROR) != 0 || i == 0) {
35                 /* ERROR or EOF on first char */
36                 return 0;
37             } else {
38                 /* EOF with data already read */
39                 break;
40             }
41         }
42
43         /* One char more */
44         s[i++] = c;
45
46         /* Stop at end of line */
47         if (c == '\n') {
48             break;
49         }
50     }
51
52     /* Terminate the string */
53     s[i] = '\0';
54
55     /* Done */
56     return s;
57 }
58
59
60