diff --git a/Makefile b/Makefile index 027cebd..37004ce 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 exec_command builtin builtin2\ +CODE = main ask_command error path parse_command exec_command builtin builtin2 export_print\ signals cool_readline variables parse_command_utils \ parse_command_read_string parse_command_read_element variables_utils # directories to 'make' diff --git a/include/builtins.h b/include/builtins.h index 402dd4d..0e32349 100644 --- a/include/builtins.h +++ b/include/builtins.h @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:15:12 by mcolonna #+# #+# */ -/* Updated: 2024/06/28 15:26:29 by mcolonna ### ########.fr */ +/* Updated: 2024/07/03 18:59:22 by jschaft ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,6 +27,9 @@ int echo_builtin(t_env *env, t_call call); // Execute cd builtin int cd_builtin(t_env *env, t_call call); +//Execute builtin with no arguments +int export_print_builtin(char *const *envp); + // Execute export builtin int export_builtin(t_env *env, t_call call); diff --git a/src/builtin.c b/src/builtin.c index 21f51fb..6f3af05 100644 --- a/src/builtin.c +++ b/src/builtin.c @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/03 12:02:45 by jschaft #+# #+# */ -/* Updated: 2024/07/01 12:35:09 by jschaft ### ########.fr */ +/* Updated: 2024/07/03 18:57:09 by jschaft ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,11 +44,7 @@ static int pwd_builtin(t_env *env, t_call call) char *str; (void)env; - if (call.argv[1]) - { - print_line(fatal_error, 2, "too many arguments"); - return (1); - } + (void)call; str = getcwd(NULL, 0); printf("%s\n", str); free(str); @@ -85,10 +81,13 @@ int exec_builtin(t_env *env, t_call call) exit (cd_builtin(env, call)); if (ft_strncmp(call.program, "exit", 5) == 0) exit (exit_builtin(env, call)); - if (ft_strncmp(call.program, "export", 7) == 0) + if (ft_strncmp(call.program, "export", 7) == 0 && call.argc != 1) exit (export_builtin(env, call)); if (ft_strncmp(call.program, "unset", 6) == 0) exit (unset_builtin(env, call)); + if (ft_strncmp(call.program, "export", 6) == 0 && call.argc == 1) + exit (export_print_builtin(variables_envp(env->variables, + mem_subclass(fatal_error, env->mc_global)))); if (ft_strncmp(call.program, "pwd", 4) == 0) exit (pwd_builtin(env, call)); if (ft_strncmp(call.program, "echo", 5) == 0) diff --git a/src/export_print.c b/src/export_print.c new file mode 100644 index 0000000..b64e2cd --- /dev/null +++ b/src/export_print.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* export_print.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jschaft +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/03 18:57:19 by jschaft #+# #+# */ +/* Updated: 2024/07/03 18:58:53 by jschaft ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "include.h" + +int export_print_builtin(char *const *envp) +{ + int i; + int i2; + + i2 = 0; + i = 0; + while (envp[i]) + { + printf("declare -x "); + while (envp[i][i2] != '=') + { + printf("%c", envp[i][i2]); + i2++; + } + printf("=\""); + i2++; + while (envp[i][i2]) + { + printf("%c", envp[i][i2]); + i2++; + } + printf("\"\n"); + i++; + i2++; + } + return (0); +}