diff --git a/main.c b/main.c index 6023e7af5fd0c74952a29251944362a61c449ec5..ab9e9bc520f5322f2c54aad4a5abe2c09d2800b9 100644 --- a/main.c +++ b/main.c @@ -1,15 +1,39 @@ #include "parser/parser.h" #include "ultra-cp/ultra-cp.h" -#include <ctype.h> #include <linux/limits.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <unistd.h> int main(int argc, char **argv) { - printf("aflag = %d\n", get_opt(argc, argv, "af")); + // Arguments parsing + int source_count = 0; + uint8_t opt = get_opt(argc, argv, "af", &source_count); - char source_path[PATH_MAX]; + // Destination parsing + char *destination_path = argv[argc - 1]; + + // Source parsing + char **source_paths = malloc(source_count * sizeof(char *)); + for (int i = 0; i < source_count; i++) { + source_paths[i] = malloc(PATH_MAX * sizeof(char)); + strcpy(source_paths[i], argv[optind - source_count + i]); + + // Trim ending slash if present + if (source_paths[i][strlen(source_paths[i]) - 1] == '/') + source_paths[i][strlen(source_paths[i]) - 1] = '\0'; + } + + // TODO: Copy files form sources to destination + + // Free sources + for (int i = 0; i < source_count; i++) + free(source_paths[i]); + free(source_paths); + + list_dir("/home/toguy/Documents/source"); return EXIT_SUCCESS; } diff --git a/parser/parser.c b/parser/parser.c index 25b279d1257eac3772e4ac10cc2e391f2cc3e9e7..9d0341d169f7cf38d0d9823835c0868e5a99d8a0 100644 --- a/parser/parser.c +++ b/parser/parser.c @@ -1,8 +1,9 @@ #include "parser.h" -uint8_t get_opt(int argc, char **argv, char *args) { +uint8_t get_opt(int argc, char **argv, char *args, int *source_count) { uint8_t opt = 0b00; + // Parse optional arguments int c; while ((c = getopt(argc, argv, args)) != -1) { switch (c) { @@ -19,5 +20,9 @@ uint8_t get_opt(int argc, char **argv, char *args) { } } + // Arguments which was not parsed by getopt + for (; optind < argc - 1; optind++) + (*source_count)++; + return opt; } diff --git a/parser/parser.h b/parser/parser.h index 01ca25abc408499c766c7ec2d291084ad3a3dc8f..41f4d1d41da8c49063918fedf2a5fce1a1724e1c 100644 --- a/parser/parser.h +++ b/parser/parser.h @@ -10,9 +10,10 @@ * @param argc Arg count * @param argv Arg values * @param args Arg expected + * @param source_count Number of source files * * @returns Options */ -uint8_t get_opt(int argc, char **argv, char *args); +uint8_t get_opt(int argc, char **argv, char *args, int *source_count); #endif // !PARSER_H_