1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:17:36 +00:00

LibC: Update stdio stream error state in more places.

This commit is contained in:
Andreas Kling 2019-04-26 00:41:37 +02:00
parent 1163e0a030
commit 8effdc807a

View file

@ -102,6 +102,8 @@ int fflush(FILE* stream)
return 0; return 0;
int rc = write(stream->fd, stream->buffer, stream->buffer_index); int rc = write(stream->fd, stream->buffer, stream->buffer_index);
stream->buffer_index = 0; stream->buffer_index = 0;
if (rc < 0)
stream->error = errno;
return rc; return rc;
} }
@ -134,7 +136,7 @@ int fgetc(FILE* stream)
size_t nread = fread(&ch, sizeof(char), 1, stream); size_t nread = fread(&ch, sizeof(char), 1, stream);
if (nread <= 0) { if (nread <= 0) {
stream->eof = nread == 0; stream->eof = nread == 0;
stream->error = -nread; stream->error = errno;
return EOF; return EOF;
} }
return ch; return ch;
@ -205,7 +207,7 @@ void clearerr(FILE* stream)
{ {
assert(stream); assert(stream);
stream->eof = false; stream->eof = false;
stream->error = false; stream->error = 0;
} }
int ferror(FILE* stream) int ferror(FILE* stream)
@ -234,8 +236,10 @@ size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream)
} }
ssize_t rc = read(stream->fd, ptr, nmemb * size); ssize_t rc = read(stream->fd, ptr, nmemb * size);
if (rc < 0) if (rc < 0) {
stream->error = errno;
return 0; return 0;
}
if (rc == 0) if (rc == 0)
stream->eof = true; stream->eof = true;
nread += rc; nread += rc;
@ -245,10 +249,14 @@ size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream)
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream) size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream)
{ {
assert(stream); assert(stream);
fflush(stream); int rc = fflush(stream);
ssize_t nwritten = write(stream->fd, ptr, nmemb * size); if (rc < 0)
if (nwritten < 0)
return 0; return 0;
ssize_t nwritten = write(stream->fd, ptr, nmemb * size);
if (nwritten < 0) {
stream->error = errno;
return 0;
}
return nwritten; return nwritten;
} }