From 23ae7975806cf89fa10af2edfef1ac527f37996f Mon Sep 17 00:00:00 2001
From: Ansh <anshbhajjan@gmail.com>
Date: Tue, 4 Mar 2025 23:52:57 -0500
Subject: [PATCH] Testing write errors

---
 assignments/assignment-5/starter/dsh      | Bin 23464 -> 23488 bytes
 assignments/assignment-5/starter/dshlib.c | 184 +++++++++++++++++-----
 2 files changed, 143 insertions(+), 41 deletions(-)

diff --git a/assignments/assignment-5/starter/dsh b/assignments/assignment-5/starter/dsh
index 3bd5b8ef487637348974bfa0bb6239633ffe36a4..122f476185ab42843e019abfc92ae7f91acb299d 100755
GIT binary patch
delta 4754
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
W&nPk3G1{JsKM<lSi*fR)AUOc?8GmX3

delta 4754
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

diff --git a/assignments/assignment-5/starter/dshlib.c b/assignments/assignment-5/starter/dshlib.c
index 0531d22..df3d589 100644
--- a/assignments/assignment-5/starter/dshlib.c
+++ b/assignments/assignment-5/starter/dshlib.c
@@ -99,9 +99,9 @@ Built_In_Cmds exec_built_in_cmd(cmd_buff_t *cmd) {
 }
 
 int build_cmd_list(char *cmd_line, command_list_t *clist) {
-	printf("Before trimming the cmd_line in build_cmd_list: '%s'\n", cmd_line);
+	//printf("Before trimming the cmd_line in build_cmd_list: '%s'\n", cmd_line);
 	trim_spaces(cmd_line);	
-	printf("Trimmed cmd_line: '%s'\n", cmd_line);
+	//printf("Trimmed cmd_line: '%s'\n", cmd_line);
 
 	char *cmd_tok_save = NULL;
 	char *cmd_tok = strtok_r(cmd_line, PIPE_STRING, &cmd_tok_save);
@@ -111,7 +111,7 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) {
 	while(cmd_tok != NULL) {
 		trim_spaces(cmd_tok);
 
-		printf("Command %d: '%s'\n", index, cmd_tok);
+		//printf("Command %d: '%s'\n", index, cmd_tok);
 
 		if(index >= CMD_MAX) {
 			return ERR_TOO_MANY_COMMANDS;
@@ -121,7 +121,7 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) {
 		cmd->argc = 0;
 		cmd->_cmd_buffer = cmd_tok;
 		
-		printf("Command %d (before args parsing): '%s'\n", index, cmd_tok);
+		//printf("Command %d (before args parsing): '%s'\n", index, cmd_tok);
 
 		char *arg_tok_save = NULL;
 		char *arg_tok = strtok_r(cmd_tok, " ", &arg_tok_save);
@@ -129,7 +129,7 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) {
 		while(arg_tok != NULL && cmd->argc < CMD_ARGV_MAX) {
 			trim_spaces(arg_tok);
 
-			printf("Command %d: argv[%d]: '%s'\n", index, cmd->argc, arg_tok);
+			//printf("Command %d: argv[%d]: '%s'\n", index, cmd->argc, arg_tok);
 
 			cmd->argv[cmd->argc] = arg_tok;
 			cmd->argc++;
@@ -137,17 +137,20 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) {
 			arg_tok = strtok_r(NULL, " ", &arg_tok_save);
 		}
 
-		printf("Command %d finished parsing. argc = %d\n", index, cmd->argc);
+		cmd->argv[cmd->argc] = NULL;
+
+		//printf("Command %d finished parsing. argc = %d\n", index, cmd->argc);
 
 		index++;
 		cmd_tok = strtok_r(NULL, PIPE_STRING, &cmd_tok_save);
 	}
 
 	clist->num = index;
-	printf("Total number of commands: %d\n", clist->num);
+	//printf("Total number of commands: %d\n", clist->num);
 	return OK;
 }
 
+/*
 int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) {
 	int pipe_fds[2];
 	pid_t pid;
@@ -173,36 +176,44 @@ int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) {
 	}
 
 	if(pid == 0) {
-
-		// Debug: Print argv to verify contents
+		printf("Command %d: Before redirecting, STDOUT_FILENO = %d\n", cmd_index, STDOUT_FILENO);
+		
+		// Debug: Print the arguments for execvp to check if the command is correct
         	printf("Command %d: execvp arguments:\n", cmd_index);
         	for (int i = 0; cmd->argv[i] != NULL; i++) {
-            		printf("argv[%d]: %s\n", i, cmd->argv[i]);
+            		printf("argv[%d]: '%s'\n", i, cmd->argv[i]);
         	}
 
-		if(cmd_index > 0) {
-			if(dup2(clist->pipes[cmd_index - 1][0], STDIN_FILENO) == -1) {
-				perror("Failed to redirect stdin");
-				exit(1);
-			}
-			printf("Command %d: stdin redirected from pipe[%d][0] to STDIN_FILENO\n", cmd_index, cmd_index - 1);
-		}
-
-		if(!is_last_cmd) {
-			if(dup2(pipe_fds[1], STDOUT_FILENO) == -1) {
-				perror("Failed to redirect stdout");
-				exit(1);
-			}
-			printf("Command %d: stdout redirected to pipe[%d][1] from STDOUT_FILENO\n", cmd_index, cmd_index);
-		}
+		// Ensure stdin redirection for the second command
+                if (cmd_index > 0) {
+                        if (dup2(clist->pipes[cmd_index - 1][0], STDIN_FILENO) == -1) {
+                                perror("Failed to redirect stdin");
+                                exit(1);
+                        }
+                        printf("Command %d: stdin redirected from pipe[%d][0] to STDIN_FILENO\n", cmd_index, cmd_index - 1);
+			close(clist->pipes[cmd_index - 1][0]);
+			printf("Command %d: Closed pipe[%d][0] in child process\n", cmd_index, cmd_index - 1);
+                }
+
+		// Redirect stdout if it's not the last command
+    		if (!is_last_cmd) {
+        		if (dup2(pipe_fds[1], STDOUT_FILENO) == -1) {
+            			perror("Failed to redirect stdout");
+            			exit(1);
+        		}
+        		printf("Command %d: stdout redirected to pipe[%d][1] from STDOUT_FILENO\n", cmd_index, cmd_index);
+			//close(pipe_fds[1]); // Close the write end of the pipe
+            		//printf("Command %d: Closed pipe[%d][1] in child process\n", cmd_index, cmd_index);
+    		}
 
 		for(int i = 0; i < clist->num - 1; i++) {
-			printf("Command %d: Closing pipe[%d][0] and pipe[%d][1]\n", cmd_index, i, i);
-			close(clist->pipes[i][0]);
-			close(clist->pipes[i][1]);
-		}
+            		if (i != cmd_index - 1) { // Don't close the pipe we're reading from
+                		close(clist->pipes[i][0]);
+                		close(clist->pipes[i][1]);
+                		printf("Command %d: Closed clist->pipes[%d][0] and clist->pipes[%d][1] in child process\n", cmd_index, i, i);   
+            		}
+        	}
 
-		close(pipe_fds[0]);
 		close(pipe_fds[1]);
 
 		if(execvp(cmd->argv[0], cmd->argv) == -1) {
@@ -213,15 +224,10 @@ int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) {
 	else {
 		if(!is_last_cmd) {
 			close(pipe_fds[1]);
-			printf("Command %d: Parent closing pipe[%d][1]\n", cmd_index, cmd_index);
-		}
-
-		/*
-		for(int i = 0; i < clist->num - 1; i++) {
-			close(clist->pipes[i][0]);
-			close(clist->pipes[i][1]);
+			printf("Command %d: Parent closing write end pipe[%d][1]\n", cmd_index, cmd_index);
+			//close(pipe_fds[0]);
+			//printf("Command %d: Parent closing read end pipe[%d][0]\n", cmd_index, cmd_index);
 		}
-		*/
 
 		if(cmd_index > 0) {
 			close(clist->pipes[cmd_index - 1][0]);
@@ -235,6 +241,102 @@ int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) {
 	return OK;
 }
 
+*/
+
+int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) {
+    int pipe_fds[2];
+    pid_t pid;
+
+    int is_last_cmd = (cmd_index == clist->num - 1);
+
+    printf("Command %d: is_last_cmd = %d\n", cmd_index, is_last_cmd);
+
+    // Create pipe for non-last commands
+    if (!is_last_cmd) {
+        if (pipe(pipe_fds) == -1) {
+            perror("Pipe failed");
+            return -1;
+        }
+        printf("Command %d: Pipe created with fd[0] = %d, fd[1] = %d\n", cmd_index, pipe_fds[0], pipe_fds[1]);
+    }
+
+    pid = fork();
+
+    if (pid == -1) {
+        perror("Fork failed");
+        return -1;
+    }
+
+    if (pid == 0) { // Child process
+        printf("Command %d: Before redirecting, STDOUT_FILENO = %d\n", cmd_index, STDOUT_FILENO);
+
+	printf("Debug: Command %d, before redirecting, pipe_fds[1] = %d\n", cmd_index, pipe_fds[1]);
+
+        // Debug: Print the arguments for execvp to check if the command is correct
+        printf("Command %d: execvp arguments:\n", cmd_index);
+        for (int i = 0; cmd->argv[i] != NULL; i++) {
+            printf("argv[%d]: '%s'\n", i, cmd->argv[i]);
+        }
+
+        // Redirect input from previous command, if it's not the first command
+        if (cmd_index > 0) {
+            if (dup2(clist->pipes[cmd_index - 1][0], STDIN_FILENO) == -1) {
+                perror("Failed to redirect stdin");
+                exit(1);
+            }
+            printf("Command %d: stdin redirected from pipe[%d][0] to STDIN_FILENO\n", cmd_index, cmd_index - 1);
+            close(clist->pipes[cmd_index - 1][0]); // Close the read end of the previous pipe
+            printf("Command %d: Closed pipe[%d][0] in child process\n", cmd_index, cmd_index - 1);
+        }
+
+        // Redirect stdout to the pipe if this is not the last command
+        if (!is_last_cmd) {
+            if (dup2(pipe_fds[1], STDOUT_FILENO) == -1) {
+                perror("Failed to redirect stdout");
+                exit(1);
+            }
+            printf("Command %d: stdout redirected to pipe[%d][1] from STDOUT_FILENO\n", cmd_index, cmd_index);
+            close(pipe_fds[1]); // Close the write end of the pipe after redirection
+            printf("Command %d: Closed pipe[%d][1] in child process\n", cmd_index, cmd_index);
+        }
+
+        // Close all unnecessary file descriptors in child process
+        for (int i = 0; i < clist->num - 1; i++) {
+            if (i != cmd_index - 1) { // Don't close the pipe we're reading from
+                close(clist->pipes[i][0]);
+                close(clist->pipes[i][1]);
+                printf("Command %d: Closed clist->pipes[%d][0] and clist->pipes[%d][1] in child process\n", cmd_index, i, i);
+            }
+        }
+
+        // Execute the command
+        if (execvp(cmd->argv[0], cmd->argv) == -1) {
+            perror("Execvp failed");
+	    printf("Debug: Execvp failed for command %d. Pipe fds: pipe_fds[0] = %d, pipe_fds[1] = %d\n", cmd_index, pipe_fds[0], pipe_fds[1]);
+            exit(1);
+        }
+    } else { // Parent process
+        // Close the write end of the pipe in the parent if it's not the last command
+        if (!is_last_cmd) {
+            close(pipe_fds[1]); // Parent closes the write end of the pipe
+            printf("Command %d: Parent closing write end pipe[%d][1]\n", cmd_index, cmd_index);
+        }
+
+        // Close the read end of the previous pipe in the parent process
+        if (cmd_index > 0) {
+            close(clist->pipes[cmd_index - 1][0]); // Parent closes the previous read end
+            printf("Command %d: Parent closing pipe[%d][0]\n", cmd_index, cmd_index - 1);
+        }
+
+        // Wait for the child process to finish
+        int status;
+        waitpid(pid, &status, 0);
+        printf("Command %d: Child process finished with status %d\n", cmd_index, status);
+    }
+    return OK;
+}
+
+
 int exec_local_cmd_loop() {
 
 	char *cmd_buff = malloc(SH_CMD_MAX * sizeof(char));
@@ -255,7 +357,7 @@ int exec_local_cmd_loop() {
 			break;
 		}
 
-		printf("Raw input: '%s'\n", cmd_buff);
+		//printf("Raw input: '%s'\n", cmd_buff);
 
 		// remove the trailing \n from cmd_buff
 		cmd_buff[strcspn(cmd_buff, "\n")] = '\0';
@@ -263,7 +365,7 @@ int exec_local_cmd_loop() {
 		// IMPLEMENT THE REST OF THE REQUIREMENTS
 
 		trim_spaces(cmd_buff);
-		printf("Trimmed input in exec_local_cmd_loop: '%s'\n", cmd_buff);
+		//printf("Trimmed input in exec_local_cmd_loop: '%s'\n", cmd_buff);
 
 		if(strlen(cmd_buff) == 0) {
 			printf(CMD_WARN_NO_CMD);
@@ -276,7 +378,7 @@ int exec_local_cmd_loop() {
 		}
 
 		rc = build_cmd_list(cmd_buff, &clist);
-		printf("RC value: %d\n", rc);
+		//printf("RC value: %d\n", rc);
 
 		switch(rc) {
 			case OK:
-- 
GitLab