From 7df3184578d21e735af868354d2a79406320af5d Mon Sep 17 00:00:00 2001 From: mcolonna Date: Thu, 25 Apr 2024 18:15:37 +0200 Subject: [PATCH] fix errors. Remaining errors: - segfault when empty command - doesn't wait for the end of the command before prompting --- Makefile | 2 +- include/include.h | 13 +++++++++---- minishell | Bin 0 -> 59184 bytes src/exec_command.c | 16 ++++++++-------- src/main.c | 10 ++++------ src/parse_command.c | 4 ++-- src/path.c | 23 +++++++++++------------ 7 files changed, 35 insertions(+), 33 deletions(-) create mode 100755 minishell diff --git a/Makefile b/Makefile index 52864a7..794a0f3 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SRCS = src/ # include directory INCLUDES = include/ libtf/ libft/ # .c files in src/ without the extension -CODE = main ask_command error path parse_command +CODE = main ask_command error path parse_command exec_command # directories to 'make' LIBRARIES = libtf libft # .a files to include diff --git a/include/include.h b/include/include.h index 9205886..92e9074 100644 --- a/include/include.h +++ b/include/include.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:15:12 by mcolonna #+# #+# */ -/* Updated: 2024/04/25 17:47:02 by mcolonna ### ########.fr */ +/* Updated: 2024/04/25 18:04:46 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,7 +38,7 @@ typedef struct s_call { const char *program; // path of the program to call. int argc; // number of arguments given - const char *const *argv; // arguments given + char *const *argv; // arguments given // (argc and argv must include the program name) } t_call; @@ -58,7 +58,7 @@ t_command parse_command(const t_memclass mc, const char *command); ///// EXECUTE COMMAND ///// // Execute the command given. Return the exit status. -int execute_command(t_command command); +int execute_command(t_memclass mc, t_command command, char *const envp[]); ///// ERROR ///// @@ -73,6 +73,11 @@ void fatal_error(const char *msg); // Get the PATH values. // Return a list of strings ended by NULL. -char **get_path(const char **envp); +char **get_path(char *const envp[]); + +// Search the program in PATH. +// Returns the path of the program to use, or NULL if there is none. +const char *search_path( + const t_memclass mc, const char **path, const char *prog); #endif diff --git a/minishell b/minishell new file mode 100755 index 0000000000000000000000000000000000000000..5638437351f9a1132118f292eec557b9263f0a66 GIT binary patch literal 59184 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 literal 0 HcmV?d00001 diff --git a/src/exec_command.c b/src/exec_command.c index f7d609d..a9b46c7 100644 --- a/src/exec_command.c +++ b/src/exec_command.c @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/24 13:48:00 by jschaft #+# #+# */ -/* Updated: 2024/04/25 17:23:34 by mcolonna ### ########.fr */ +/* Updated: 2024/04/25 18:14:03 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,23 +28,23 @@ static void free_tab(char **tab) // TODO works with only one call (no pipe). // TODO is t_call.argv ended by NULL? -static void fork_exec(const char *path, t_command command, const char **envp) +static void fork_exec(const char *path, t_command command, char *const envp[]) { if (command.input_fd != 0) dup2(command.input_fd, 0); if (command.output_fd != 1) dup2(command.output_fd, 1); - execve(path, command.calls[0]->argv, envp); + execve(path, command.calls[0].argv, envp); } // TODO works with only one call (no pipe). -int execute_command(t_command command, const char **envp) +int execute_command(t_memclass mc, t_command command, char *const envp[]) { - const char **path = get_path(envp); - pid_t pid; - int program_path; + char **const path = get_path(envp); + pid_t pid; + const char* program_path; - program_path = search_path(path); + program_path = search_path(mc, (const char **)path, command.calls[0].program); if (!program_path) return (127); pid = fork(); diff --git a/src/main.c b/src/main.c index 7101c0c..d8f80a7 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:33:45 by mcolonna #+# #+# */ -/* Updated: 2024/04/25 16:54:13 by mcolonna ### ########.fr */ +/* Updated: 2024/04/25 18:14:53 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,9 +43,9 @@ static void print_hi(void) printf("|_____________________________________________|\n\n"); } -int main(const int argc, const char *argv[], const char *envp[]) +int main(const int argc, const char *argv[], char *const envp[]) { - const char **path = get_path(envp); + char **const path = get_path(envp); t_memclass mc; const char *command_str; t_command command; @@ -65,10 +65,8 @@ int main(const int argc, const char *argv[], const char *envp[]) command = parse_command(mc, command_str); if (command.error) continue ; - /* - errorstatus = execute_command(command); + errorstatus = execute_command(mc, command, envp); mem_freeall(mc); - */ } return (errorstatus); } diff --git a/src/parse_command.c b/src/parse_command.c index 0610053..0370d36 100644 --- a/src/parse_command.c +++ b/src/parse_command.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/24 13:47:40 by mcolonna #+# #+# */ -/* Updated: 2024/04/25 16:51:22 by mcolonna ### ########.fr */ +/* Updated: 2024/04/25 17:58:54 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,7 +78,7 @@ static void get_call(t_parsing_args *args, const char *stop_charset) r = mem_alloc(fatal_error, args->mc, sizeof(t_call)); r->program = (char *)list_get(parse_error, &arguments, 0); r->argc = list_getsize(&arguments); - r->argv = (const char *const *)list_convert( + r->argv = (char *const *)list_convert( fatal_error, args->mc, &arguments); list_add(fatal_error, &args->calls, (t_call *)r); args->got_first_call = true; diff --git a/src/path.c b/src/path.c index 37ea53e..fde3885 100644 --- a/src/path.c +++ b/src/path.c @@ -6,14 +6,13 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/16 12:07:26 by jschaft #+# #+# */ -/* Updated: 2024/04/25 17:30:05 by mcolonna ### ########.fr */ +/* Updated: 2024/04/25 18:03:49 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ #include "include.h" -// Get the path values from envp. -char **get_path(const char **envp) +char **get_path(char *const envp[]) { int i; char **re; @@ -25,26 +24,26 @@ char **get_path(const char **envp) path = ft_substr(envp[i], 5, ft_strlen(envp[i]) - 5); re = ft_split(path, ':'); free(path); - return (char **re); + return (re); } -// Search the program in PATH. -// Returns the path of the program to use, or NULL if there is none. // TODO does it return the good path if there is several possibilities? const char *search_path( const t_memclass mc, const char **path, const char *prog) { - const t_memclass mc_in = mem_newclass(fatal_error); - const char *prog2 = str_join(fatal_error, mc_in, "/", prog); - int i; + const char *prog2 = str_join(fatal_error, mc, "/", prog); + int i; + const char *r; i = 0; while (path[i] != NULL) { - if (access(str_join(fatal_error, mc_in, path[i], prog2), X_OK) >= 0) - return (i); + r = str_join(fatal_error, mc, path[i], prog2); + if (access(r, X_OK) >= 0) + return (r); + mem_free((void *)r); i++; } - mem_freeall(mc_in); + mem_free((void *)prog2); return (NULL); }