From 4df0e8e18424a7720ceb0e1be42a4a55b34a5349 Mon Sep 17 00:00:00 2001 From: LEE JEONG EUN <dlwjddms0102@hanmail.net> Date: Mon, 9 Apr 2018 06:33:59 +0900 Subject: [PATCH] Update shell alias implement. --- src/commands.c | 31 +++++++++++++++++++++---------- src/main.c | 39 ++++++++++++++++++++++++++++++++++++--- src/utils.c | 14 ++++++++++++++ 3 files changed, 71 insertions(+), 13 deletions(-) diff --git a/src/commands.c b/src/commands.c index 28a7cfc..b787841 100644 --- a/src/commands.c +++ b/src/commands.c @@ -4,29 +4,40 @@ int do_cd(int argc, char** argv) { if (!validate_cd_argv(argc, argv)) - return -1; + return -1; // TODO: Fill it! - return 0; + else + return 0; } int do_pwd(int argc, char** argv) { - if (!validate_pwd_argv(argc, argv)) - return -1; - + if (!validate_pwd_argv(argc, argv)) + return -1 ; // TODO: Fill it! - - return 0; + else{ + char buf[255]; + getcwd(buf,255); + printf("%s\n",buf); + return 0; + } } int validate_cd_argv(int argc, char** argv) { - // TODO: Fill it! - return 1; + // TODO: Fill it! + if(chdir(argv[1])) + return 0; + else + return 1; } int validate_pwd_argv(int argc, char** argv) { // TODO: Fill it! - return 1; + char buf[255]; + if(getcwd(buf,255)==NULL) + return 0; + else + return 1; } diff --git a/src/main.c b/src/main.c index fddc6fc..940d5f3 100644 --- a/src/main.c +++ b/src/main.c @@ -80,6 +80,8 @@ apply_alias: for (int i = 0; i < n_aliased_command; ++i) { if (strcmp(argv[0], aliased_commands[i]->alias) == 0) { // TODO: fill here! + memset(buf,0,sizeof(buf)); + strcpy(buf,aliased_commands[i]->command); goto apply_alias; } @@ -118,13 +120,44 @@ int do_alias(int argc, char** argv) { return -1; // TODO: Fill it! - - return 0; + struct aliased_command * con = (struct aliased_command *)malloc(sizeof(struct aliased_command)); + + for(int i=2; i<argc; i++){ + strcat(argv[1]," "); + strcat(argv[1],argv[i]); + } + + char * ptr = strtok(argv[1],"="); + if(ptr != NULL){ + strcpy(con->alias,ptr); + ptr = strtok(NULL,"\""); + if(ptr != NULL){ + strcpy(con->command,ptr); + aliased_commands[n_aliased_command++] = con; + return 0; + } + } + return -1; } int validate_alias_argv(int argc, char** argv) { // TODO: Fill it! - return 1; + + if(argc<2){ + printf("Error occur!\n"); + return 0; + } + char ptr[10]; + strcpy(ptr,argv[1]); + char * ptr1 = strtok(ptr,"\" \n"); + if(ptr1 != NULL){ + ptr1 = strtok(NULL,"\" \n"); + if(strcmp(ptr1,"cd")== 0 || strcmp(ptr1,"pwd")== 0){ + return 1; + } + } + printf("Error occur!\n"); + return 0; } diff --git a/src/utils.c b/src/utils.c index 619c771..bbee050 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,7 +1,21 @@ #include "utils.h" +#include <string.h> void mysh_parse_command(const char* command, int *argc, char*** argv) { // TODO: Fill this! + int i=0; + argv[0] = (char **)malloc(sizeof(char*)*50); + for(int i=0; i <50; i++){ + argv[0][i] =(char *)malloc(sizeof(char)*50); + memset(argv[0][i],0x00,sizeof(char)*50); + } + + char * ptr = strtok(command, " \n"); + while(ptr != NULL){ + strcpy(argv[0][i++],ptr); + ptr = strtok(NULL," \n"); + } + *argc = i; } -- GitLab