}
}
+ SDArchiverParsedStatus parsed_status;
__attribute__((cleanup(simple_archiver_list_free)))
SDArchiverLinkedList *filenames =
- simple_archiver_parsed_to_filenames(&parsed);
- if (!filenames) {
- fprintf(stderr,
- "ERROR: Failed to resolve filenames from positional arguments!\n");
+ simple_archiver_parsed_to_filenames(&parsed, &parsed_status);
+ if (!filenames || parsed_status != SDAPS_SUCCESS) {
+ fprintf(stderr, "ERROR: %s!\n",
+ simple_archiver_parsed_status_to_str(parsed_status));
return 8;
}
return 0;
}
+char *simple_archiver_parsed_status_to_str(SDArchiverParsedStatus status) {
+ switch (status) {
+ case SDAPS_SUCCESS:
+ return "Success";
+ case SDAPS_NO_USER_CWD:
+ return "No user current working directory (-C <dir>)";
+ default:
+ return "Unknown error";
+ }
+}
+
void simple_archiver_print_usage(void) {
fprintf(stderr, "Usage flags:\n");
fprintf(stderr, "-c : create archive file\n");
}
SDArchiverLinkedList *simple_archiver_parsed_to_filenames(
- const SDArchiverParsed *parsed) {
+ const SDArchiverParsed *parsed, SDArchiverParsedStatus *status_out) {
SDArchiverLinkedList *files_list = simple_archiver_list_init();
__attribute__((cleanup(simple_archiver_hash_map_free)))
SDArchiverHashMap *hash_map = simple_archiver_hash_map_init();
original_cwd = realpath(".", NULL);
if (chdir(parsed->user_cwd)) {
simple_archiver_list_free(&files_list);
+ if (status_out) {
+ *status_out = SDAPS_NO_USER_CWD;
+ }
return NULL;
}
}
}
}
+ if (status_out) {
+ *status_out = SDAPS_SUCCESS;
+ }
return files_list;
}
char *link_dest;
} SDArchiverFileInfo;
+typedef enum SDArchiverParsedStatus {
+ SDAPS_SUCCESS,
+ SDAPS_NO_USER_CWD,
+} SDArchiverParsedStatus;
+
+/// Returned c-string does not need to be free'd.
+char *simple_archiver_parsed_status_to_str(SDArchiverParsedStatus status);
+
void simple_archiver_print_usage(void);
SDArchiverParsed simple_archiver_create_parsed(void);
/// Each entry in the linked list is an SDArchiverFileInfo object.
SDArchiverLinkedList *simple_archiver_parsed_to_filenames(
- const SDArchiverParsed *parsed);
+ const SDArchiverParsed *parsed, SDArchiverParsedStatus *status_out);
#endif