#ifndef shell_builtins #define shell_builtins #include "lsh_main_func.c" #include "helper_functions.c" #include #include #include /* 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. */ char *builtin_str[] = { "cd", "help", "exit", "export" }; int (*builtin_func[]) (char **) = { &lsh_cd, &lsh_help, &lsh_exit, &export }; int lsh_num_builtins() { return sizeof(builtin_str) / sizeof(char *); } /* Builtin function implementations. */ #define LSH_CWD_BUF_SIZE 1024; int lsh_cd(char **args) { if (args[1] == NULL) { fprintf(stderr, "lsh: expected argument to \"cd\"\n"); } else { int err = chdir(args[1]); if (err != 0) { perror("lsh"); } int bufsize=LSH_CWD_BUF_SIZE; char *cwd=(char*)malloce(sizeof(char)*bufsize+1); while(getcwd(cwd,sizeof(char)*bufsize)==NULL){ bufsize += LSH_CWD_BUF_SIZE; cwd=(char*)realloce(cwd,sizeof(char)*bufsize+1); } setenv("PWD",cwd,1); free(cwd); } return 1; } int lsh_help(char **args) { int i; printf("FOX SHELL\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]); } printf("Use the man command for information on other programs.\n"); return 1; } int lsh_exit(char **args) { 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, CMD *cmd) { int i; 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); } } return lsh_launch(args, cmd); } #endif