]> git.seodisparate.com - SimpleArchiver/commitdiff
Improve file format v2 output for directories
authorStephen Seo <seo.disparate@gmail.com>
Mon, 23 Dec 2024 08:42:01 +0000 (17:42 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Mon, 23 Dec 2024 08:42:01 +0000 (17:42 +0900)
src/archiver.c

index 0517af1f04dd07c7b68a8993923594a8d56c1f66..7964f80f79a742618b789899252616275b3e41dc 100644 (file)
@@ -5723,7 +5723,7 @@ int simple_archiver_parse_archive_version_1(FILE *in_f, int_fast8_t do_extract,
           }
 #endif
         } else if (!skip_due_to_map && (file_info->other_flags & 1) == 0) {
-          fprintf(stderr, "    Permissions: ");
+          fprintf(stderr, "    Permissions:");
           permissions_from_bits_version_1(file_info->bit_flags, 1);
           fprintf(stderr,
                   "\n    UID: %" PRIu32 "\n    GID: %" PRIu32 "\n",
@@ -5826,7 +5826,27 @@ int simple_archiver_parse_archive_version_2(FILE *in_f, int_fast8_t do_extract,
     }
     simple_archiver_helper_32_bit_be(&gid);
 
-    fprintf(stderr, "Creating dir \"%s\"\n", buf);
+    if (do_extract) {
+      fprintf(stderr, "Creating dir \"%s\"\n", buf);
+    } else {
+      fprintf(stderr, "Dir entry \"%s\"\n", buf);
+      fprintf(stderr, "  Permissions: ");
+      fprintf(stderr, "%s", (perms_flags[0] & 1)    ? "r" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 2)    ? "w" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 4)    ? "x" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 8)    ? "r" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 0x10) ? "w" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 0x20) ? "x" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 0x40) ? "r" : "-");
+      fprintf(stderr, "%s", (perms_flags[0] & 0x80) ? "w" : "-");
+      fprintf(stderr, "%s", (perms_flags[1] & 1)    ? "x" : "-");
+      fprintf(stderr, "\n");
+
+      fprintf(stderr,
+              "  UID: %" PRIu32 ", GID: %" PRIu32 "\n",
+              uid,
+              gid);
+    }
 
     __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
     char *abs_path_dir = realpath(".", NULL);