URI: 
       test.c - geomyidae-tests - geomyidae tests
  HTML 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 }