diff --git a/libmaxsi/file.c b/libmaxsi/file.c index f445b7a9..e1eac989 100644 --- a/libmaxsi/file.c +++ b/libmaxsi/file.c @@ -225,3 +225,23 @@ int fputs(const char* str, FILE* fp) return result; } +char* fgets(char* dest, int size, FILE* fp) +{ + if ( size <= 0 ) { errno = EINVAL; return NULL; } + int i; + for ( i = 0; i < size-1; i++ ) + { + int c = getc(fp); + if ( c == EOF ) + { + if ( ferror(fp) ) { return NULL; } + else { i++; break; } /* EOF */ + } + dest[i] = c; + if ( c == '\n' ) { i++; break; } + } + + dest[i] = '\0'; + return dest; +} + diff --git a/libmaxsi/include/stdio.h b/libmaxsi/include/stdio.h index e6ce005d..86d03ad0 100644 --- a/libmaxsi/include/stdio.h +++ b/libmaxsi/include/stdio.h @@ -78,6 +78,7 @@ extern int ferror(FILE* stream); extern int fflush(FILE* stream); extern int fileno(FILE* stream); extern int fgetc(FILE* stream); +extern char* fgets(char* restrict s, int n, FILE* restrict stream); extern FILE* fopen(const char* restrict filename, const char* restrict mode); extern int fprintf(FILE* restrict stream, const char* restrict format, ...); extern int fputc(int c, FILE* stream); @@ -111,7 +112,6 @@ extern int vsprintf(char* restrict s, const char* restrict format, va_list ap); /* TODO: These are not implemented in libmaxsi/sortix yet. */ #if defined(__SORTIX_SHOW_UNIMPLEMENTED) extern char* ctermid(char* s); -extern char* fgets(char* restrict s, int n, FILE* restrict stream); extern FILE *fmemopen(void* restrict buf, size_t size, const char* restrict mode); extern FILE* freopen(const char* restrict filename, const char *restrict mode, FILE* restrict stream); extern FILE* open_memstream(char** bufp, size_t* sizep);