]> git.sur5r.net Git - cc65/blob - libsrc/common/fgets.c
Added proper 65sc02, 65ce02 and 4510 detection.
[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 /*****************************************************************************/
16 /*                                   Code                                    */
17 /*****************************************************************************/
18
19
20
21 char* __fastcall__ fgets (char* s, unsigned size, register FILE* f)
22 {
23     register char* p = s;
24     unsigned i;
25     int c;
26
27     if (size == 0) {
28         /* Invalid size */
29         return (char*) _seterrno (EINVAL);
30     }
31
32     /* Read input */
33     i = 0;
34     while (--size) {
35
36         /* Get next character */
37         if ((c = fgetc (f)) == EOF) {
38             /* Error or EOF */
39             if ((f->f_flags & _FERROR) != 0 || i == 0) {
40                 /* ERROR or EOF on first char */
41                 *p = '\0';
42                 return 0;
43             } else {
44                 /* EOF with data already read */
45                 break;
46             }
47         }
48
49         /* One char more */
50         *p = c;
51         ++p;
52         ++i;
53
54         /* Stop at end of line */
55         if ((char)c == '\n') {
56             break;
57         }
58     }
59
60     /* Terminate the string */
61     *p = '\0';
62
63     /* Done */
64     return s;
65 }
66
67
68