summaryrefslogtreecommitdiffstats
path: root/usr/klibc/tests/stdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/tests/stdio.c')
-rw-r--r--usr/klibc/tests/stdio.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/usr/klibc/tests/stdio.c b/usr/klibc/tests/stdio.c
new file mode 100644
index 0000000..895c730
--- /dev/null
+++ b/usr/klibc/tests/stdio.c
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <arpa/inet.h>
+#include <inttypes.h>
+
+#define TEST_WORDS (1024*1024)
+
+int main(void)
+{
+ FILE *f;
+ int i, n;
+ uint32_t *buf1, *buf2, *p;
+
+ printf("Hello, World!\nHello again");
+ printf(" - and some more - ");
+ printf("and some more\n");
+
+ buf1 = mmap(NULL, 2*4*TEST_WORDS, PROT_READ|PROT_WRITE,
+ MAP_ANONYMOUS|MAP_PRIVATE, 0, 0);
+ if (buf1 == MAP_FAILED) {
+ perror("mmap");
+ return 1;
+ }
+
+ buf2 = buf1 + TEST_WORDS;
+
+ p = buf1;
+ for (i = 0; i < TEST_WORDS; i++)
+ *p++ = htonl(i);
+
+ f = fopen("test.out", "w+b");
+ if (!f) {
+ perror("fopen");
+ return 1;
+ }
+
+ for (i = 2; i < TEST_WORDS; i += (i >> 1)) {
+ n = fwrite(buf1, 4, i, f);
+ if (n != i) {
+ perror("fwrite");
+ return 1;
+ }
+ }
+
+ fprintf(f, "Writing to the file...\n");
+ fprintf(f, "Writing to the file ");
+ fprintf(f, "some more\n");
+
+ fseek(f, 0, SEEK_SET);
+
+ for (i = 2; i < TEST_WORDS; i += (i >> 1)) {
+ n = fread(buf2, 4, i, f);
+ if (n != i) {
+ perror("fread");
+ return 1;
+ }
+
+ if (memcmp(buf1, buf2, i*4)) {
+ fprintf(stderr, "memory mismatch error, i = %d\n", i);
+ return 1;
+ }
+ }
+
+ fclose(f);
+ return 0;
+}