diff --git a/include/commands.h b/include/commands.h index b8aadb0f7d624c21a721e5f533d92605197ccd27..178349db763dab98bd0e8e43d247e18f4ad9a6bb 100644 --- a/include/commands.h +++ b/include/commands.h @@ -27,19 +27,6 @@ int do_cd(int argc, char** argv); */ int do_pwd(int argc, char** argv); -/** - do_alias(argc, argv) - - params: - argc: # of arguments. argc must be 1. - argv: a list of arguments. - - returns: - If success, return 0. - Else if arguments are not valid, return -1. -*/ -int do_alias(int argc, char** argv); - /** validate_cd_argv(argc, argv) @@ -57,13 +44,5 @@ int validate_cd_argv(int argc, char** argv); */ int validate_pwd_argv(int argc, char** argv); -/** - validate_alias_argv(argc, argv) - - returns: - If success, return 1. (true) - Else return 0. (false) - */ -int validate_alias_argv(int argc, char** argv); #endif // MYSH_COMMANDS_H_ diff --git a/src/commands.c b/src/commands.c index dfe494e6a6aec04641982f4f687f98f361ac3b68..28a7cfcab1b75297ffe7b750166cfbff1f19b6c7 100644 --- a/src/commands.c +++ b/src/commands.c @@ -19,14 +19,6 @@ int do_pwd(int argc, char** argv) { return 0; } -int do_alias(int argc, char** argv) { - if (!validate_alias_argv(argc, argv)) - return -1; - - // TODO: Fill it! - - return 0; -} int validate_cd_argv(int argc, char** argv) { // TODO: Fill it! @@ -38,7 +30,3 @@ int validate_pwd_argv(int argc, char** argv) { return 1; } -int validate_alias_argv(int argc, char** argv) { - // TODO: Fill it! - return 1; -} diff --git a/src/main.c b/src/main.c index efb87c30eda6b91c0e8743848cbae1fb509b454f..fddc6fc498fd16b68f563b15fe9853ce2292bfdb 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,47 @@ #include "commands.h" #include "utils.h" +/** + * Aliased command element + * + * Example: + * + * $ alias cd_to_etc="cd /etc/" + * + * alias: alias of command. (e.g. "cd_to_etc") + * command: aliased command. (e.g. "cd /etc/") + */ +struct aliased_command +{ + char alias[512]; + char command[8096]; +}; + +static struct aliased_command* aliased_commands[128] = { NULL, }; +static int n_aliased_command = 0; + +/** + do_alias(argc, argv) + + params: + argc: # of arguments. argc must be 1. + argv: a list of arguments. + + returns: + If success, return 0. + Else if arguments are not valid, return -1. +*/ +int do_alias(int argc, char** argv); + +/** + validate_alias_argv(argc, argv) + + returns: + If success, return 1. (true) + Else return 0. (false) + */ +int validate_alias_argv(int argc, char** argv); + static void release_argv(int argc, char*** argv); int main() @@ -16,6 +57,7 @@ int main() while (1) { fgets(buf, 8096, stdin); +apply_alias: mysh_parse_command(buf, &argc, &argv); if (strcmp(argv[0], "") == 0) { @@ -28,9 +70,21 @@ int main() if (do_pwd(argc, argv)) { fprintf(stderr, "pwd: Invalid arguments\n"); } + } else if (strcmp(argv[0], "alias") == 0) { + if (do_alias(argc, argv)) { + fprintf(stderr, "alias: Invalid arguments\n"); + } } else if (strcmp(argv[0], "exit") == 0) { goto release_and_exit; } else { + for (int i = 0; i < n_aliased_command; ++i) { + if (strcmp(argv[0], aliased_commands[i]->alias) == 0) { + // TODO: fill here! + + goto apply_alias; + } + } + fprintf(stderr, "%s: command not found\n", argv[0]); } release_and_continue: @@ -41,6 +95,13 @@ release_and_exit: break; } + for (int i = 0; i < n_aliased_command; ++i) { + if (aliased_commands[i]) { + free(aliased_commands[i]); + aliased_commands[i] = NULL; + } + } + return 0; } @@ -51,3 +112,19 @@ static void release_argv(int argc, char*** argv) { free(*argv); *argv = NULL; } + +int do_alias(int argc, char** argv) { + if (!validate_alias_argv(argc, argv)) + return -1; + + // TODO: Fill it! + + return 0; +} + +int validate_alias_argv(int argc, char** argv) { + // TODO: Fill it! + return 1; +} + +