From 263849b3e05d7ed79fffb0751683ecd740cc90af Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 17 Aug 2012 22:01:02 -0400 Subject: [PATCH] Fix command-line error handling. Add a few comments. --- src/aclq.c | 92 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 76 insertions(+), 16 deletions(-) diff --git a/src/aclq.c b/src/aclq.c index 65e1ca3..a2b4307 100644 --- a/src/aclq.c +++ b/src/aclq.c @@ -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 [ [ ...]]\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; } -- 2.44.2