meowsum.git

commit 0a44b409c94a9425259fc54bf750bfde7bf5636e

Author: Adam <git@apiote.tk>

reformat

 meowsum.c | 221 ++++++++++++++++++++++++++++++--------------------------


diff --git a/meowsum.c b/meowsum.c
index adece33854f926bb99c949d586b5833961675d98..7be65dfe3a1e68ae6810d0b5df5809109b24d28a 100644
--- a/meowsum.c
+++ b/meowsum.c
@@ -181,141 +181,159 @@
   return true;
 }
 
+bool read_sum_line(char **line, size_t *line_size, FILE *file, char *filename) {
+  ssize_t read_bytes;
+
+  read_bytes = getline(line, line_size, file);
+  if (read_bytes == -1) {
+    if (feof(file)) {
+      *line = NULL;
+      return true;
+    } else {
+      perror("error");
+      fprintf(stderr, "while reading line in %s\n", filename);
+      *line = NULL;
+      return false;
+    }
+  }
+  if (*line[read_bytes - 1] == '\n') {
+    *line[read_bytes - 1] = 0;
+  }
+  return true;
+}
+
+bool parse_sum_line(char *line, unsigned int line_size,
+                    char **expected_hex_hash, unsigned long *expected_size,
+                    char **path, char *filename, unsigned int *hash_size) {
+  char *expected_size_string;
+  char *next;
+
+  *expected_hex_hash = malloc(line_size * sizeof(char));
+  if (expected_hex_hash == NULL) {
+    perror("error");
+    fprintf(stderr, "error mallocing expected_hex_hash for %s\n", filename);
+    return false;
+  }
+  expected_size_string = malloc(line_size * sizeof(char));
+  if (expected_size_string == NULL) {
+    perror("error");
+    fprintf(stderr, "error mallocing expected_size_string for %s\n", filename);
+    free(*expected_hex_hash);
+    return false;
+  }
+  *path = malloc(line_size * sizeof(char));
+  if (path == NULL) {
+    perror("error");
+    fprintf(stderr, "error mallocing path for %s\n", filename);
+    free(*expected_hex_hash);
+    free(expected_size_string);
+    return false;
+  }
+  int n =
+      // NOLINTNEXTLINE
+      sscanf(line, "%s %s %s", *expected_hex_hash, expected_size_string, *path);
+  if (n != 3) {
+    fprintf(stderr, "ERR line malformed\n");
+    free(*expected_hex_hash);
+    free(expected_size_string);
+    free(*path);
+    return false;
+  }
+  *hash_size = strlen(*expected_hex_hash) * 8 / 2;
+  if (!(*hash_size == 32 || *hash_size == 64 || *hash_size == 128)) {
+    fprintf(stderr, "ERR hash size is wrong\n");
+    free(*expected_hex_hash);
+    free(expected_size_string);
+    free(*path);
+    return false;
+  }
+  *expected_size = strtoul(expected_size_string, &next, 10);
+  if (errno == ERANGE) {
+    fprintf(stderr, "ERR expected size out of range\n");
+    free(*expected_hex_hash);
+    free(expected_size_string);
+    free(*path);
+    return false;
+  } else if (next == expected_size_string) {
+    fprintf(stderr, "ERR expected size is an invalid number\n");
+    free(*expected_hex_hash);
+    free(expected_size_string);
+    free(*path);
+    return false;
+  } else if (*next != '\n' && *next != '\0') {
+    fprintf(stderr, "ERR rubbish in expected size\n");
+    free(*expected_hex_hash);
+    free(expected_size_string);
+    free(*path);
+    return false;
+  }
+  free(expected_size_string);
+  return true;
+}
+
 bool check_files(char *argv[], int start, int argc, bool quiet,
                  bool strict_errors) {
   char *line = NULL;
   size_t line_size = 0;
   FILE *file = NULL;
+  char *expected_hex_hash = NULL, *path = NULL;
   unsigned long expected_size = 0, size = 0;
-  char *expected_hex_hash = NULL, *expected_size_string = NULL, *path = NULL;
-  ssize_t read_bytes = 0;
+  unsigned int hash_size = 0;
   meow_u128 *hash = NULL;
   char *hex_hash = NULL;
-  int hash_size = 0;
   bool result = true;
-  char *next = NULL;
+  bool r;
 
   for (int i = start; i < argc; ++i) {
     file = fopen(argv[i], "r");
 
     while (true) {
+      path = NULL;
       line = NULL;
-      path = NULL;
 
-      read_bytes = getline(&line, &line_size, file);
-      if (read_bytes == -1) {
-        if (feof(file)) {
+      r = read_sum_line(&line, &line_size, file, argv[i]);
+      if (line == NULL) {
+        if (r) {
           break;
         } else {
-          perror("error");
-          fprintf(stderr, "while reading line in %s\n", argv[i]);
-          return false;
+          continue;
         }
       }
-      if (line[read_bytes - 1] == '\n') {
-        line[read_bytes - 1] = 0;
-      }
-      expected_hex_hash = malloc(line_size * sizeof(char));
-      if (expected_hex_hash == NULL) {
-        perror("error");
-        fprintf(stderr, "error mallocing expected_hex_hash for %s\n", argv[i]);
-        return false;
-      }
-      expected_size_string = malloc(line_size * sizeof(char));
-      if (expected_size_string == NULL) {
-        perror("error");
-        fprintf(stderr, "error mallocing expected_size_string for %s\n",
-                argv[i]);
-        free(expected_hex_hash);
-        return false;
-      }
-      path = malloc(line_size * sizeof(char));
-      if (path == NULL) {
-        perror("error");
-        fprintf(stderr, "error mallocing path for %s\n", argv[i]);
-        free(expected_hex_hash);
-        free(expected_size_string);
-        return false;
-      }
-      // NOLINTNEXTLINE
-      int n = sscanf(line, "%s %s %s", expected_hex_hash, expected_size_string,
-                     path);
-      if (n != 3) {
-        fprintf(stderr, "line '%s' in %s malformed\n", line, argv[i]);
-        free(expected_hex_hash);
-        free(expected_size_string);
-        free(path);
-        free(line);
-        continue;
-      }
-      hash_size = strlen(expected_hex_hash) * 8 / 2;
-      if (!(hash_size == 32 || hash_size == 64 || hash_size == 128)) {
-        fprintf(stderr, "hash size is wrong in line '%s' in %s\n", line,
-                argv[i]);
-        free(expected_hex_hash);
-        free(expected_size_string);
-        free(path);
-        free(line);
-        continue;
-      }
-      expected_size = strtoul(expected_size_string, &next, 10);
-      if (errno == ERANGE) {
-        fprintf(stderr, "expected size out of range in line '%s' in %s\n", line,
-                argv[i]);
-        free(expected_hex_hash);
-        free(expected_size_string);
-        free(path);
-        free(line);
-        continue;
-      } else if (next == expected_size_string) {
-        fprintf(stderr,
-                "expected size is an invalid number in line '%s' in %s\n", line,
-                argv[i]);
-        free(expected_hex_hash);
-        free(expected_size_string);
-        free(path);
-        free(line);
-        continue;
-      } else if (*next != '\n' && *next != '\0') {
-        fprintf(stderr, "rubbish in expected size in line '%s' in %s\n", line,
-                argv[i]);
-        free(expected_hex_hash);
-        free(expected_size_string);
-        free(path);
-        free(line);
+      r = parse_sum_line(line, line_size, &expected_hex_hash, &expected_size,
+                         &path, argv[i], &hash_size);
+      if (r == false) {
         continue;
       }
 
       if (strcmp("-", path) == 0) {
         if (!quiet) {
-          printf("[WARN] stdin on the list in %s\n", argv[i]);
+          printf("WARN stdin; skipping\n");
         }
       } else {
         if (access(path, F_OK) == -1) {
-          printf("ERM %s\n", path);
+          if (!quiet) {
+            printf("ERM %s\n", path);
+          }
           if (strict_errors) {
             result &= false;
           }
           free(expected_hex_hash);
-          free(expected_size_string);
           free(path);
           free(line);
           continue;
         }
         hash = calculate_checksum(path, &size);
         if (hash == NULL) {
-          fprintf(stderr, "error while calculating %s\n", path);
+          fprintf(stderr, "ERR calculating %s\n", path);
           free(expected_hex_hash);
-          free(expected_size_string);
           free(path);
           free(line);
           continue;
         }
         hex_hash = format_sum(*hash, hash_size);
         if (hex_hash == NULL) {
-          fprintf(stderr, "error while formating hex hash for %s\n", path);
+          fprintf(stderr, "ERR formating hex hash %s\n", path);
           free(expected_hex_hash);
-          free(expected_size_string);
           free(hash);
           free(path);
           free(line);
@@ -341,7 +359,6 @@         free(hex_hash);
         free(hash);
       }
       free(expected_hex_hash);
-      free(expected_size_string);
       free(path);
       free(line);
     }
@@ -350,9 +367,11 @@     fclose(file);
   }
   return result;
 }
+
 int main(int argc, char *argv[]) {
   int hash_size = HASH_SIZE, mode = MODE_SUM, first_file_index = -1;
-  bool quiet = false, strict_error = false;
+  bool quiet = false, strict_error = false, help = false;
+  bool result;
 
   if (argc == 1) {
     print_usage();
@@ -372,18 +391,14 @@     print_usage();
     return 1;
   }
 
-  if (mode == MODE_SUM) {
-    bool sum_result = sum_files(argv, first_file_index, argc, hash_size);
-    if (!sum_result) {
-      return 1;
-    }
-  } else if (mode == MODE_CHECK) {
-    bool check_result =
-        check_files(argv, first_file_index, argc, quiet, strict_error);
-    if (!check_result) {
-      return 1;
-    }
-  } else {
+  switch (mode) {
+  case MODE_SUM:
+    result = sum_files(argv, first_file_index, argc, hash_size);
+    return result ? 0 : 1;
+  case MODE_CHECK:
+    result = check_files(argv, first_file_index, argc, quiet, strict_error);
+    return result ? 0 : 1;
+  default:
     print_usage();
     return 1;
   }