summaryrefslogtreecommitdiff
path: root/fileutil.c
diff options
context:
space:
mode:
authorakiyamn2020-09-08 13:07:17 +1000
committerakiyamn2020-09-08 13:07:17 +1000
commitfe6110a87d782de40c5f256228ca1edcb848e4ab (patch)
tree400f9fcb71c74efc46211fe7babd04033862078e /fileutil.c
parentd848cda59ee2d6e38471cf2ea8afb97faaba3624 (diff)
downloadfit2100_ass1-fe6110a87d782de40c5f256228ca1edcb848e4ab.tar.gz
fit2100_ass1-fe6110a87d782de40c5f256228ca1edcb848e4ab.zip
Task 5 arguments properly handled
Diffstat (limited to 'fileutil.c')
-rw-r--r--fileutil.c91
1 files changed, 39 insertions, 52 deletions
diff --git a/fileutil.c b/fileutil.c
index 24a532b..86c4cfc 100644
--- a/fileutil.c
+++ b/fileutil.c
@@ -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);