LibC: fix fgets when reading empty line

This commit is contained in:
Bananymous 2023-12-05 07:46:14 +02:00
parent 52309413af
commit ab44c60d7e
1 changed files with 12 additions and 2 deletions

View File

@ -135,19 +135,28 @@ int fgetpos(FILE* file, fpos_t* pos)
char* fgets(char* str, int size, FILE* file) char* fgets(char* str, int size, FILE* file)
{ {
if (size == 0) if (size == 1)
str[0] = '\n';
if (size <= 1)
return str; return str;
int c = fgetc(file); int c = fgetc(file);
if (c == EOF) if (c == EOF)
return nullptr; return nullptr;
str[0] = c; str[0] = c;
if (str[0] == '\n')
{
str[1] = '\0';
return str;
}
for (int i = 1; i < size - 1; i++) for (int i = 1; i < size - 1; i++)
{ {
str[i] = fgetc(file); str[i] = fgetc(file);
if (str[i] == EOF) if (str[i] == EOF)
{ {
str[i] = '\0'; str[i] = '\0';
return nullptr; return str;
} }
if (str[i] == '\n') if (str[i] == '\n')
{ {
@ -155,6 +164,7 @@ char* fgets(char* str, int size, FILE* file)
return str; return str;
} }
} }
str[size - 1] = '\0'; str[size - 1] = '\0';
return str; return str;
} }