diff options
| -rw-r--r-- | fileutil.c | 91 | ||||
| -rw-r--r-- | fileutil.h | 4 |
2 files changed, 41 insertions, 54 deletions
@@ -87,22 +87,43 @@ char* get_filename(char *full_path){ } +bool is_a_path(char* string) { + return (strlen(string) == 0) ? false : string[0] == '/'; +} + +void copy_into_dir(char *file_path, char *dir_path, bool move, bool overwrite){ + char* filename; + char* new_path; + size_t new_path_len; + + filename = get_filename(file_path); + new_path_len = strlen(dir_path) + strlen(filename) + 1; + new_path = (char *) malloc(new_path_len); + + strcpy(new_path, dir_path); + strcat(new_path, "/"); + strcat(new_path, filename); + copy_file(file_path, new_path, overwrite); + if (move) unlink(file_path); + to_stdout("Copy successful\n"); + + free(new_path); +} + arguments_t parse_arguments(int argc, char **argv){ arguments_t args = { - .src_path_index = -1, - .dir_path_index = -1, + .src_index = -1, + .dir_index = -1, .valid = false, .move_flag = false, .force_flag = false, .dir_flag = false }; - if (argc > 1) args.src_path_index = 1; - - for (int i = 2; i < argc; i++) { + for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "-d") == 0) { args.dir_flag = true; - args.dir_path_index = i+1; + args.dir_index = i+1; } else if (strcmp(argv[i], "-M") == 0) { args.move_flag = true; } else if (strcmp(argv[i], "-F") == 0) { @@ -110,11 +131,18 @@ arguments_t parse_arguments(int argc, char **argv){ } } + if (argc > 1 && is_a_path(argv[1])) args.src_index = 1; + bool correct_flags = (args.move_flag || args.force_flag) ? args.dir_flag : true; + bool correct_directory = false; + + if (args.dir_index < argc) { + correct_directory = (args.dir_flag) ? is_a_path(argv[args.dir_index]) : true; + } args.valid = correct_flags && - (args.dir_path_index < argc) && + correct_directory && (argc >= MIN_NUM_OF_ARGS) && (argc <= MAX_NUM_OF_ARGS); @@ -127,11 +155,11 @@ void execute_subprogram(arguments_t args, char *argv[]) { exit(1); } - char *source_path = (args.src_path_index == -1 ) ? DEFAULT_READ_PATH : argv[args.src_path_index]; + char *source_path = (args.src_index == -1 ) ? DEFAULT_READ_PATH : argv[args.src_index]; char *dir_path; if (args.dir_flag){ - dir_path = argv[args.dir_path_index]; + dir_path = argv[args.dir_index]; copy_into_dir(source_path, dir_path, args.move_flag, args.force_flag); } else { print_file(source_path); @@ -141,56 +169,15 @@ void execute_subprogram(arguments_t args, char *argv[]) { } -void copy_into_dir(char *file_path, char *dir_path, bool move, bool overwrite){ - char* filename; - char* new_path; - size_t new_path_len; - - // filename = strrchr(dir_path, '/'); - filename = get_filename(file_path); - // printf("%s\n", filename); - new_path_len = strlen(dir_path) + strlen(filename) + 1; - new_path = (char *) malloc(new_path_len); - - strcpy(new_path, dir_path); - strcat(new_path, "/"); - strcat(new_path, filename); - copy_file(file_path, new_path, overwrite); - if (move) unlink(file_path); - to_stdout("Copy successful\n"); - free(new_path); -} int main(int argc, char *argv[]) { - // switch (argc){ - // case 0: - // exit(1); - // case 1: - // print_file(DEFAULT_READ_PATH); - // break; - // case 2: - // print_file(argv[1]); - // break; - // case 3: - // to_stderr("Invalid number of arguments sepcified\n"); - // exit(1); - // break; - // default: - // if (strcmp(argv[2], "-d") == 0){ - // copy_into_dir(argv[1], argv[3]); - // } else { - // to_stderr("Invalid argument(s) sepcified\n"); - // exit(1); - // } - // } - arguments_t args = parse_arguments(argc, argv); - if (!args.valid) { - to_stderr("nah"); + if (!args.valid) + to_stderr("Invalid arguments provided."); return 1; } else { execute_subprogram(args, argv); @@ -13,8 +13,8 @@ typedef struct arguments_t { bool move_flag; bool force_flag; bool dir_flag; - int src_path_index; - int dir_path_index; + int src_index; + int dir_index; } arguments_t; void to_stdout(char *string); |
