Make fread() more consistent with glibc

This commit is contained in:
Justine Tunney 2024-08-17 02:57:22 -07:00
parent 1d532ba3f8
commit 8e14b27749
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
3 changed files with 57 additions and 24 deletions

View file

@ -17,6 +17,7 @@
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/calls/calls.h"
#include "libc/errno.h"
#include "libc/stdio/stdio.h"
#include "libc/testlib/testlib.h"
@ -45,7 +46,7 @@ TEST(fread, eofIsSticky) {
}
TEST(fread, seekWithBuffer) {
FILE *f;
FILE* f;
char b[8] = "hellosup";
char c[8] = {0};
char d[8] = {0};
@ -60,3 +61,31 @@ TEST(fread, seekWithBuffer) {
ASSERT_STREQ("ellos", d);
ASSERT_EQ(0, fclose(f));
}
TEST(fread, zero) {
FILE* f;
char buf[8] = {0};
ASSERT_NE(NULL, (f = fopen("foo", "w")));
ASSERT_EQ(2, fwrite("hi", 1, 2, f));
ASSERT_EQ(0, fclose(f));
ASSERT_NE(NULL, (f = fopen("foo", "r")));
ASSERT_EQ(0, fread(buf, 0, 0, f));
ASSERT_EQ(0, ferror(stdin));
ASSERT_EQ(0, feof(stdin));
ASSERT_STREQ("", buf);
ASSERT_EQ(0, fclose(f));
}
TEST(fread, partial) {
FILE* f;
char buf[8] = {0};
ASSERT_NE(NULL, (f = fopen("foo", "w")));
ASSERT_EQ(2, fwrite("hi", 1, 2, f));
ASSERT_EQ(0, fclose(f));
ASSERT_NE(NULL, (f = fopen("foo", "r")));
ASSERT_EQ(0, fread(buf, 8, 1, f));
ASSERT_EQ(0, ferror(stdin));
ASSERT_EQ(0, feof(stdin));
ASSERT_EQ(0, fclose(f));
ASSERT_STREQ("hi", buf);
}