diff options
Diffstat (limited to 'src/lsh_builtins.c')
| -rw-r--r-- | src/lsh_builtins.c | 106 |
1 files changed, 65 insertions, 41 deletions
diff --git a/src/lsh_builtins.c b/src/lsh_builtins.c index 34aced5..33b1b88 100644 --- a/src/lsh_builtins.c +++ b/src/lsh_builtins.c @@ -7,85 +7,109 @@ #include <unistd.h> /* - Function Declarations for builtin shell commands: - */ + Function Declarations for builtin shell commands: + */ int lsh_cd(char **args); int lsh_help(char **args); int lsh_exit(char **args); +int export(char **args); /* - List of builtin commands, followed by their corresponding functions. - */ + List of builtin commands, followed by their corresponding functions. + */ char *builtin_str[] = { - "cd", - "help", - "exit" + "cd", + "help", + "exit", + "export" }; int (*builtin_func[]) (char **) = { - &lsh_cd, - &lsh_help, - &lsh_exit + &lsh_cd, + &lsh_help, + &lsh_exit, + &export }; int lsh_num_builtins() { - return sizeof(builtin_str) / sizeof(char *); + return sizeof(builtin_str) / sizeof(char *); } /* - Builtin function implementations. -*/ + Builtin function implementations. + */ int lsh_cd(char **args) { - if (args[1] == NULL) { - fprintf(stderr, "lsh: expected argument to \"cd\"\n"); - } else { - if (chdir(args[1]) != 0) { - perror("lsh"); + if (args[1] == NULL) { + fprintf(stderr, "lsh: expected argument to \"cd\"\n"); + } else { + if (chdir(args[1]) != 0) { + perror("lsh"); + } } - } - return 1; + return 1; } int lsh_help(char **args) { - int i; - printf("Stephen Brennan's LSH\n"); - printf("Type program names and arguments, and hit enter.\n"); - printf("The following are built in:\n"); + int i; + printf("Stephen Brennan's LSH\n"); + printf("Type program names and arguments, and hit enter.\n"); + printf("The following are built in:\n"); - for (i = 0; i < lsh_num_builtins(); i++) { - printf(" %s\n", builtin_str[i]); - } + for (i = 0; i < lsh_num_builtins(); i++) { + printf(" %s\n", builtin_str[i]); + } - printf("Use the man command for information on other programs.\n"); - return 1; + printf("Use the man command for information on other programs.\n"); + return 1; } int lsh_exit(char **args) { - return 0; + return 0; +} + +int export(char **args){ + char *token; + int position = 0; + char *key = NULL; + char *value = NULL; + + token = strtok(args[1], "=\r\n"); + while (token != NULL) { + if(position == 0){ + key=token; + } else if(position == 1){ + value=token; + } + + position++; + token = strtok(NULL, "=\r\n"); + } + setenv(key,value,1); + + return 1; } int lsh_execute(char **args) { - int i; + int i; - if (args[0] == NULL) { - // An empty command was entered. - return 1; - } + if (args[0] == NULL) { + // An empty command was entered. + return 1; + } - for (i = 0; i < lsh_num_builtins(); i++) { - if (strcmp(args[0], builtin_str[i]) == 0) { - return (*builtin_func[i])(args); + for (i = 0; i < lsh_num_builtins(); i++) { + if (strcmp(args[0], builtin_str[i]) == 0) { + return (*builtin_func[i])(args); + } } - } - return lsh_launch(args); + return lsh_launch(args); } - #endif |
