aboutsummaryrefslogtreecommitdiff
path: root/src/setup.c
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-09-16 16:19:22 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-09-16 16:19:22 +0200
commite439b71d807529734f04ce9d78b98c12022e7c72 (patch)
tree59125ee91455ac607aa064965073c0eed20b3573 /src/setup.c
parent0a8f2cf987a55d6e1c4b210f0f99a1a1e4e4460a (diff)
downloadminishell-e439b71d807529734f04ce9d78b98c12022e7c72.tar.gz
minishell-e439b71d807529734f04ce9d78b98c12022e7c72.tar.bz2
minishell-e439b71d807529734f04ce9d78b98c12022e7c72.zip
Refactoring main, all setup code in setup.c, disabled -c and -l flags if not tested
Diffstat (limited to 'src/setup.c')
-rw-r--r--src/setup.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/setup.c b/src/setup.c
new file mode 100644
index 0000000..a453e99
--- /dev/null
+++ b/src/setup.c
@@ -0,0 +1,83 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* setup.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <me@cacharle.xyz> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/09/16 15:46:09 by charles #+# #+# */
+/* Updated: 2020/09/16 16:17:35 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "minishell.h"
+
+bool st_export_default(t_env env, char *key, char *value)
+{
+ if (env_search(env, key, NULL) != NULL)
+ return (true);
+ return (env_export(env, key, value) != NULL);
+}
+
+bool setup_env(t_env env)
+{
+ char buf[PATH_MAX + 1];
+
+ if (!(getcwd(buf, PATH_MAX)))
+ return (false);
+ if (!st_export_default(env, "PWD", buf) ||
+ !st_export_default(env, "SHLVL", "0") ||
+ !st_export_default(env, "PATH", "/sbin:"))
+ return (false);
+
+ /* char *path_str = env_search(env, "PATH"); */
+ /* if (ft_strstr(path_str, "/sbin") == NULL) */
+ /* { */
+ /* char *value = ft_strjoin("/sbin:", path_str); */
+ /* env_export(env, "PATH", value); */
+ /* free(value); */
+ /* } */
+
+ if (path_search(env, "env", buf, false) != 0)
+ {
+ ft_strcpy(buf, "/sbin/env");
+ /* errorf("env: command not found\n"); */
+ /* return (127); */
+ }
+ env_export(env, "_", buf);
+ return (true);
+}
+
+bool setup_shlvl(t_env env)
+{
+ char shlvl_str[64];
+ char *shlvl_value;
+
+ shlvl_value = env_search(env, "SHLVL", NULL);
+ if (shlvl_value == NULL)
+ return (false);
+ ft_itoa_cpy(shlvl_str, ft_atoi(shlvl_str));
+ return (env_export(env, "SHLVL", shlvl_str) != NULL);
+}
+
+void setup_progname(char *first_arg)
+{
+ char *last_slash;
+
+ if (first_arg == NULL)
+ return ;
+ last_slash = ft_strrchr(first_arg, '/');
+ if (last_slash == NULL)
+ g_progname = first_arg;
+ else
+ g_progname = last_slash + 1;
+}
+
+bool setup(char *first_arg, t_env env)
+{
+ signal(SIGINT, signal_sigint);
+ signal(SIGQUIT, signal_sigquit);
+ signal(SIGTERM, signal_sigterm);
+ setup_progname(first_arg);
+ return (setup_env(env) || setup_shlvl(env));
+}