diff --git a/include/commands.h b/include/commands.h index 178349db763dab98bd0e8e43d247e18f4ad9a6bb..43f055d8d79a8873a6ba0cc6869d49cfa4951e9b 100644 --- a/include/commands.h +++ b/include/commands.h @@ -1,6 +1,7 @@ #ifndef MYSH_COMMANDS_H_ #define MYSH_COMMANDS_H_ +char print_buff[1024]; /** do_cd(argc, argv) diff --git a/mysh b/mysh index 954c05f41dc9da77d666cd13ce665aa60ef354da..6e63160a92de0d6787455b300a761c03074585e3 100755 Binary files a/mysh and b/mysh differ diff --git a/src/commands.c b/src/commands.c index 4adfea4e961161a24e34ef2ee62b3d038db54cee..ca43e2c8282dff7d0ea13c28a251e76b855031d5 100644 --- a/src/commands.c +++ b/src/commands.c @@ -3,8 +3,6 @@ #include <stdio.h> #include "commands.h" -char print_buff[1024]; - int do_cd(int argc, char** argv) { if (!validate_cd_argv(argc, argv)) return -1; diff --git a/src/main.c b/src/main.c index c7bd6320658668089b23ee0a774e3740c5c9acd1..34bd4c44db6e375a34707f1e219b827ee916b460 100644 --- a/src/main.c +++ b/src/main.c @@ -51,8 +51,9 @@ static void release_argv(int argc, char*** argv); int main() { char buf[8096]; - int argc; + int argc, i, j; char** argv; + while (1) { fgets(buf, 8096, stdin); @@ -76,10 +77,11 @@ apply_alias: } else if (strcmp(argv[0], "exit") == 0) { goto release_and_exit; } else { - for (int i = 0; i < n_aliased_command; ++i) { + for (i = 0; i < n_aliased_command; ++i) { if (strcmp(argv[0], aliased_commands[i]->alias) == 0) { - // TODO: fill here! - + for(j = 0; aliased_commands[i]->command[j] != '\0'; j++) + buf[j] = aliased_commands[i]->command[j]; + buf[j] = '\0'; goto apply_alias; } } @@ -94,7 +96,7 @@ release_and_exit: break; } - for (int i = 0; i < n_aliased_command; ++i) { + for (i = 0; i < n_aliased_command; ++i) { if (aliased_commands[i]) { free(aliased_commands[i]); aliased_commands[i] = NULL; @@ -113,17 +115,55 @@ static void release_argv(int argc, char*** argv) { } int do_alias(int argc, char** argv) { - if (!validate_alias_argv(argc, argv)) - return -1; - - // TODO: Fill it! - - return 0; + int i, j, tmp_i, flag; + struct aliased_command *tmp_ac; + + if (!validate_alias_argv(argc, argv)) + return -1; + if(argc == 1){ + for (i = 0; i < n_aliased_command; ++i) { + if (aliased_commands[i]) + printf("alias %s='%s'\n", aliased_commands[i]->alias, aliased_commands[i]->command); + } + return 0; + } else { + tmp_i = 0; + flag = 0; + tmp_ac = malloc(sizeof(struct aliased_command)); + tmp_ac->alias[0] = '\0'; + tmp_ac->command[0] = '\0'; + for(i = 0; argv[1][i] != '\0'; i++){ + print_buff[tmp_i++] = argv[1][i]; + if(!flag && argv[1][i] == '=' && argv[1][i+1] == '"'){ + print_buff[tmp_i - 1] = '\0'; + for(j = 0; j<n_aliased_command; j++) + if(strcmp(print_buff, aliased_commands[j]->alias) == 0){ + free(tmp_ac); + return -1; + } + for(j = 0; j<tmp_i; j++) + tmp_ac->alias[j] = print_buff[j]; + tmp_i = 0; + flag = 1; + i++; + }else if(flag && argv[1][i] == '"'){ + print_buff[tmp_i - 1] = '\0'; + for(j = 0; j<tmp_i; j++) + tmp_ac->command[j] = print_buff[j]; + aliased_commands[n_aliased_command++] = tmp_ac; + return 0; + } + } + if(tmp_ac->alias[0] == '\0' || tmp_ac->command[0] == '\0'){ + free(tmp_ac); + return -1; + } + } + return 0; } int validate_alias_argv(int argc, char** argv) { - // TODO: Fill it! - return 1; + if(argc > 2) + return 0; + return 1; } - - diff --git a/src/utils.c b/src/utils.c index cbd10c8b5e7bec6b87e19988b312b10331b60af5..b787367940eb73f432fedbc7323fe5a0ddb3683a 100644 --- a/src/utils.c +++ b/src/utils.c @@ -6,17 +6,18 @@ void mysh_parse_command(const char* command, char point; char buf[300]; char *tmp_argv[100]; - int buf_i, command_i, argv_i, i; + int buf_i, command_i, argv_i, i, flag; buf_i = 0; command_i = 0; argv_i = 0; + flag = 0; point = command[command_i++]; while(point != '\n'){ buf[buf_i++] = point; - if(point == ' '){ + if(!flag && point == ' '){ buf[buf_i - 1] = '\0'; tmp_argv[argv_i] = malloc(buf_i * sizeof(char)); for(i=0; i<buf_i; i++) @@ -24,6 +25,9 @@ void mysh_parse_command(const char* command, buf_i = 0; argv_i++; } + if(point == '"') + flag = 1 - flag; + point = command[command_i++]; } @@ -41,3 +45,4 @@ void mysh_parse_command(const char* command, (*argv)[i] = tmp_argv[i]; *argc = argv_i; } +