aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-03-04 17:37:44 +0100
committerCharles <sircharlesaze@gmail.com>2020-03-04 17:37:44 +0100
commit9b3753960b986d0dcf84369846fd7ac74d2baef6 (patch)
treed2fcda5ffb3e588b9ffd4740deac7a68217cab4c
parente0ba9a82e11d9f23cf4eaed267b25021f98ae9f4 (diff)
downloadminishell-9b3753960b986d0dcf84369846fd7ac74d2baef6.tar.gz
minishell-9b3753960b986d0dcf84369846fd7ac74d2baef6.tar.bz2
minishell-9b3753960b986d0dcf84369846fd7ac74d2baef6.zip
Added builtins draft
-rw-r--r--include/minishell.h16
-rw-r--r--src/builtin/cd.c15
-rw-r--r--src/builtin/echo.c16
-rw-r--r--src/builtin/env.c2
-rw-r--r--src/builtin/export.c6
-rw-r--r--src/builtin/pwd.c13
-rw-r--r--src/builtin/unset.c9
-rw-r--r--src/main.c5
8 files changed, 72 insertions, 10 deletions
diff --git a/include/minishell.h b/include/minishell.h
index 4fbddfd..d1bb237 100644
--- a/include/minishell.h
+++ b/include/minishell.h
@@ -21,6 +21,7 @@
# include <sys/wait.h>
# include <signal.h>
# include <sys/stat.h>
+# include <stdbool.h>
# include "libft.h"
# include "libft_ht.h"
@@ -82,15 +83,14 @@ char **ms_environment_to_array(t_ftht *environment);
** builtin*.c
*/
-typedef int (*t_builtin_func)(t_state *state);
-t_builtin_func ms_echo;
-t_builtin_func ms_cd;
-t_builtin_func ms_pwd;
-t_builtin_func ms_export;
-t_builtin_func ms_unset;
-// t_builtin_func ms_env;
+// typedef int (*t_builtin_func)(t_state *state);
+int ms_echo(char **argv);
+int ms_cd(t_state *state, char **argv);
+int ms_pwd(t_state *state);
+int ms_export(t_state *state, char **argv);
+int ms_unset(t_state *state, char **argv);
int ms_env(t_state *state);
-t_builtin_func ms_exit;
+// int ms_exit(t_state *state);
/*
** util.c
diff --git a/src/builtin/cd.c b/src/builtin/cd.c
index e69de29..c67cd23 100644
--- a/src/builtin/cd.c
+++ b/src/builtin/cd.c
@@ -0,0 +1,15 @@
+#include "minishell.h"
+
+int ms_cd(t_state *state, char **argv)
+{
+ char *path;
+
+ path = argv[1];
+ if (argv[1] == NULL)
+ path = ft_htget(state->environment, "HOME");
+ if (path == NULL)
+ return (1);
+ if (chdir(path) == -1)
+ return (1);
+ return (0);
+}
diff --git a/src/builtin/echo.c b/src/builtin/echo.c
index e69de29..b8d2d43 100644
--- a/src/builtin/echo.c
+++ b/src/builtin/echo.c
@@ -0,0 +1,16 @@
+#include "minishell.h"
+
+int ms_echo(char **argv)
+{
+ bool newline;
+
+ newline = ft_strcmp(argv[1], "-n") == 0;
+ while (*++argv != NULL)
+ {
+ ft_putstr(*argv);
+ ft_putchar(' ');
+ }
+ if (newline)
+ ft_putchar('\n');
+ return (0);
+}
diff --git a/src/builtin/env.c b/src/builtin/env.c
index ada0122..24e474f 100644
--- a/src/builtin/env.c
+++ b/src/builtin/env.c
@@ -8,7 +8,7 @@ void st_print_env_variable(t_ftht_content *content)
ft_putchar('\n');
}
-int ms_env(t_state *state)
+int ms_env(t_state *state)
{
ft_htiter(state->environment, st_print_env_variable);
return (0);
diff --git a/src/builtin/export.c b/src/builtin/export.c
index e69de29..e284270 100644
--- a/src/builtin/export.c
+++ b/src/builtin/export.c
@@ -0,0 +1,6 @@
+#include "minishell.h"
+
+int ms_export(t_state *state, char **argv)
+{
+ return (0);
+}
diff --git a/src/builtin/pwd.c b/src/builtin/pwd.c
index e69de29..9825bee 100644
--- a/src/builtin/pwd.c
+++ b/src/builtin/pwd.c
@@ -0,0 +1,13 @@
+#include "minishell.h"
+
+int ms_pwd(t_state *state)
+{
+ char buf[PATH_MAX];
+
+ (void)state;
+ ft_bzero(buf, PATH_MAX);
+ if (getcwd(buf, PATH_MAX) == NULL)
+ return (1);
+ ft_putendl(buf);
+ return (0);
+}
diff --git a/src/builtin/unset.c b/src/builtin/unset.c
index e69de29..ea24a63 100644
--- a/src/builtin/unset.c
+++ b/src/builtin/unset.c
@@ -0,0 +1,9 @@
+#include "minishell.h"
+
+int ms_unset(t_state *state, char **argv)
+{
+ if (argv[1] == NULL)
+ return (1);
+ ft_htdelone(state->environment, argv[1], ms_ht_del_str_entry);
+ return (0);
+}
diff --git a/src/main.c b/src/main.c
index 494fabc..8c2d138 100644
--- a/src/main.c
+++ b/src/main.c
@@ -22,7 +22,10 @@ int main(int argc, char **argv, const char **envp)
(void)argv;
if (ms_state_init(&state, envp) == -1)
return (1);
- ms_env(&state);
+ /* ms_env(&state); */
+ /* ms_pwd(&state); */
+ /* ms_cd(&state, NULL); */
+ /* ms_pwd(&state); */
/* while ((ret = ft_next_line(STDIN_FILENO, &line)) == 1) */
/* { */