aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDominik Kaiser2025-01-14 18:20:33 +0100
committerDominik Kaiser2025-01-14 18:20:33 +0100
commit3e692dac63577011bd5862a66767ef412183f26b (patch)
treec62096c34058d794311ac975c6611aad20f2e1a0 /src
parent8c37f835ba29bcecc1d779edb396d97b18667026 (diff)
downloadminishell-3e692dac63577011bd5862a66767ef412183f26b.tar.gz
minishell-3e692dac63577011bd5862a66767ef412183f26b.zip
Some changes
Diffstat (limited to 'src')
-rw-r--r--src/builtins_part_one.c32
-rw-r--r--src/env_to_strlst.c11
-rw-r--r--src/format_string.c18
-rw-r--r--src/main.c3
-rw-r--r--src/repl.c4
5 files changed, 48 insertions, 20 deletions
diff --git a/src/builtins_part_one.c b/src/builtins_part_one.c
index d64bb54..b6e5261 100644
--- a/src/builtins_part_one.c
+++ b/src/builtins_part_one.c
@@ -6,11 +6,12 @@
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/09 17:01:16 by chuhlig #+# #+# */
-/* Updated: 2025/01/10 14:36:55 by chuhlig ### ########.fr */
+/* Updated: 2025/01/14 15:20:42 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "env.h"
+#include <stdio.h>
int echo(char **av)
{
@@ -22,7 +23,7 @@ int echo(char **av)
if (av[1] == NULL || av[1][0] == '\0')
{
write(1, "\n", 1);
- return (1);
+ return (0);
}
if (ft_strncmp(av[1], "-n", 3) == 0)
{
@@ -59,6 +60,11 @@ int ft_env(t_env *env)
{
while (env != NULL)
{
+ if (strchr(env->name, '?'))
+ {
+ env = env->next;
+ continue;
+ }
printf("%s", env->name);
printf("=%s\n", env->value);
env = env->next;
@@ -89,6 +95,8 @@ int unset(char **av, t_env **env)
i = 0;
while (av[++i])
{
+ if (ft_strchr(av[i], '?'))
+ return (1);
current = *env;
prev = NULL;
while (current)
@@ -145,6 +153,8 @@ int export(char **av, t_env **env)
{
tmp = ft_strchr(av[i], '=');
*tmp = '\0';
+ if (ft_strchr(av[i], '?'))
+ return (1);
current = check_existing(*env, av[i]);
if (current)
free(current->value);
@@ -158,4 +168,20 @@ int export(char **av, t_env **env)
}
}
return (0);
-} \ No newline at end of file
+}
+
+void set_return_code(int return_code, t_env **env)
+{
+ t_env *cur;
+
+ cur = check_existing(*env, "?");
+ if (cur)
+ free(cur->value);
+ else
+ {
+ cur = env_new(ft_strdup("?"));
+ cur->next = *env;
+ *env = cur;
+ }
+ cur->value = ft_itoa(return_code);
+}
diff --git a/src/env_to_strlst.c b/src/env_to_strlst.c
index c4c98c3..e0536c0 100644
--- a/src/env_to_strlst.c
+++ b/src/env_to_strlst.c
@@ -6,7 +6,7 @@
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/12/17 19:22:28 by chuhlig #+# #+# */
-/* Updated: 2024/12/17 19:22:36 by chuhlig ### ########.fr */
+/* Updated: 2025/01/14 14:41:39 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -26,6 +26,11 @@ char **env_to_strlst(t_env *env)
cur = env;
while (cur != NULL)
{
+ if (ft_strchr(cur->name, '?'))
+ {
+ cur = cur->next;
+ continue;
+ }
size++;
cur = cur->next;
}
@@ -36,6 +41,8 @@ char **env_to_strlst(t_env *env)
cur = env;
while (i < size)
{
+ if (ft_strchr(cur->name, '?'))
+ cur = cur->next;
result[i] = get_var_assign(cur);
cur = cur->next;
i++;
@@ -55,4 +62,4 @@ static char *get_var_assign(t_env *cur)
result = ft_strjoin(left_side, cur->value);
free(left_side);
return (result);
-} \ No newline at end of file
+}
diff --git a/src/format_string.c b/src/format_string.c
index bd7f703..1fe028c 100644
--- a/src/format_string.c
+++ b/src/format_string.c
@@ -6,7 +6,7 @@
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/12/17 19:30:11 by chuhlig #+# #+# */
-/* Updated: 2024/12/17 19:31:54 by chuhlig ### ########.fr */
+/* Updated: 2025/01/14 18:06:17 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -17,22 +17,16 @@
static void append_slice(char **dst, char *src, int start, int end);
static void append_var(char **dst, char *src, int *pos, t_env *env);
-enum e_format_mode
-{
- LITERAL = 1,
- VARIABLE = 2,
-};
-
char *format_string(char *str, t_env *env)
{
char *result;
int pos;
int start;
- int mode;
+ int is_literal;
pos = 0;
start = 0;
- mode = 0;
+ is_literal = 0;
result = NULL;
if (str == NULL)
return (NULL);
@@ -42,14 +36,14 @@ char *format_string(char *str, t_env *env)
{
append_slice(&result, str, start, pos);
start = pos + 1;
- mode ^= LITERAL;
+ is_literal = !is_literal;
}
- if (str[pos] == '"' && !(mode & LITERAL))
+ if (str[pos] == '"' && !is_literal)
{
append_slice(&result, str, start, pos);
start = pos + 1;
}
- if (str[pos] == '$' && !(mode & LITERAL))
+ if (str[pos] == '$' && !is_literal)
{
append_slice(&result, str, start, pos);
append_var(&result, str, &pos, env);
diff --git a/src/main.c b/src/main.c
index a53760c..9e5d4ec 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,7 +6,7 @@
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 17:14:03 by dkaiser #+# #+# */
-/* Updated: 2024/12/17 19:26:42 by chuhlig ### ########.fr */
+/* Updated: 2025/01/14 15:22:40 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -22,5 +22,6 @@ int main(int argc, char *argv[], char *envp[])
if (init())
return (1);
getenvlst(&env, envp);
+ set_return_code(0, &env);
repl("Minishell $ ", &env);
}
diff --git a/src/repl.c b/src/repl.c
index 7ff80a8..4292197 100644
--- a/src/repl.c
+++ b/src/repl.c
@@ -6,7 +6,7 @@
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/24 16:07:04 by dkaiser #+# #+# */
-/* Updated: 2025/01/11 16:01:44 by chuhlig ### ########.fr */
+/* Updated: 2025/01/14 14:53:29 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -54,7 +54,7 @@ void repl(const char *prompt, t_env **env)
if (lines)
{
print_ast(lines->content);
- eval(lines->content, env);
+ set_return_code(eval(lines->content, env), env);
}
free(input);
}