libc: Make fread() and fwrite() less awkward
This commit is contained in:
parent
88011fc162
commit
2980ee3973
@ -127,15 +127,15 @@ extern "C"
|
|||||||
|
|
||||||
size_t fread(void* buf, size_t size, size_t nmemb, FILE* stream)
|
size_t fread(void* buf, size_t size, size_t nmemb, FILE* stream)
|
||||||
{
|
{
|
||||||
ssize_t status =
|
size_t rsize = size * nmemb;
|
||||||
read(stream->f_fd, buf,
|
ssize_t status = read(stream->f_fd, buf, rsize);
|
||||||
size * nmemb); // FIXME: This function should use file_read_buf() to not conflict with fgets().
|
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
{
|
{
|
||||||
stream->f_err = 1;
|
stream->f_err = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (status == 0) stream->f_eof = 1;
|
if (status == 0 && rsize) stream->f_eof = 1;
|
||||||
|
if (status == 0) return (size_t)status;
|
||||||
return (size_t)status / size;
|
return (size_t)status / size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,13 +281,15 @@ extern "C"
|
|||||||
|
|
||||||
size_t fwrite(const void* buf, size_t size, size_t nmemb, FILE* stream)
|
size_t fwrite(const void* buf, size_t size, size_t nmemb, FILE* stream)
|
||||||
{
|
{
|
||||||
ssize_t status = write(stream->f_fd, buf, size * nmemb);
|
size_t rsize = size * nmemb;
|
||||||
|
ssize_t status = write(stream->f_fd, buf, rsize);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
{
|
{
|
||||||
stream->f_err = 1;
|
stream->f_err = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (status == 0) stream->f_eof = 1;
|
if (status == 0 && rsize) stream->f_eof = 1;
|
||||||
|
if (status == 0) return (size_t)status;
|
||||||
return (size_t)status / size;
|
return (size_t)status / size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user