on master help sign in
Add strict and lazy string support to C fileread
f8aa530Bryan O'Sullivan
tests/benchmarks/fileread.c+39−1
@@ -3,6 +3,22 @@
3#include <stdlib.h>
3#include <stdlib.h>
4#include <string.h>
4#include <string.h>
5
5
6+void lazystring(const char *name)
7+{
8+ FILE *ufp = fopen(name, "r");
9+ const size_t bufsize = sizeof(char) * 32 * 1024;
10+ char *str = malloc(bufsize);
11+ long len = 0;
12+ int32_t n;
13+
14+ do {
15+ n = fread(str, sizeof(char), bufsize, ufp);
16+ len += n;
17+ } while (n > 0);
18+
19+ printf("%ld\n", len);
20+}
21+
6void lazytext(const char *name)
22void lazytext(const char *name)
7{
23{
8 UFILE *ufp = u_fopen(name, "r", NULL, "UTF-8");
24 UFILE *ufp = u_fopen(name, "r", NULL, "UTF-8");
@@ -38,6 +54,24 @@ void text(const char *name)
38 printf("%d\n", n);
54 printf("%d\n", n);
39}
55}
40
56
57+void string(const char *name)
58+{
59+ FILE *fp = fopen(name, "r");
60+ char *str;
61+ long fsize;
62+ int32_t n;
63+
64+ fseek(fp, 0, SEEK_END);
65+ fsize = ftell(fp);
66+ fseek(fp, 0, SEEK_SET);
67+
68+ str = malloc(sizeof(*str) * fsize);
69+
70+ n = fread(str, sizeof(char), fsize, fp);
71+
72+ printf("%d\n", n);
73+}
74+
41int main(int argc, char **argv)
75int main(int argc, char **argv)
42{
76{
43 if (argc != 3) {
77 if (argc != 3) {
@@ -45,8 +79,12 @@ int main(int argc, char **argv)
45 exit(1);
79 exit(1);
46 }
80 }
47
81
48− if (strcmp(argv[1], "lazytext") == 0)
82+ if (strcmp(argv[1], "lazystring") == 0)
83+ lazystring(argv[2]);
84+ else if (strcmp(argv[1], "lazytext") == 0)
49 lazytext(argv[2]);
85 lazytext(argv[2]);
86+ else if (strcmp(argv[1], "string") == 0)
87+ string(argv[2]);
50 else if (strcmp(argv[1], "text") == 0)
88 else if (strcmp(argv[1], "text") == 0)
51 text(argv[2]);
89 text(argv[2]);
52 else {
90 else {