]> gitweb.michael.orlitzky.com - apply-default-acl.git/commitdiff
Fix command-line error handling.
authorMichael Orlitzky <michael@orlitzky.com>
Sat, 18 Aug 2012 02:01:02 +0000 (22:01 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sat, 18 Aug 2012 02:01:02 +0000 (22:01 -0400)
Add a few comments.

src/aclq.c

index 65e1ca326d82cc83b741808f230e34a135b70208..a2b4307475752b061fd5304ffca8a18a6382bc05 100644 (file)
@@ -15,6 +15,9 @@
 
 
 mode_t get_mode(const char* path) {
+  /*
+   * Get the mode bits from path.
+   */
   if (path == NULL) {
     errno = ENOENT;
     return -1;
@@ -34,6 +37,9 @@ mode_t get_mode(const char* path) {
 
 
 bool is_regular_file(const char* path) {
+  /*
+   * Returns true if path is a regular file, false otherwise.
+   */
   if (path == NULL) {
     return false;
   }
@@ -49,6 +55,9 @@ bool is_regular_file(const char* path) {
 }
 
 bool is_directory(const char* path) {
+  /*
+   * Returns true if path is a directory, false otherwise.
+   */
   if (path == NULL) {
     return false;
   }
@@ -67,7 +76,9 @@ bool is_directory(const char* path) {
 
 int acl_set_entry(acl_t* aclp,
                  acl_entry_t entry) {
-  /* Update or create the given entry. */
+  /*
+   * Update or create the given entry.
+   */
 
   acl_tag_t entry_tag;
   int gt_result = acl_get_tag_type(entry, &entry_tag);
@@ -174,7 +185,9 @@ int acl_set_entry(acl_t* aclp,
 
 
 int acl_entry_count(acl_t* acl) {
-  /* Return the number of entries in ACL, or -1 on error. */
+  /*
+   * Return the number of entries in acl, or -1 on error.
+   */
   acl_entry_t entry;
   int entry_count = 0;
   int result = acl_get_entry(*acl, ACL_FIRST_ENTRY, &entry);
@@ -195,7 +208,8 @@ int acl_entry_count(acl_t* acl) {
 
 int acl_is_minimal(acl_t* acl) {
   /* An ACL is minimal if it has fewer than four entries. Return 0 for
-     false, 1 for true, and -1 on error. */
+   * false, 1 for true, and -1 on error.
+   */
 
   int ec = acl_entry_count(acl);
   if (ec == -1) {
@@ -214,7 +228,8 @@ int acl_is_minimal(acl_t* acl) {
 
 int any_can_execute(const char* path) {
   /* Returns 1 if any ACL entry has execute access, 0 if none do, and
-     -1 on error. */
+   * -1 on error.
+   */
   acl_t acl = acl_get_file(path, ACL_TYPE_ACCESS);
 
   if (acl == (acl_t)NULL) {
@@ -278,8 +293,9 @@ int any_can_execute(const char* path) {
 
 int inherit_default_acl(const char* path, const char* parent) {
   /* Inherit the default ACL from parent to path. This overwrites any
-     existing default ACL. Returns 1 for success, 0 for failure, and
-     -1 on error. */
+   * existing default ACL. Returns 1 for success, 0 for failure, and
+   * -1 on error.
+   */
 
   /* Our return value. */
   int result = 1;
@@ -375,8 +391,9 @@ int wipe_acls(const char* path) {
 
 int reapply_default_acl(const char* path) {
   /* Really reapply the default ACL by looping through it. Returns one
-     for success, zero for failure (i.e. no ACL), and -1 on unexpected
-     errors. */
+   * for success, zero for failure (i.e. no ACL), and -1 on unexpected
+   * errors.
+   */
   if (path == NULL) {
     return 0;
   }
@@ -517,16 +534,59 @@ int reapply_default_acl(const char* path) {
 }
 
 
+void usage(char* program_name) {
+  /*
+   * Print usage information.
+   */
+  printf("Reapply any applicable default ACLs to the given files or "
+        "directories.\n\n");
+  printf("Usage: %s <target1> [<target2> [ <target3>...]]\n", program_name);
+}
+
+
+bool asked_for_help(int argc, char* argv[]) {
+  /*
+   * Check argv for either form of the "help" flag, -h or --help.
+   */
+  int arg_index = 1;
+  for (arg_index = 1; arg_index < argc; arg_index++) {
+    if (!strcmp(argv[arg_index], "-h")) {
+      return true;
+    }
+    if (!strcmp(argv[arg_index], "--help")) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
 
 int main(int argc, char* argv[]) {
-   const char* target = argv[1];
+  /*
+   * Call reapply_default_acl on each command-line argument.
+   */
+  if (argc < 2) {
+    usage(argv[0]);
+    return EXIT_FAILURE;
+  }
+
+  if (asked_for_help(argc, argv)) {
+    usage(argv[0]);
+    return EXIT_SUCCESS;
+  }
+
+  int result = EXIT_SUCCESS;
 
-   bool result = reapply_default_acl(target);
+  int arg_index = 1;
+  for (arg_index = 1; arg_index < argc; arg_index++) {
+    const char* target = argv[arg_index];
+    bool reapp_result = reapply_default_acl(target);
 
-   if (result) {
-     return EXIT_SUCCESS;
-   }
-   else {
-     return EXIT_FAILURE;
-   }
+    if (!reapp_result) {
+      result = EXIT_FAILURE;
+    }
+  }
+
+  return result;
 }