test.c - geomyidae-tests - geomyidae tests
(HTM) git clone git://bitreich.org/geomyidae-tests/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae-tests/
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
(DIR) LICENSE
---
test.c (1642B)
---
1 #include <errno.h>
2 #include <limits.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 const char *counter_path = "test_counter.txt";
8
9 /* read counter */
10 long
11 get_test_counter(void)
12 {
13 FILE *fp;
14 char buf[32];
15 size_t n;
16 long counter;
17
18 fp = fopen(counter_path, "rb+");
19 if (!fp)
20 return 0;
21
22 n = fread(buf, 1, sizeof(buf), fp);
23 if (n < 0 || ferror(fp))
24 return 0;
25 buf[n] = '\0';
26 counter = strtol(buf, NULL, 10);
27
28 return counter;
29 }
30
31 /* write new counter */
32 int
33 write_test_counter(long counter)
34 {
35 FILE *fp;
36 char buf[32];
37 int ret;
38
39 fp = fopen(counter_path, "wb+");
40 if (!fp) {
41 fprintf(stderr, "error opening path for writing counter: %s",
42 strerror(errno));
43 return -1;
44 }
45
46 snprintf(buf, sizeof(buf), "%ld", counter);
47 fwrite(buf, 1, strlen(buf), fp);
48 ret = (fflush(fp) || ferror(fp)) ? -1 : 0;
49 fclose(fp);
50
51 return ret;
52 }
53
54 int
55 main(void)
56 {
57 FILE *fp;
58 char path[PATH_MAX];
59 const char *envs[] = {
60 "PATH_INFO",
61 "PATH_TRANSLATED",
62 "QUERY_STRING",
63 "SCRIPT_NAME",
64 /* TLS */
65 "GOPHERS",
66 "HTTPS",
67 "SERVER_PROTOCOL",
68 /* gopher-specific: */
69 "REQUEST",
70 "SEARCHREQUEST",
71 "SELECTOR",
72 "X_GOPHER_SEARCH",
73 "TRAVERSAL"
74 };
75 char *p;
76 int i;
77 long counter;
78
79 counter = get_test_counter();
80
81 snprintf(path, sizeof(path), "results/%ld.txt", counter);
82 fp = fopen(path, "wb+");
83 if (!fp) {
84 fprintf(stderr, "error writing result to path: %s: %s\n",
85 path, strerror(errno));
86 return 1;
87 }
88
89 for (i = 0; i < sizeof(envs) / sizeof(envs[0]); i++) {
90 p = getenv(envs[i]);
91 if (!p)
92 p = "(null)";
93 fprintf(fp, "%s = %s\n", envs[i], p);
94 }
95 fclose(fp);
96
97 write_test_counter(counter + 1);
98
99 return 0;
100 }