From bc0ac8e80d43e6cb6d2785dbbf952f793c27d56a Mon Sep 17 00:00:00 2001 From: dunalduck <dmlwls0403@naver.com> Date: Mon, 9 Apr 2018 18:13:03 +0900 Subject: [PATCH] Finish assignment --- src/commands.c | 25 ++++++++++++++++++------- src/main.c | 44 ++++++++++++++++++++++++++++++++------------ src/utils.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 19 deletions(-) diff --git a/src/commands.c b/src/commands.c index 28a7cfc..d9e355e 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 fddc6fc..f86d026 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 619c771..8a2d66f 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))); + } + } + + + } -- GitLab