diff --git a/src/commands.c b/src/commands.c index 28a7cfcab1b75297ffe7b750166cfbff1f19b6c7..d9e355e0bc2289eaae5bb6c8d3e69f82cc446eb5 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1,12 +1,13 @@ #include <string.h> - +#include <stdlib.h> +#include <unistd.h> #include "commands.h" - +#include <stdio.h> int do_cd(int argc, char** argv) { if (!validate_cd_argv(argc, argv)) return -1; - // TODO: Fill it! + chdir(argv[1]); return 0; } @@ -15,18 +16,28 @@ int do_pwd(int argc, char** argv) { return -1; // TODO: Fill it! - + char name[512]; + getcwd(name,512); + printf("%s\n ",name); + return 0; } int validate_cd_argv(int argc, char** argv) { // TODO: Fill it! - return 1; + if(argc==2&& (strcmp(argv[0],"cd")==0)) { + return 1; + } + else{ + return 0; + } } - int validate_pwd_argv(int argc, char** argv) { // TODO: Fill it! - return 1; + if(argc==1 && (strcmp(argv[0], "pwd")==0)) return 1; + + else return 0; } + diff --git a/src/main.c b/src/main.c index fddc6fc498fd16b68f563b15fe9853ce2292bfdb..f86d026d28da5c03353e0dd092e5d56cb483a17e 100644 --- a/src/main.c +++ b/src/main.c @@ -56,12 +56,10 @@ int main() while (1) { fgets(buf, 8096, stdin); - apply_alias: mysh_parse_command(buf, &argc, &argv); - if (strcmp(argv[0], "") == 0) { - goto release_and_continue; + goto release_and_continue; } else if (strcmp(argv[0], "cd") == 0) { if (do_cd(argc, argv)) { fprintf(stderr, "cd: Invalid arguments\n"); @@ -74,16 +72,18 @@ apply_alias: if (do_alias(argc, argv)) { fprintf(stderr, "alias: Invalid arguments\n"); } - } else if (strcmp(argv[0], "exit") == 0) { + } + 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; - } - } +// aliased_command[i]->command; + + // TODO: fill here! + goto apply_alias; + } + } fprintf(stderr, "%s: command not found\n", argv[0]); } @@ -116,15 +116,35 @@ static void release_argv(int argc, char*** argv) { int do_alias(int argc, char** argv) { if (!validate_alias_argv(argc, argv)) return -1; - + else{ + int *tmp = *argc; + *argc=1; + strcpy(aliased_command[n_aliased_command]->alias,*(*argv+(*argc))); + for(int i=0; i<tmp;i++){ + strcat(aliased_command[n_aliased_command]->command,*(*argv+i)); + strcat(aliased_command[n_aliased_command]->command," "); + } +// printf("%s\n",aliased_command[n_aliased_commnad]->command); + n_aliased_command++; + + //char *tmp = NULL; + //tmp=*(*argv+(*argc)); + + //(*argc)++; + + // TODO: Fill it! return 0; + } } int validate_alias_argv(int argc, char** argv) { - // TODO: Fill it! - return 1; + + if(argc>=2 &&!strcmp(argv[0],"alias")) + return 1; + // TODO: Fill it! + else return 0; } diff --git a/src/utils.c b/src/utils.c index 619c771cd29d38dcf0e265e8688b55e1cfe3d6a0..8a2d66f0a206f31d27b1d7a3063f80293eefd6f5 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,7 +1,45 @@ +#include <string.h> +#include <stdlib.h> +#include <stdio.h> #include "utils.h" +#define MAX 250 void mysh_parse_command(const char* command, int *argc, char*** argv) { // TODO: Fill this! + + char *token=NULL; + char command1[MAX]; + char *tmp = NULL; + strcpy(command1,command); + if(command1[strlen(command1)-1] == '\n') + command1[strlen(command1)-1] = '\0'; + token = strtok(command1," =\n\"\0"); +// **argv = (char*)malloc(sizeof(char)*MAX); + *argv = (char**)malloc(sizeof(char)*MAX); + *argc = 0; + while(1) + { + //printf("while\n"); + if(token==NULL){ + //*(*argv+(*argc)) = (char*)malloc(sizeof(char)*MAX); + + break; + } + else { + //printf("else\n"); + *(*argv+(*argc)) = (char*)malloc(sizeof(char)*MAX); + //printf("malloc\n"); + strcpy(*(*argv+(*argc)),token); + //printf("intoken\n"); + token = strtok(NULL," =\n\0\""); + printf("%s\n",*(*argv+(*argc))); + (*argc)++; + //printf("%s\n",*(*argv+(*argc))); + } + } + + + }