diff options
| author | akiyamn | 2020-09-08 12:25:16 +1000 |
|---|---|---|
| committer | akiyamn | 2020-09-08 12:25:16 +1000 |
| commit | d848cda59ee2d6e38471cf2ea8afb97faaba3624 (patch) | |
| tree | e082e83ad3c0697cf1a7020b158c706eb94d0c68 /fileutil.c | |
| parent | f45a84a45f0ef074366f3bd88bed9992fe2eab73 (diff) | |
| download | fit2100_ass1-d848cda59ee2d6e38471cf2ea8afb97faaba3624.tar.gz fit2100_ass1-d848cda59ee2d6e38471cf2ea8afb97faaba3624.zip | |
Main functionality of Task 5 complete
Diffstat (limited to 'fileutil.c')
| -rw-r--r-- | fileutil.c | 37 |
1 files changed, 29 insertions, 8 deletions
@@ -68,7 +68,7 @@ void print_file(char *read_path) { void copy_file(char *read_path, char *write_path, bool overwrite) { int read_fd, write_fd; - int write_flags = O_WRONLY | O_CREAT; + int write_flags = O_WRONLY | O_CREAT | O_TRUNC; if (!overwrite) write_flags |= O_EXCL; read_fd = open_file(read_path, O_RDONLY); @@ -89,7 +89,7 @@ char* get_filename(char *full_path){ arguments_t parse_arguments(int argc, char **argv){ arguments_t args = { - .src_path_index = 1, + .src_path_index = -1, .dir_path_index = -1, .valid = false, .move_flag = false, @@ -97,6 +97,8 @@ arguments_t parse_arguments(int argc, char **argv){ .dir_flag = false }; + if (argc > 1) args.src_path_index = 1; + for (int i = 2; i < argc; i++) { if (strcmp(argv[i], "-d") == 0) { args.dir_flag = true; @@ -119,8 +121,27 @@ arguments_t parse_arguments(int argc, char **argv){ return args; } +void execute_subprogram(arguments_t args, char *argv[]) { + if (!args.valid) { + to_stderr("Invalid arguments given.\n"); + exit(1); + } + + char *source_path = (args.src_path_index == -1 ) ? DEFAULT_READ_PATH : argv[args.src_path_index]; + char *dir_path; + + if (args.dir_flag){ + dir_path = argv[args.dir_path_index]; + copy_into_dir(source_path, dir_path, args.move_flag, args.force_flag); + } else { + print_file(source_path); + } + + + +} -void copy_into_dir(char *file_path, char *dir_path){ +void copy_into_dir(char *file_path, char *dir_path, bool move, bool overwrite){ char* filename; char* new_path; size_t new_path_len; @@ -134,7 +155,8 @@ void copy_into_dir(char *file_path, char *dir_path){ strcpy(new_path, dir_path); strcat(new_path, "/"); strcat(new_path, filename); - copy_file(file_path, new_path, 0); + copy_file(file_path, new_path, overwrite); + if (move) unlink(file_path); to_stdout("Copy successful\n"); free(new_path); @@ -169,11 +191,10 @@ int main(int argc, char *argv[]) { arguments_t args = parse_arguments(argc, argv); if (!args.valid) { to_stderr("nah"); - return -1; + return 1; } else { - to_stdout("yeah"); - return 0; + execute_subprogram(args, argv); } - // return 0; + return 0; } |
