From 72c42aa8252620d4c694ca9715a16a1c1e38f80b Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Thu, 27 Oct 2022 19:57:26 -0500 Subject: [PATCH] Added comments and tips for code --- include/Integrated.h | 1 + src/Integrated.c | 244 +++++++++++++++++++++++-------------------- 2 files changed, 132 insertions(+), 113 deletions(-) diff --git a/include/Integrated.h b/include/Integrated.h index fe2f4c3..9a0f05a 100755 --- a/include/Integrated.h +++ b/include/Integrated.h @@ -4,6 +4,7 @@ #include "Common.h" const char* GetHomeDir(void); +void ioRedirection(char *inputString, CommandStruct *command); void IntegratedCheck(CommandStruct* command); void GetInput(char* inputString); void ParseInput(char* inputString, CommandStruct* command); diff --git a/src/Integrated.c b/src/Integrated.c index 339c314..fedc7be 100755 --- a/src/Integrated.c +++ b/src/Integrated.c @@ -11,143 +11,161 @@ #include "Integrated.h" // Gets home directory location of user -const char* GetHomeDir(void) +const char *GetHomeDir(void) { - char* homeDir = (getpwuid(getuid()))->pw_dir; - strcat(homeDir, "/.pishrc"); - return homeDir; + char *homeDir = (getpwuid(getuid()))->pw_dir; + strcat(homeDir, "/.pishrc"); + return homeDir; } - // Checks for commands that are built into Pish -void IntegratedCheck(CommandStruct* command) +void IntegratedCheck(CommandStruct *command) { - if (strcmp(command->argv[0], "exit") == 0) - exit(0); - // If there is an argument, change to argument location - // Else, change to home directory - if (command->argv[0][0] == 'c' && command->argv[0][1] == 'd') - ; - return; + if (strcmp(command->argv[0], "exit") == 0) + exit(0); + // If there is an argument, change to argument location + // Else, change to home directory + if (command->argv[0][0] == 'c' && command->argv[0][1] == 'd') + ; + return; } - // Prints a prompt and then reads a command from the terminal -void GetInput(char* inputString) +void GetInput(char *inputString) { - char c; - char* prompt = "pish%>"; - printf("%s ", prompt); - // assert(scanf("%[^\n]s", inputString) == 1); - scanf("%1000[^\n]s", inputString); - while((c = getchar()) != '\n' && c != EOF) - /* discard */ ; - return; + char c; + char *prompt = "pish%>"; + printf("%s ", prompt); + // assert(scanf("%[^\n]s", inputString) == 1); + scanf("%1000[^\n]s", inputString); + while ((c = getchar()) != '\n' && c != EOF) + /* discard */; + return; } // Splits a string separated by spaces into an array of strings -void ParseInput(char* inputString, CommandStruct* command) +void ParseInput(char *inputString, CommandStruct *command) { - //Parse command - int* argc = &(command->argc); - char* token = strtok(inputString, " "); - command->argv[*argc] = token; - (*argc)++; + // Parse command + int *argc = &(command->argc); + char *token = strtok(inputString, " "); + command->argv[*argc] = token; + (*argc)++; while (token != NULL) - { - //This only holds 1 command at a time then it overrides - //Will need modified - token = strtok(NULL, " "); - command->argv[*argc] = token; - (*argc)++; + { + // This only holds 1 command at a time then it overrides + // Will need modified + token = strtok(NULL, " "); + command->argv[*argc] = token; + (*argc)++; } } // Reads ~/.pishrc and runs each command in the file -void ReadPishrc(CommandStruct* command, char* inputString) +void ReadPishrc(CommandStruct *command, char *inputString) { - char buffer[1]; - int forkID; - int* argc = &(command->argc); - int fd = open(GetHomeDir(), O_RDONLY | O_CREAT); - assert(fd > -1); - while (read(fd, buffer, 1) > 0) - { - if (buffer[0] == '\n') - { - ParseInput(inputString, command); - forkID = fork(); - if (forkID == 0) - execvp(command->argv[0], command->argv); - else - wait(&forkID); - strcpy(inputString, ""); - ResetCommandStruct(command); - continue; - } - strcat(inputString, buffer); - } - assert(close(fd) >= 0); + char buffer[1]; + int forkID; + int *argc = &(command->argc); + int fd = open(GetHomeDir(), O_RDONLY | O_CREAT); + assert(fd > -1); + while (read(fd, buffer, 1) > 0) + { + if (buffer[0] == '\n') + { + ParseInput(inputString, command); + forkID = fork(); + if (forkID == 0) + execvp(command->argv[0], command->argv); + else + wait(&forkID); + strcpy(inputString, ""); + ResetCommandStruct(command); + continue; + } + strcat(inputString, buffer); + } + assert(close(fd) >= 0); } + // i/o redirection -void ioRedirection(char* inputString, CommandStruct* command) +// TODO: Work on one symbol at a time +// inputString may not be useful here, only *command +// Try to add a layer of abstraction where possible +// I.E. think about using function instead for checking +void ioRedirection(char *inputString, CommandStruct *command) { - int newfd; - // check command standard output -if (strchr(inputString, '>' )!= NULL) - { + int newfd; + // check command standard output + // TODO: Check command->argv[] for symbol instead + if (strchr(inputString, '>') != NULL) + { + // TODO: Throwing an error here and line 108 for using command + // Check if targeting a specific string in command->argv works + newfd = (open((command, O_CREAT |O_TRUNC | O_WRONLY, 0644)) < 0); + // No if statement for fail checking, brackets just exist here + { + // failed + perror(command); + exit(1); + } - newfd = open((command, O_CREAT |O_TRUNC | O_WRONLY, 0644)) <0) { - //failed - perror(command); - exit(1); - } + // copies the new file descriptor + dup2(newfd, 1); + } // this is supposed to close if statement?? - // copies the new file descriptor - dup2(newfd,1); - }//this is supposed to close if statement?? + // check command standard input + // if (strchr(inputString, '<') != NULL) + // { + // newfd = open((command, O_CREAT |O_TRUNC | O_WRONLY, 0644)) < 0); + // // No if statement for fail checking, brackets just exist here + // { + // // failed + // perror(command); + // exit(1); + // } + // dup2(newfd, 0); + // } -// check command standard input - if(strchr(inputString, '<') != NULL) - { - newfd = open((command, O_CREAT |O_TRUNC | O_WRONLY, 0644)) <0) { - //failed - perror(command); - exit(1); - } - dup2(newfd,0); - } - -//check pipe - if(strchr(command, '|') != NULL) - { - - } -//check append - if (strpbrk(command, ">>") != NULL) - newfd = open((command, O_CREAT |O_TRUNC | O_WRONLY, 0644)) <0) { - //failed - perror(command); - exit(1); - } - dup2(newfd,0); - } - -//check pipe - if(strchr(command, '|') != NULL) - { - - } -//check append - if (strpbrk(command, ">>") != NULL) - { - - } + // check pipe + // TODO: Check for pipe symbol + // Check in command->argv[] instead + // if (strchr(command, '|') != NULL) + // { + // ; + // } + // check append + // TODO: Implement append + // if (strpbrk(command, ">>") != NULL) + // { + // newfd = open((command, O_CREAT |O_TRUNC | O_WRONLY, 0644)) < 0); + // // No if statement for fail checking, brackets just exist here + // { + // // failed + // perror(command); + // exit(1); + // } + // dup2(newfd, 0); + // } + // check pipe + // TODO: Check pipe already exists above, maybe loop? + // if (strchr(command, '|') != NULL) + // { + // ; + // } + // check append + // TODO: Check append already exists above, maybe loop? + // if (strpbrk(command, ">>") != NULL) + // { + // ; + // } } -//Environment varibles -void varibles(char str, int count) -{ - char var[1000]; - var[count]= str; -} +// Environment varibles +// TODO: Add this function to CommandStruct +// Environment Variables can just be a part of the struct +// void varibles(char str, int count) +// { +// char var[1000]; +// var[count] = str; +// }