From 8f5abcdb257393a2e576fe382835e8e060662834 Mon Sep 17 00:00:00 2001 From: Christopher Uhlig Date: Mon, 20 Jan 2025 13:06:34 +0100 Subject: [PATCH] merged --- .vscode/c_cpp_properties.json | 18 - .vscode/launch.json | 13 - .vscode/settings.json | 64 -- .vscode/tasks.json | 29 - Makefile | 6 +- garbage | 1183 ------------------------ include/ast.h | 12 +- include/debug_tools.h | 11 +- include/env.h | 3 +- include/minishell.h | 15 +- include/token.h | 3 +- lib/libft/_obj/ft_atoi.o | Bin 0 -> 932 bytes lib/libft/_obj/ft_atol.o | Bin 0 -> 948 bytes lib/libft/_obj/ft_bzero.o | Bin 0 -> 676 bytes lib/libft/_obj/ft_calloc.o | Bin 0 -> 752 bytes lib/libft/_obj/ft_isalnum.o | Bin 0 -> 704 bytes lib/libft/_obj/ft_isalpha.o | Bin 0 -> 680 bytes lib/libft/_obj/ft_isascii.o | Bin 0 -> 664 bytes lib/libft/_obj/ft_isdigit.o | Bin 0 -> 664 bytes lib/libft/_obj/ft_isprint.o | Bin 0 -> 664 bytes lib/libft/_obj/ft_isspace.o | Bin 0 -> 672 bytes lib/libft/_obj/ft_itoa.o | Bin 0 -> 1236 bytes lib/libft/_obj/ft_lstadd_back_bonus.o | Bin 0 -> 716 bytes lib/libft/_obj/ft_lstadd_front_bonus.o | Bin 0 -> 652 bytes lib/libft/_obj/ft_lstclear_bonus.o | Bin 0 -> 780 bytes lib/libft/_obj/ft_lstdelone_bonus.o | Bin 0 -> 688 bytes lib/libft/_obj/ft_lstiter_bonus.o | Bin 0 -> 712 bytes lib/libft/_obj/ft_lstlast_bonus.o | Bin 0 -> 696 bytes lib/libft/_obj/ft_lstmap_bonus.o | Bin 0 -> 932 bytes lib/libft/_obj/ft_lstnew_bonus.o | Bin 0 -> 732 bytes lib/libft/_obj/ft_lstsize_bonus.o | Bin 0 -> 704 bytes lib/libft/_obj/ft_memchr.o | Bin 0 -> 724 bytes lib/libft/_obj/ft_memcmp.o | Bin 0 -> 740 bytes lib/libft/_obj/ft_memcpy.o | Bin 0 -> 764 bytes lib/libft/_obj/ft_memmove.o | Bin 0 -> 824 bytes lib/libft/_obj/ft_memset.o | Bin 0 -> 684 bytes lib/libft/_obj/ft_printaddr.o | Bin 0 -> 1128 bytes lib/libft/_obj/ft_printf.o | Bin 0 -> 2996 bytes lib/libft/_obj/ft_printhex.o | Bin 0 -> 1012 bytes lib/libft/_obj/ft_printnbr.o | Bin 0 -> 1704 bytes lib/libft/_obj/ft_putchar_fd.o | Bin 0 -> 680 bytes lib/libft/_obj/ft_putendl_fd.o | Bin 0 -> 860 bytes lib/libft/_obj/ft_putnbr_fd.o | Bin 0 -> 1088 bytes lib/libft/_obj/ft_putstr_fd.o | Bin 0 -> 740 bytes lib/libft/_obj/ft_split.o | Bin 0 -> 1936 bytes lib/libft/_obj/ft_strcat.o | Bin 0 -> 756 bytes lib/libft/_obj/ft_strchr.o | Bin 0 -> 756 bytes lib/libft/_obj/ft_strcmp.o | Bin 0 -> 748 bytes lib/libft/_obj/ft_strcpy.o | Bin 0 -> 700 bytes lib/libft/_obj/ft_strdup.o | Bin 0 -> 816 bytes lib/libft/_obj/ft_striteri.o | Bin 0 -> 696 bytes lib/libft/_obj/ft_strjoin.o | Bin 0 -> 1044 bytes lib/libft/_obj/ft_strlcat.o | Bin 0 -> 896 bytes lib/libft/_obj/ft_strlcpy.o | Bin 0 -> 872 bytes lib/libft/_obj/ft_strlen.o | Bin 0 -> 660 bytes lib/libft/_obj/ft_strmapi.o | Bin 0 -> 864 bytes lib/libft/_obj/ft_strncmp.o | Bin 0 -> 824 bytes lib/libft/_obj/ft_strncpy.o | Bin 0 -> 728 bytes lib/libft/_obj/ft_strnstr.o | Bin 0 -> 984 bytes lib/libft/_obj/ft_strrchr.o | Bin 0 -> 744 bytes lib/libft/_obj/ft_strtrim.o | Bin 0 -> 1232 bytes lib/libft/_obj/ft_substr.o | Bin 0 -> 912 bytes lib/libft/_obj/ft_tolower.o | Bin 0 -> 664 bytes lib/libft/_obj/ft_toupper.o | Bin 0 -> 664 bytes lib/libft/_obj/get_next_line.o | Bin 0 -> 1860 bytes lib/libft/_obj/get_next_line_utils.o | Bin 0 -> 1384 bytes lib/libft/libft.a | Bin 0 -> 55752 bytes src/builtins_part_one.c | 133 +-- src/builtins_part_three.c | 76 ++ src/builtins_part_two.c | 5 +- src/collect_redirs.c | 53 +- src/create_files.c | 16 +- src/debug_tools.c | 6 +- src/env_to_strlst.c | 29 +- src/execute_cmd.c | 2 +- src/format_string.c | 112 +-- src/free_token.c | 7 +- src/get_cmd_path.c | 4 +- src/handle_redir.c | 103 +++ src/interpreter.c | 89 +- src/new_node.c | 5 +- src/parse_cmd.c | 13 +- src/parser.c | 4 +- src/repl.c | 6 +- src/signal_handling.c | 2 +- teest.txt | 1 - 86 files changed, 428 insertions(+), 1595 deletions(-) delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json delete mode 100644 .vscode/tasks.json delete mode 100644 garbage create mode 100644 lib/libft/_obj/ft_atoi.o create mode 100644 lib/libft/_obj/ft_atol.o create mode 100644 lib/libft/_obj/ft_bzero.o create mode 100644 lib/libft/_obj/ft_calloc.o create mode 100644 lib/libft/_obj/ft_isalnum.o create mode 100644 lib/libft/_obj/ft_isalpha.o create mode 100644 lib/libft/_obj/ft_isascii.o create mode 100644 lib/libft/_obj/ft_isdigit.o create mode 100644 lib/libft/_obj/ft_isprint.o create mode 100644 lib/libft/_obj/ft_isspace.o create mode 100644 lib/libft/_obj/ft_itoa.o create mode 100644 lib/libft/_obj/ft_lstadd_back_bonus.o create mode 100644 lib/libft/_obj/ft_lstadd_front_bonus.o create mode 100644 lib/libft/_obj/ft_lstclear_bonus.o create mode 100644 lib/libft/_obj/ft_lstdelone_bonus.o create mode 100644 lib/libft/_obj/ft_lstiter_bonus.o create mode 100644 lib/libft/_obj/ft_lstlast_bonus.o create mode 100644 lib/libft/_obj/ft_lstmap_bonus.o create mode 100644 lib/libft/_obj/ft_lstnew_bonus.o create mode 100644 lib/libft/_obj/ft_lstsize_bonus.o create mode 100644 lib/libft/_obj/ft_memchr.o create mode 100644 lib/libft/_obj/ft_memcmp.o create mode 100644 lib/libft/_obj/ft_memcpy.o create mode 100644 lib/libft/_obj/ft_memmove.o create mode 100644 lib/libft/_obj/ft_memset.o create mode 100644 lib/libft/_obj/ft_printaddr.o create mode 100644 lib/libft/_obj/ft_printf.o create mode 100644 lib/libft/_obj/ft_printhex.o create mode 100644 lib/libft/_obj/ft_printnbr.o create mode 100644 lib/libft/_obj/ft_putchar_fd.o create mode 100644 lib/libft/_obj/ft_putendl_fd.o create mode 100644 lib/libft/_obj/ft_putnbr_fd.o create mode 100644 lib/libft/_obj/ft_putstr_fd.o create mode 100644 lib/libft/_obj/ft_split.o create mode 100644 lib/libft/_obj/ft_strcat.o create mode 100644 lib/libft/_obj/ft_strchr.o create mode 100644 lib/libft/_obj/ft_strcmp.o create mode 100644 lib/libft/_obj/ft_strcpy.o create mode 100644 lib/libft/_obj/ft_strdup.o create mode 100644 lib/libft/_obj/ft_striteri.o create mode 100644 lib/libft/_obj/ft_strjoin.o create mode 100644 lib/libft/_obj/ft_strlcat.o create mode 100644 lib/libft/_obj/ft_strlcpy.o create mode 100644 lib/libft/_obj/ft_strlen.o create mode 100644 lib/libft/_obj/ft_strmapi.o create mode 100644 lib/libft/_obj/ft_strncmp.o create mode 100644 lib/libft/_obj/ft_strncpy.o create mode 100644 lib/libft/_obj/ft_strnstr.o create mode 100644 lib/libft/_obj/ft_strrchr.o create mode 100644 lib/libft/_obj/ft_strtrim.o create mode 100644 lib/libft/_obj/ft_substr.o create mode 100644 lib/libft/_obj/ft_tolower.o create mode 100644 lib/libft/_obj/ft_toupper.o create mode 100644 lib/libft/_obj/get_next_line.o create mode 100644 lib/libft/_obj/get_next_line_utils.o create mode 100644 lib/libft/libft.a create mode 100644 src/builtins_part_three.c create mode 100644 src/handle_redir.c delete mode 100644 teest.txt diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index 94b2ae4..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "configurations": [ - { - "name": "macos-clang-x64", - "includePath": [ - "${workspaceFolder}/**" - ], - "compilerPath": "/usr/bin/clang", - "cStandard": "${default}", - "cppStandard": "${default}", - "intelliSenseMode": "macos-clang-x64", - "compilerArgs": [ - "" - ] - } - ], - "version": 4 - } \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 86fa44a..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "C/C++ Runner: Debug Session", - "type": "lldb", - "request": "launch", - "args": [], - "cwd": "/Users/chuhlig/Desktop/merged_minishell/", - "program": "/Users/chuhlig/Desktop/merged_minishell/minishell" - } - ] - } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 91fa952..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "C_Cpp_Runner.cCompilerPath": "clang", - "C_Cpp_Runner.cppCompilerPath": "clang++", - "C_Cpp_Runner.debuggerPath": "lldb", - "C_Cpp_Runner.cStandard": "", - "C_Cpp_Runner.cppStandard": "", - "C_Cpp_Runner.msvcBatchPath": "", - "C_Cpp_Runner.useMsvc": false, - "C_Cpp_Runner.warnings": [ - "-Wall", - "-Wextra", - "-Wpedantic", - "-Wshadow", - "-Wformat=2", - "-Wcast-align", - "-Wconversion", - "-Wsign-conversion", - "-Wnull-dereference" - ], - "C_Cpp_Runner.msvcWarnings": [ - "/W4", - "/permissive-", - "/w14242", - "/w14287", - "/w14296", - "/w14311", - "/w14826", - "/w44062", - "/w44242", - "/w14905", - "/w14906", - "/w14263", - "/w44265", - "/w14928" - ], - "C_Cpp_Runner.enableWarnings": true, - "C_Cpp_Runner.warningsAsError": false, - "C_Cpp_Runner.compilerArgs": [], - "C_Cpp_Runner.linkerArgs": [], - "C_Cpp_Runner.includePaths": [], - "C_Cpp_Runner.includeSearch": [ - "*", - "**/*" - ], - "C_Cpp_Runner.excludeSearch": [ - "**/build", - "**/build/**", - "**/.*", - "**/.*/**", - "**/.vscode", - "**/.vscode/**" - ], - "C_Cpp_Runner.useAddressSanitizer": false, - "C_Cpp_Runner.useUndefinedSanitizer": false, - "C_Cpp_Runner.useLeakSanitizer": false, - "C_Cpp_Runner.showCompilationTime": false, - "C_Cpp_Runner.useLinkTimeOptimization": false, - "C_Cpp_Runner.msvcSecureNoWarnings": false, - "files.associations": { - "minishell.h": "c", - "ast.h": "c", - "env.h": "c" - } - } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 4ede37a..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "tasks": [ - { - "type": "cppbuild", - "label": "C/C++: clang build active file", - "command": "/usr/bin/clang", - "args": [ - "-fcolor-diagnostics", - "-fansi-escape-codes", - "-g", - "${file}", - "-o", - "${fileDirname}/${fileBasenameNoExtension}" - ], - "options": { - "cwd": "${fileDirname}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "detail": "Task generated by Debugger." - } - ], - "version": "2.0.0" -} \ No newline at end of file diff --git a/Makefile b/Makefile index 243e9fc..9cfa670 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ SRC := main.c debug_tools.c init.c signal_handling.c repl.c new_token.c \ parse_cmd.c collect_redirs.c print_ast.c interpreter.c env.c \ get_cmd_path.c env_to_strlst.c execute_cmd.c format_string.c \ builtins_part_one.c builtins_part_two.c env_tools.c error.c \ - read_heredoc.c create_files.c + read_heredoc.c create_files.c builtins_part_three.c handle_redir.c OBJ_DIR := _obj OBJ := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o)) @@ -64,7 +64,9 @@ debug: CFLAGS += -g debug: CFLAGS += -fsanitize=address -fsanitize=undefined \ -fno-sanitize-recover=all -fsanitize=float-divide-by-zero \ -fsanitize=float-cast-overflow -fno-sanitize=null \ - -fno-sanitize=alignment + -fno-sanitize=alignment -fno-sanitize=object-size \ + -fno-sanitize=vptr -fno-sanitize=return -fno-sanitize=signed-integer-overflow \ + -fno-sanitize=bounds -fno-sanitize=pointer-subtract -fno-sanitize=pointer-compare debug: CFLAGS += -DDEBUG=1 debug: clean all diff --git a/garbage b/garbage deleted file mode 100644 index 07f44dc..0000000 --- a/garbage +++ /dev/null @@ -1,1183 +0,0 @@ -_=/Users/chuhlig/Desktop/merged_minishell/minishell/./minishell -TERM=xterm-256color -USER_ZDOTDIR=/Users/chuhlig -ZDOTDIR=/Users/chuhlig -VSCODE_INJECTION=1 -VSCODE_GIT_IPC_HANDLE=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/vscode-git-e47956ed09.sock -VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js -VSCODE_GIT_ASKPASS_EXTRA_ARGS= -VSCODE_GIT_ASKPASS_NODE=/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) -GIT_ASKPASS=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh -COLORTERM=truecolor -LANG=en_US.UTF-8 -TERM_PROGRAM_VERSION=1.95.3 -TERM_PROGRAM=vscode -OLDPWD=/Users/chuhlig/Desktop/merged_minishell -PWD=/Users/chuhlig/Desktop/merged_minishell/minishell -SHLVL=1 -ORIGINAL_XDG_CURRENT_DESKTOP=undefined -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -__CF_USER_TEXT_ENCODING=0x1928E:0x0:0x2 -SHELL=/bin/zsh -HOME=/Users/chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.ECcBYJZkxn/Listeners -LOGNAME=chuhlig -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Users/chuhlig/goinfre/.brew/bin -MallocNanoZone=0 -USER=chuhlig -_=/Users/chuhlig/Desktop/merged_minishell/minishell/./minishell -TERM=xterm-256color -USER_ZDOTDIR=/Users/chuhlig -ZDOTDIR=/Users/chuhlig -VSCODE_INJECTION=1 -VSCODE_GIT_IPC_HANDLE=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/vscode-git-e47956ed09.sock -VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js -VSCODE_GIT_ASKPASS_EXTRA_ARGS= -VSCODE_GIT_ASKPASS_NODE=/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) -GIT_ASKPASS=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh -COLORTERM=truecolor -LANG=en_US.UTF-8 -TERM_PROGRAM_VERSION=1.95.3 -TERM_PROGRAM=vscode -OLDPWD=/Users/chuhlig/Desktop/merged_minishell -PWD=/Users/chuhlig/Desktop/merged_minishell/minishell -SHLVL=1 -ORIGINAL_XDG_CURRENT_DESKTOP=undefined -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -__CF_USER_TEXT_ENCODING=0x1928E:0x0:0x2 -SHELL=/bin/zsh -HOME=/Users/chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.ECcBYJZkxn/Listeners -LOGNAME=chuhlig -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Users/chuhlig/goinfre/.brew/bin -MallocNanoZone=0 -USER=chuhlig - - -//some test case about built in command - bash-3.2$ ls -Applications Music -Desktop Pictures -Documents francinette -Downloads getting-started -Library goinfre -Movies setup_docker_environment -bash-3.2$ pwd -/Users/chuhlig -bash-3.2$ ls | cd / | ls -Applications Music -Desktop Pictures -Documents francinette -Downloads getting-started -Library goinfre -Movies setup_docker_environment -bash-3.2$ pwd -/Users/chuhlig -bash-3.2$ env -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ export test=test | unset USER -bash-3.2$ env -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ env | grep test -bash-3.2$ ls | cd / | env -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ ls | cd / | env -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ ls | cd / | env -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ ls | cd / | env | cd / -bash-3.2$ pwd -/Users/chuhlig -bash-3.2$ ls | cd / | env | cd ~ -bash-3.2$ ls | cd / | env | cd - -bash: cd: OLDPWD not set -bash-3.2$ ls | cd - | env -bash: cd: OLDPWD not set -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ -bash-3.2$ ls | cd - | env -bash: cd: OLDPWD not set -TERM_PROGRAM=iTerm.app -TERM=xterm-256color -SHELL=/bin/zsh -TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ -TERM_PROGRAM_VERSION=3.5.10 -TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -USER=chuhlig -SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners -__CF_USER_TEXT_ENCODING=0x0:0:0 -TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF -TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo -PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities -PWD=/Users/chuhlig -LANG=en_US.UTF-8 -ITERM_PROFILE=Default -XPC_FLAGS=0x0 -XPC_SERVICE_NAME=0 -SHLVL=2 -HOME=/Users/chuhlig -COLORFGBG=7;0 -LC_TERMINAL_VERSION=3.5.10 -ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 -LOGNAME=chuhlig -LC_TERMINAL=iTerm2 -COLORTERM=truecolor -_=/usr/bin/env -bash-3.2$ - - -////////////////////////////////////////////////////////////////// - -static int handle_redirections(t_redirection *redirs) { - if (redirs[0].type == INPUT_LIMITER) { - int pipe_fds[2]; - if (pipe(pipe_fds) == -1) { - perror("pipe"); - return -1; - } - write(pipe_fds[1], redirs[0].specifier, strlen(redirs[0].specifier)); - close(pipe_fds[1]); - dup2(pipe_fds[0], STDIN_FILENO); - close(pipe_fds[0]); - } else if (redirs[0].type == INPUT_FILE) { - int fd = open(redirs[0].specifier, O_RDONLY); - if (fd == -1) { - perror(redirs[0].specifier); - return -1; - } - dup2(fd, STDIN_FILENO); - close(fd); - } - - if (redirs[1].type == OUTPUT_OVERRIDE) { - int fd = open(redirs[1].specifier, O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (fd == -1) { - perror(redirs[1].specifier); - return -1; - } - dup2(fd, STDOUT_FILENO); - close(fd); - } else if (redirs[1].type == OUTPUT_APPEND) { - int fd = open(redirs[1].specifier, O_WRONLY | O_CREAT | O_APPEND, 0644); - if (fd == -1) { - perror(redirs[1].specifier); - return -1; - } - dup2(fd, STDOUT_FILENO); - close(fd); - } - return 0; -} - -static int eval_rec(t_node *node, t_env **env, int in_fd) { - pid_t pid; - int p[2], result; - - if (node->type == PIPE_NODE) { - pipe(p); - pid = fork(); - if (pid == 0) { - close(p[0]); - dup2(in_fd, STDIN_FILENO); - dup2(p[1], STDOUT_FILENO); - result = eval_rec(node->content.pipe.left, env, in_fd); - exit(result); - } else { - close(p[1]); - dup2(p[0], STDIN_FILENO); - result = eval_rec(node->content.pipe.right, env, p[0]); - } - } else if (node->type == CMD_NODE) { - result = execute_cmd(&node->content.cmd, env); - } else { - panic("UNREACHABLE"); - result = EXIT_FAILURE; - } - return result; -} - -int eval(t_node *node, t_env **env) { - return eval_rec(node, env, STDIN_FILENO); -} - -int execute_cmd(t_cmd *cmd, t_env **env) { - if (handle_redirections(cmd->redirs) == -1) { - return EXIT_FAILURE; - } - - if (is_builtin(cmd->args[0])) { - return execute_builtin(cmd->args, env); - } else { - pid_t pid = fork(); - if (pid == 0) { - char *cmd_path = get_cmd_path(cmd->args[0], *env); - if (!cmd_path) { - fprintf(stderr, "%s: command not found\n", cmd->args[0]); - exit(EXIT_FAILURE); - } - execve(cmd_path, cmd->args, env_to_strlst(*env)); - perror("execve"); - exit(EXIT_FAILURE); - } else { - int status; - waitpid(pid, &status, 0); - return WEXITSTATUS(status); - } - } -} -have to update env list/tokenlist order or update the existing code to handle the order of the tokenlist/env list - -echo "Hello" | grep H this works - -also more to do on heredoc - -and for the for part of domenic removing the " ' frome the string -beside - - - -t_redirection *collect_redirs(t_token **tokens) -{ - t_redirection *result; - t_token *cur; - - cur = *tokens; - result = malloc(sizeof(t_redirection) * 2); - if (result == NULL) - return (free_tokens(*tokens), NULL); - set_redir(&result[0], 0, NULL); - set_redir(&result[1], 0, NULL); - while (cur != NULL && cur->next != NULL) - { - if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN) - collect_and_check_redir(result, &cur); - else if (cur->type == REDIR_TOKEN) - return (free(result), NULL); - else - cur = cur->next; - } - if (cur && cur->type == REDIR_TOKEN) - return (free(result), NULL); - return (result); -} - -static void collect_and_check_redir(t_redirection *result, t_token **cur) -{ - char *heredoc_data; - t_token *next_token; - - heredoc_data = NULL; - if ((*cur)->content.redir_type == INPUT_LIMITER) - { - // Handle Here Document (<<) - heredoc_data = read_heredoc((*cur)->next->content.string); - if (!heredoc_data) - { - perror("Heredoc allocation failed"); - return ; - } - set_redir(&result[0], INPUT_LIMITER, heredoc_data); - } - else if ((*cur)->content.redir_type == INPUT_FILE) - { - // Handle Input File (<) - set_redir(&result[0], INPUT_FILE, ft_strdup((*cur)->next->content.string)); - } - else if ((*cur)->content.redir_type == OUTPUT_OVERRIDE) - { - // Handle Output File Overwrite (>) - set_redir(&result[1], OUTPUT_OVERRIDE, ft_strdup((*cur)->next->content.string)); - } - else if ((*cur)->content.redir_type == OUTPUT_APPEND) - { - // Handle Output File Append (>>) - set_redir(&result[1], OUTPUT_APPEND, ft_strdup((*cur)->next->content.string)); - } - else - { - // Handle unexpected cases - printf("Unknown redirection type encountered\n"); - } - // Advance the token pointer to skip the redirection token and its argument - next_token = (*cur)->next; - free_token_and_connect(*cur); // Free the current redirection token - if (next_token) - { - *cur = next_token->next; // Move to the next token after the argument - } - else - { - *cur = NULL; // No more tokens - } -} - -collect args apassen x -alsso fur arg x -muss in rpl parse x -und in parse cmd collect args and x - -format args seems to work later test x - - -Test 1: ✅ echo hello world -Test 2: ✅ echo "hello world" -Test 3: ✅ echo 'hello world' -Test 4: ✅ echo hello'world' -Test 5: ✅ echo hello""world -Test 6: ✅ echo '' -Test 7: ✅ echo "$PWD" -Test 8: ✅ echo '$PWD' - -format_string problem -Test 9: ❌ echo "aspas ->'" -mini output = (aspas ->") -bash output = (aspas ->') -Test 10: ❌ echo "aspas -> ' " -mini output = (aspas -> ") -bash output = (aspas -> ' ) -Test 11: ✅ echo 'aspas ->"' -Test 12: ✅ echo 'aspas -> " ' -Test 13: ❌ echo "> >> < * ? [ ] | ; [ ] || && ( ) & # $ <<" -mini output = (> >> < README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards ? [ ] | ; [ ] || && ( ) & # ) -bash output = (> >> < README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards ? [ ] | ; [ ] || && ( ) & # $ <<) -Test 14: ✅ echo '> >> < * ? [ ] | ; [ ] || && ( ) & # $ <<' -Test 15: ❌ echo "exit_code ->$? user ->$USER home -> $HOME" -mini output = (exit_code ->/Users/chuhlig) -bash output = (exit_code ->0 user ->chuhlig home -> /Users/chuhlig) -Test 16: ✅ echo 'exit_code ->$? user ->$USER home -> $HOME' -Test 17: ❌ echo "$" -mini output = (0) -bash output = ($) -Test 18: ✅ echo '$' -Test 19: ❌ echo $ -mini output = (0) -bash output = ($) -Test 20: ✅ echo $? -Test 21: ❌ echo $?HELLO -mini output = () -bash output = (0HELLO) -Test 22: ✅ pwd -Test 23: ✅ pwd oi - -Test 24: ❌ export hello //stupid -mini exit code = 1 -bash exit code = 0 -Test 25: ✅ export HELLO=123 -Test 26: ✅⚠️ export A- -mini error = () -bash error = ( not a valid identifier) - fucking extra function for identifier - -Test 27: ❌ export HELLO=123 A -mini exit code = 1 -bash exit code = 0 -auch dum -Test 28: ✅ export HELLO="123 A-" -Test 29: ❌ export hello world -mini exit code = 1 -bash exit code = 0 -Test 30: ❌ export HELLO-=123 -mini exit code = 0 -bash exit code = 1 -mini error = () -bash error = ( not a valid identifier) -Test 31: ❌ export = -mini exit code = 0 -bash exit code = 1 -mini error = () -bash error = ( not a valid identifier) -Test 32: ✅⚠️ export 123 -mini error = () -bash error = ( not a valid identifier) -Test 33: ✅ unset -Test 34: ✅ unset HELLO -Test 35: ✅ unset HELLO1 HELLO2 -Test 36: ✅ unset HOME -Test 37: ✅ unset PATH -Test 38: ✅ unset SHELL - - -Test 39: ❌ cd $PWD -mini exit code = 139 -bash exit code = 0 -Test 40: ❌ cd $PWD hi -mini exit code = 139 -bash exit code = 0 -Test 41: ❌ cd 123123 -mini exit code = 139 -bash exit code = 1 -mini error = () -bash error = ( No such file or directory) - -Test 42: ✅ exit 123 -Test 43: ✅ exit 298 -Test 44: ✅ exit +100 -Test 45: ✅ exit "+100" -Test 46: ✅ exit +"100" -Test 47: ✅ exit -100 -Test 48: ✅ exit "-100" -Test 49: ✅ exit -"100" - -needs a update -Test 50: ❌ exit hello -mini exit code = 0 -bash exit code = 255 -mini error = () -bash error = ( numeric argument required) - -edge case -Test 51: ❌ exit 42 world -mini exit code = 42 -bash exit code = 1 -mini error = () -bash error = ( too many arguments) -Test 52: ✅ -———————————— pipes -Test 53: ❌ env | sort | grep -v SHLVL | grep -v ^_ -mini output = (?=0 COLORTERM=truecolor GIT_ASKPASS=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh HOME=/Users/chuhlig LANG=en_US.UTF-8 LOGNAME=chuhlig MallocNanoZone=0 ORIGINAL_XDG_CURRENT_DESKTOP=undefined PATH=/Users/chuhlig/goinfre/.brew/bin:/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Users/chuhlig/goinfre/.brew/bin:/Users/chuhlig/Library/Application Support/Code/User/globalStorage/github.copilot-chat/debugCommand PWD=/Users/chuhlig/Desktop/minishell/minishell_tester SHELL=/bin/zsh SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.8vcs8lnaog/Listeners TERM=xterm-256color TERM_PROGRAM=vscode TERM_PROGRAM_VERSION=1.96.2 TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ USER=chuhlig USER_ZDOTDIR=/Users/chuhlig VSCODE_GIT_ASKPASS_EXTRA_ARGS= VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js VSCODE_GIT_ASKPASS_NODE=/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) VSCODE_GIT_IPC_HANDLE=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/vscode-git-a7f217e79d.sock VSCODE_INJECTION=1 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZDOTDIR=/Users/chuhlig) -bash output = (COLORTERM=truecolor GIT_ASKPASS=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh HOME=/Users/chuhlig LANG=en_US.UTF-8 LOGNAME=chuhlig MallocNanoZone=0 ORIGINAL_XDG_CURRENT_DESKTOP=undefined PATH=/Users/chuhlig/goinfre/.brew/bin:/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Users/chuhlig/goinfre/.brew/bin:/Users/chuhlig/Library/Application Support/Code/User/globalStorage/github.copilot-chat/debugCommand PWD=/Users/chuhlig/Desktop/minishell/minishell_tester SHELL=/bin/zsh SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.8vcs8lnaog/Listeners TERM=xterm-256color TERM_PROGRAM=vscode TERM_PROGRAM_VERSION=1.96.2 TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ USER=chuhlig USER_ZDOTDIR=/Users/chuhlig VSCODE_GIT_ASKPASS_EXTRA_ARGS= VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js VSCODE_GIT_ASKPASS_NODE=/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) VSCODE_GIT_IPC_HANDLE=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/vscode-git-a7f217e79d.sock VSCODE_INJECTION=1 XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 ZDOTDIR=/Users/chuhlig) -Test 54: ✅ cat ./test_files/infile_big | grep oi -Test 55: ✅ cat minishell.h | grep ");"$ -Test 56: ✅ export GHOST=123 | env | grep GHOST -———————————— redirects -Test 57: ✅ grep hi <./test_files/infile -Test 58: ✅ grep hi "./outfiles/outfile01 -Test 82: ✅ ls > ./outfiles/outfile01 -Test 83: ✅ echo hi > ./outfiles/outfile01 bye - - -check this extra - -Test 84: ❌ ls >./outfiles/outfile01 >./outfiles/outfile02 -Only in ./bash_outfiles: outfile01 -mini outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -bash outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -Test 85: ❌ ls >./outfiles/outfile01 >./test_files/invalid_permission -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -Test 86: ❌ ls >"./outfiles/outfile with spaces" -Only in ./bash_outfiles: outfile with spaces -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -mini exit code = 1 -bash exit code = 0 -mini error = ( No such file or directory) -bash error = () -Test 87: ❌ ls >"./outfiles/outfile""1""2""3""4""5" -Only in ./bash_outfiles: outfile12345 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -mini exit code = 1 -bash exit code = 0 -mini error = ( No such file or directory) -bash error = () -Test 88: ❌ ls >"./outfiles/outfile01" >./test_files/invalid_permission >"./outfiles/outfile02" -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -mini error = ( No such file or directory) -bash error = ( Permission denied) -Test 89: ✅ ls >./test_files/invalid_permission >"./outfiles/outfile01" >./test_files/invalid_permission -Test 90: ❌ cat <"./test_files/infile" >"./outfiles/outfile01" -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -hi -hello -world -42 -mini exit code = 1 -bash exit code = 0 -mini error = ( No such file or directory) -bash error = () -Test 91: ✅ echo hi >./outfiles/outfile01 | echo bye -Test 92: ❌ echo hi >./outfiles/outfile01 >./outfiles/outfile02 | echo bye -Only in ./bash_outfiles: outfile01 -mini outfiles: -hi -bash outfiles: -hi -Test 93: ✅ echo hi | echo >./outfiles/outfile01 bye -Test 94: ❌ echo hi | echo bye >./outfiles/outfile01 >./outfiles/outfile02 -Only in ./bash_outfiles: outfile01 -mini outfiles: -bye -bash outfiles: -bye -Test 95: ✅ echo hi >./outfiles/outfile01 | echo bye >./outfiles/outfile02 -Test 96: ❌ echo hi >./outfiles/outfile01 >./test_files/invalid_permission | echo bye -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -Test 97: ✅ echo hi >./test_files/invalid_permission | echo bye -Test 98: ❌ echo hi >./test_files/invalid_permission >./outfiles/outfile01 | echo bye -Only in ./mini_outfiles: outfile01 -mini outfiles: -hi -bash outfiles: -cat: ./bash_outfiles/*: No such file or directory -mini error = () -bash error = ( Permission denied) -Test 99: ✅ echo hi | echo bye >./test_files/invalid_permission -Test 100: ❌ echo hi | >./outfiles/outfile01 echo bye >./test_files/invalid_permission -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -mini exit code = 139 -bash exit code = 1 -mini error = () -bash error = ( Permission denied) - -update for this. - -Test 101: ❌ echo hi | echo bye >./test_files/invalid_permission >./outfiles/outfile01 -Only in ./mini_outfiles: outfile01 -mini outfiles: -bye -bash outfiles: -cat: ./bash_outfiles/*: No such file or directory -mini exit code = 0 -bash exit code = 1 -mini error = () -bash error = ( Permission denied) -Test 102: ✅⚠️ cat <"./test_files/infile" >./test_files/invalid_permission -mini error = ( No such file or directory) -bash error = ( Permission denied) -Test 103: ✅⚠️ cat >./test_files/invalid_permission <"./test_files/infile" -mini error = ( No such file or directory) -bash error = ( Permission denied) -Test 104: ✅ cat ./outfiles/outfile01 -Test 105: ❌ cat >./outfiles/outfile01 ./test_files/invalid_permission -Test 107: ✅⚠️ cat >./test_files/invalid_permission ./outfiles/outfile01 ./test_files/invalid_permission -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -Test 109: ✅ ls >>./outfiles/outfile01 -Test 110: ✅ ls >> ./outfiles/outfile01 -Test 111: ✅ ls >>./outfiles/outfile01 >./outfiles/outfile01 -Test 112: ✅ ls >./outfiles/outfile01 >>./outfiles/outfile01 -Test 113: ❌ ls >./outfiles/outfile01 >>./outfiles/outfile01 >./outfiles/outfile02 -Only in ./bash_outfiles: outfile01 -mini outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -bash outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -Test 114: ❌ ls >>./outfiles/outfile01 >>./outfiles/outfile02 -Only in ./bash_outfiles: outfile01 -mini outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -bash outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -Test 115: ✅ ls >>./test_files/invalid_permission -Test 116: ❌ ls >>./test_files/invalid_permission >>./outfiles/outfile01 -Only in ./mini_outfiles: outfile01 -mini outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -bash outfiles: -cat: ./bash_outfiles/*: No such file or directory -mini exit code = 0 -bash exit code = 1 -mini error = () -bash error = ( Permission denied) -Test 117: ❌ ls >>./outfiles/outfile01 >>./test_files/invalid_permission -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -Test 118: ❌ ls >./outfiles/outfile01 >>./test_files/invalid_permission >>./outfiles/outfile02 -Only in ./bash_outfiles: outfile01 -Only in ./mini_outfiles: outfile02 -mini outfiles: -README.md -bash.supp -bash_outfiles -bonus -bonus_bonus -builtins -extras -local.supp -loop.out -manual_tests -mini_outfiles -os_specific -outfiles -pipes -redirects -syntax -test_files -tester -wildcards -bash outfiles: -mini exit code = 0 -bash exit code = 1 -mini error = () -bash error = ( Permission denied) -Test 119: ✅ ls >./test_files/invalid_permission >>./outfiles/outfile02 -Test 120: ✅⚠️ ls >>./test_files/invalid_permission >>./outfiles/outfile02 >./outfiles/outfile01 | echo bye -Test 122: ❌ echo hi >>./outfiles/outfile01 >>./outfiles/outfile02 | echo bye -Only in ./bash_outfiles: outfile01 -mini outfiles: -hi -bash outfiles: -hi -Test 123: ✅ echo hi | echo >>./outfiles/outfile01 bye -Test 124: ❌ echo hi | echo bye >>./outfiles/outfile01 >>./outfiles/outfile02 -Only in ./bash_outfiles: outfile01 -mini outfiles: -bye -bash outfiles: -bye -Test 125: ✅ echo hi >>./outfiles/outfile01 | echo bye >>./outfiles/outfile02 -Test 126: ✅ echo hi >>./test_files/invalid_permission | echo bye -Test 127: ❌ echo hi >>./test_files/invalid_permission >./outfiles/outfile01 | echo bye -Only in ./mini_outfiles: outfile01 -mini outfiles: -hi -bash outfiles: -cat: ./bash_outfiles/*: No such file or directory -mini error = () -bash error = ( Permission denied) -Test 128: ✅ echo hi | echo bye >>./test_files/invalid_permission -Test 129: ❌ echo hi | echo >>./outfiles/outfile01 bye >./test_files/invalid_permission -Only in ./bash_outfiles: outfile01 -mini outfiles: -cat: ./mini_outfiles/*: No such file or directory -bash outfiles: -Test 130: ✅ cat ./outfiles/outfile -Test 131: ✅ cat +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 11:48:27 by dkaiser #+# #+# */ -/* Updated: 2025/01/16 18:26:30 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 19:28:51 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ -#include "debug_tools.h" -#include "stdlib.h" +#ifndef AST_H +# define AST_H +# include "debug_tools.h" +# include "stdlib.h" enum e_node_type { @@ -67,3 +69,5 @@ t_node *new_cmd_node(char **args, t_redirection redirs[2], t_node *new_string_node(char *string); void free_node(t_node *node); + +#endif \ No newline at end of file diff --git a/include/debug_tools.h b/include/debug_tools.h index 4a7ff10..6c4bc29 100644 --- a/include/debug_tools.h +++ b/include/debug_tools.h @@ -3,15 +3,17 @@ /* ::: :::::::: */ /* debug_tools.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: dkaiser +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 18:34:37 by dkaiser #+# #+# */ -/* Updated: 2024/06/28 15:05:12 by dkaiser ### ########.fr */ +/* Updated: 2025/01/19 21:08:15 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef DEBUG_TOOLS_H # define DEBUG_TOOLS_H +# include +# include "debug_tools.h" # include "libft.h" @@ -22,4 +24,9 @@ void dbg(char *str); void panic(char *msg); + + +void dbg2(const char *format, ...); + + #endif diff --git a/include/env.h b/include/env.h index 0c45aef..3fc83b7 100644 --- a/include/env.h +++ b/include/env.h @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/08 16:53:39 by dkaiser #+# #+# */ -/* Updated: 2025/01/14 16:50:55 by chuhlig ### ########.fr */ +/* Updated: 2025/01/18 18:43:07 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,5 +37,6 @@ int cd(t_env **env, char **args); int ft_env(t_env *env); int builtin_exit(char **args, t_env **env); t_env *env_new(char *name); +t_env *check_existing(t_env *env, char *av); #endif \ No newline at end of file diff --git a/include/minishell.h b/include/minishell.h index ee42c79..7a573e8 100644 --- a/include/minishell.h +++ b/include/minishell.h @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/22 17:14:49 by dkaiser #+# #+# */ -/* Updated: 2025/01/16 18:38:44 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 19:30:43 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,11 +41,20 @@ void print_ast(t_node *ast); int eval(t_node *node, t_env **env); char *get_cmd_path(char *cmd, t_env *env, int *return_code); int execute_cmd(t_cmd *cmd, t_env **env); -char *format_string(char *str, t_env *env); +char *format_string(char *str, t_env *env, int is_literal); int set_return_code(int return_code, t_env **env); int handle_redirections(t_redirection *redirs); void *error(int err_code, char *err_text, int exit_code, int *ret_code); char *read_heredoc(char *delimiter); -void create_files(t_list *files); +int handle_input_redirection(t_redirection *redir); +int handle_output_redirection(t_redirection *redir); +int handle_redirections(t_redirection *redirs); +int handle_pipe_parent(int p[2], t_node *node, t_env **env); +int handle_pipe_child(int p[2], t_node *node, + t_env **env, int in_fd); +int open_file(char *path, int flags, int mode); +int eval_rec(t_node *node, t_env **env, int in_fd); +void create_files(t_list *files); + #endif diff --git a/include/token.h b/include/token.h index 54a65f2..993a408 100644 --- a/include/token.h +++ b/include/token.h @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 13:27:18 by dkaiser #+# #+# */ -/* Updated: 2024/08/29 15:26:23 by dkaiser ### ########.fr */ +/* Updated: 2025/01/20 12:37:59 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,5 +49,6 @@ void free_token_and_connect(t_token *token); void free_tokens(t_token *tokens); void tokenizer(char *s, t_token **token_list, char quote_check); +void print_token(t_token *token); #endif diff --git a/lib/libft/_obj/ft_atoi.o b/lib/libft/_obj/ft_atoi.o new file mode 100644 index 0000000000000000000000000000000000000000..efcdc0d9f99ea9b42ccdff1f17411eebd44581be GIT binary patch literal 932 zcma)4OG^S#6uwjDqpWLSRM0{w+C)&%qIMH?VHODy1#RLYrWm0`Oe8@Nh~bN9(V|+k zcGoUig%ISjZGRw0Gnj=7ap821-qDdE=)iZ+`@7#f-s?XN2O&}~fdgOzJY(PkfQnenrWqb zUDvyBnWf1Q7y&)d(mRur7Wx^QbajzILP~hd7nH0Yly8Ib#o%Tq1}oOOrao>fQ<|xMk4q^HW&m!2$8H2wXhHi zYdbr!5=BVtZ2bYFffZ7UMb>+h*|=d5yl`gj^URsqefj>ZcnP7+1QtLG;0~Q20Bis- ziSZv+?Sak}j>dGE z+}vH;T#<5a)>&UtJVBKVfe_Sk28${+Is2uIC*jFbSAl7&pKZH#q*u5_x=(8BDRt;XxCCzl68cDNsTDw9S9_mA|o5$rR zl%P!gr>@V_qv~{Tk+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%SOFEk0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjO7evfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw$ z%29yPOc1v;0BNXGfh+`wk5A2rPb*5yO@)ZX$D_J01FF;kMnlbmav8W87+^}kLPkJR z0*JwO@pCb-0Wk=GECq>oK;1C|Nb>;sK>Z8>K#UAPdZBJb7AA@v>e2bsqqFvhM`!5= zkK?W{K$<+dU0--uyMEwrmWS|ucy#-|IL5*Okzobd<0x8X%P@>zQ?`{QG^C4%SiF6To;xY(R9#i6xRDOGchr|ae8qw=BF zn;Y>n=4~;S@G^$*E|*|gH5@CCv7cMe`C6{zMj5St?^l(=HDM+5#L_rXA=b<*z#I^s zWsXq-;NU|!e+mNK+Qu`)8U$XYyYl)y!@Z=wfaej88Jq4hm1zbNKGV1FHp6F`~pz@ ziX#5Ml$lDM4XsZmq%Q+Td3q6y_f2yeJ~0h8A>v>;V8ib==t<{2eb97k71E_#u~>1! Ij1x(sZ)1{L9smFU literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_isalnum.o b/lib/libft/_obj/ft_isalnum.o new file mode 100644 index 0000000000000000000000000000000000000000..3aecc5809db9f40d3b261eb225f1781f34740fdf GIT binary patch literal 704 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%H~)KfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1; z%29yQ7EBPg%mC6*rvh0B5FekK5ua9+n41a_i;qWjUjtOB1C)+{ng``Fa5FGuz}O(# z2#6(s7;G0m7Xup*g8;}4W1(p-=-0OLDO;Q#;t literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_isalpha.o b/lib/libft/_obj/ft_isalpha.o new file mode 100644 index 0000000000000000000000000000000000000000..da20b0195bfc3228a1611cc01e4a7ae55c359431 GIT binary patch literal 680 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%SOFEk0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjO7kxfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw$ z%29yPOc1v;0BNXGfh+`wk5A2rPb*5yO@)ZX$D_J01FF;kMnlbmav8W87+^}kLPkJR z0*JwO@pCb-0Wk=GECq>oK;1C|NDBb@K>Z8>K#UAPdZBJb7AA@v>e2bMv-U@G?GH!( z9+1^QRuq4q2!xf$-y;TLRq^-p09nUf|A1_I35qfx8%Q#AyZ(ti3}S!*G+r>A12PZ< z7^{L97%K!A1$fvwCID5b0L5g0xZ*zqz~Ys`kx!tF$(ff8qzMXu%Gp2$^CO!cpH>o| NS)7+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;n{P0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAaI8fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw# z%29yQ0!$FM6aZuUrh)*j@%uR)e#mA$%F9NF60ZJP{&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW22-jt(F#0OSMpGXwxJG63m?x)oWND0Zkv=hM#GAI-Ht z82EcYk=R)KqX9_q_woSAv_T#K literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_isdigit.o b/lib/libft/_obj/ft_isdigit.o new file mode 100644 index 0000000000000000000000000000000000000000..a0e0f40d01b86d5d7227538c36481efb8e07fb54 GIT binary patch literal 664 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;n{P0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAaaEfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw# z%29yQ0!$FM6aZuUrh)*j@%uR)e#mA$%F9NF60ZJP{&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW22-jt(F#0OSMpGXwxJG63m?x)oWND0Zkv=hM#GAI-Ht z4ETG*fLeeoOa6WyAnUm6ACRdpLD2(b14)K%*FUj`K@2#6#sh}+B2X2KRY44l6#|R` zJnS43fT~o0;xa(o@gD+U@yOuFC(y>^%*zHh8SE!Ekiq=OrpKq1#Ag<#WTt0=Qwad2 CK0yZn literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_isprint.o b/lib/libft/_obj/ft_isprint.o new file mode 100644 index 0000000000000000000000000000000000000000..8cf5033396fa25d36dbe5e96031092dc2714b779 GIT binary patch literal 664 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;n{P0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAaaEfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw# z%29yQ0!$FM6aZuUrh)*j@%uR)e#mA$%F9NF60ZJP{&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW22-jt(F#0OSMpGXwxJG63m?x)oWND0Zkv=hM#GAI-Ht z6!?3@fLeg8I{tnhAnUm6ACRdpLD2(b14)K%*FUj`K@2#6#sh}+B2X2KRY44l6#|R` zJnS43fT~o0;xa(o@gD+U@yOuFC(y>^%*zHh8SE!Ekiq=OrpKq1#Ag;46lLatQwadc C8bMe9 literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_isspace.o b/lib/libft/_obj/ft_isspace.o new file mode 100644 index 0000000000000000000000000000000000000000..f6f10e860277ee65a0d1ac430feea0775bced21b GIT binary patch literal 672 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%SO68j0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAaF7fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw! z%29yQ5=;=cQ~+tHQ-Lf5h>uUrh)*j@%uR)e#mA$%F9E950ZLmy&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW1~+jtM|o0LTaGX9xgdWB}3&bt|$kQS4BU&ZiC?wZHlI zx&Chcp}^n53)BYTaPqhE06E89|9}jC35q2k8%Q#AyZ(ti3}PSvG(Iq#Ap%vxSQW&; zSRueDz{Acl0jNp^C@urU4gVnk7M~1`d;)Du&b(|0qd|US0~ySZY#4_zeXs`$MH=uDo?)9bq4`mC)gmki8>P!q z=(Ybr|Acz78g0C_NAV^^NI);L;3}c(H@k1!NDVk-cIKP+%{TKl$-(dMN25fEGlT~` z3E$-;1BYFP&oUlj4@aVdPl^*`Xc9Z?vPo$c*Uc!8@RE42bb{k-Rq3!E?=p)=sF9=> zF^8j+Mx(Y?FiiQR{;X18mh#^G;Q3m-k1FaAVV%WTk4SAE5u_}ZW$96&R*doA`yDF1 zEv2`k^c1A?MCCZ=cpH8R9=2)cC22XNz4w%Xi!)=P zv!5Iz+wwr+FO{qNG#wT;PYT%{_l4Ew46=Bzy*I793tczYvEKzwuA>`2Hj*>0@V4LZ zOZgc%!s~qqf*_pc2p`ec?f02{tE5deS(Nxbj^($7$H=yPtTK+QE&BX=dh>C0^DHuG zZf^&JV|i7hV-Uw)P>DZ}Es@ zYe(6suk27UYD3QFRL9LB=NDCf;`x0_tfv#{@zJp@^jt@sZe3en-2Cr}p?KugX171(6C}$UTPT9J8UJ({m* zlhS7<7VPqXQ?Cj&0&}UtQ>yHj@7zKyNTB&10L+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%=zxmffU1GtHx zttf%8A^Z^6h!6xH#?pW?K<0tm0tYM%4RAJ)5g(tNpIeZaToPZJSDu-d5+Cp5f-Da+ zM*$|t1aV6OkcK)H$U=bl_|%N}w4%h^RESu7JgWOVph_K}v;x#TD3^hofguCN2GK@9 zECIw|yZE^n*nk)WK$e2UGobFM0Ma5rK2SeH01zVskY1=;k%ft3hkA5A_2{hq;n7+8 z!K2&thetPqN4M_>k4{GpAQvd)3zTAvJq$Ap8eSOIf!qcHj8#Dlj1>Zm0zB*-6M(8z zfMPO0JmWtEz`~oskx!tF$(ff8qzMXu%Gp2$^CO!cpH>o|Q(Tgmk^&6&{5(+7005Og BLwx`M literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_lstclear_bonus.o b/lib/libft/_obj/ft_lstclear_bonus.o new file mode 100644 index 0000000000000000000000000000000000000000..cbf23d799a3ef7904ebcea23ab07a91f51bbf395 GIT binary patch literal 780 zcma)4Jxjw-6uqg^7C+h!4hjw##LdO2V?_&ZP!OrmMINP1t6lH-&WF?&#LKayVS6Ph}J*nyOzS7up|A%rD>vCsF_!RdB8s_ zJw4$_-Wwts|Bv2P-m7xoP34^pmDd@lZholTETu2Du-*5% zq`Z6|vaehxiOh14K`56*s;9bV(49e_4@6y$>)#$nqtWloP~CG4DfiCYyY;0k@;&9s z$C){i#>oyDPR7X0B$8LCT0)%fBZpJi!vBHRQkl!x`fObG?SoOi!f(UOVQ?IvG%sQ) ZaKy!rShaQi$S&8dQaf}iR=w4<=o|LjZTtWL literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_lstdelone_bonus.o b/lib/libft/_obj/ft_lstdelone_bonus.o new file mode 100644 index 0000000000000000000000000000000000000000..c35769905f2d0c03158b172f0c77cc061826228e GIT binary patch literal 688 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;e>O0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjHM4{fXoBAC4&j#E+D4?rUpdE$0z6K79=K@#FyrkXXd5E$NRV- z%NsyB3Q(E@Xb#9N1u*j%7=SDUh>uUrh)*j@%uR)e#mA$%F95340ZMB?&4Y3oxPeZE zu|c#E5K90tI9T|(7}$Uq1VEO8#4CUd5PJrY0P%tP8DMq*nP33Y3&T($qNz}i&Zi#D zZv;F#YkzojmVWT)b_HVJA0FM7|1SVJK*8fLK&E*#9}$Q>3^x}V{$OXr1%V6^D2K5s zh=H*}fKh;lonrz}l?qT?28bv8hX7doF*x!Gv@tpJvO)E!0%@RfT@V*Yvw+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%H~|&E0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjFk#yfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1= z%29yQ4oncYECA9_rvh0B5FekK5ua9+m({GFcY{L7+_X{g^Ylt z1Q3Jm;^$&u17Z*WSqc(g0d>a?AT0po1NAcm05LKE>4mx#S(qqxs7L2hkLEW59-Xy6 zJUUB1cr@4kVBl|M1!{h247B=(hZS0W8<;z~Ry9 z`s3y0|Ns931(0N$j|jvb2AKf`&|t%Gt_W0~u_}mxu|j}RfQOx90#KC-P+SIxBY-A@ p04&}a9Qg#=n4Edpp!z@*P&pgOV18uN+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%*Z~#40aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZj1>%JfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1< z%29yQ222pQOaRhQrvh0B5FekK5ua9+n41a_i;qWjUj!m>6_Jf)Eg*!nz3h zPp&(Ag|oZmsx8w9E1ZxrSQx*zJ9F6+1Rs2P-<$W%_hz!Yzn>nTM~D(12tU9uaLr^E zK+FKkT)z>z=PQk_;Ykek<&e_0ns&saI%j;(4QkE)D8hbxmNX1Pk6}928qQJ{_A52B zV9R>7v0E)lxxNL2#`NvS?GY>O$RICg_N~X(*fP;tf`U1|u_p2cZ&o<1u5jvs zaPl3|ZgnYjGKKA+0Vq!e?NI7;g6S_KyywGNRQO2T=Uru{t`P`#qbuB%z9$^xPPnbR zAQU-<2cZX}FOjgrJ*eDzM_jc0NTvPfA`OhPqwqnld;e4q=ly;kqkMFF$UV`%&2HWB zm_exbL_NyE`X@ybN1K#rrW5J$kP;2Gu!{hrb4WcqCA>qJuR`-u#B<_a0l zD#O>t|DWMD)|31_q+(OqH&)X4tD1Z9KFJ+h?j71ytD$LO&oU2mQ884FCWD literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_lstnew_bonus.o b/lib/libft/_obj/ft_lstnew_bonus.o new file mode 100644 index 0000000000000000000000000000000000000000..98420b2011af3010b303bc4ee127551933a5f31c GIT binary patch literal 732 zcma)4Jxc>Y5S@#X1Wn8#77Bt_*xFd7jOf7@3L+5#BAXB|M97EeNrDgv1cf7wrKP1m z!A?OTcDDWj;RJ=0!9snL+fB|w@WI=8Z*FFG_wJrQKfYo_#spyjC&61576>eWY4(5M zUgcj@jrN#HOrFb-(si0{paY+^bJ?-iYEKEC$7i{U1m}Wj>l%(y7VFicLeZ6{wZ>uX zK+4UH@bkPfmWpZ2;j>)pc|=fSNa>Vi>9|mJf}E7U&(~I^85MJCp0YGeRMwi~DmV`g zUrTC=q9B7e<@^l<>nAL8i0G$nFbwY14Cnu&cZK&VI`5Y7TKzi{9X@vn&-O*9+Or3U1JQZ3_8&Mqg8E*=YmSl-d?$u+wnIkK zG|WUSeu=7OG>5h^!~0+yu;mC|_ZX808I8yeK3PLl!?o$(5B8x8^iR KRtuF%y+}VEmsQdL literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_lstsize_bonus.o b/lib/libft/_obj/ft_lstsize_bonus.o new file mode 100644 index 0000000000000000000000000000000000000000..1ce926d68d4479514b0836c7b11e11ba51dfbde6 GIT binary patch literal 704 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%H~iCfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1; z%29yQ7EBPg%mC6*rvh0B5FekK5ua9+n41a_i;qWjUjtOB1C)+{ng``Fa5FGuz}O(# z2#6(s7;G0m7Xup*g8;}+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%xB(Tv0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZj8z0>fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zElV z%29yQ0Zb6LYyi?wrvh0B5FekK5ua9+n41a_i;qWj-wdcy2Pj+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%cmWl^0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjMWHbfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zElW z%29yQ2}}^T901Z#rvh0B5FekK5ua9+n41a_i;qWj-wLQw2PoYDH4n;V;AUXRfU!Ze z5fDoNG1xACE(SIr1_6+zAn_AWciaHdJU~8BKSKZzBLk3Ls9TYRiDHL(bUyXyto`B9 zS^B}FGxUYWan}bRjmKT@fGEQQ&9!$JI$Uq_xAFnG9^I}FJgi+`@J~9};d{Hw_4W!z z{#I6?#7hH+><^D_-v|8LL^yydKS0LSU|989Ii9HMy zKn9Hv4u*F`po$o)f*2Sp1Q-Q)*f}NuRjB~QWq{ZMXdVba^)oOy@(HvtIrFkX^?@j$ XayF2`{2&4b;?qjvb5nDZa|;*%2%2X+ literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_memcpy.o b/lib/libft/_obj/ft_memcpy.o new file mode 100644 index 0000000000000000000000000000000000000000..253e17ec4d32ace0bdd3a9815670c43b1269b301 GIT binary patch literal 764 zcma)4Jxjw-6n&|s6>Uuh2L*=?t}afFiU!`GAkvD9JW5TeLu!!}t58sC#pvSbrvE}m zi$B1Q8M6rOAapDa>bcELn<9b-PVTuM@4gd~x6hBSq!8MKzypkf&m=M+Fb}R!{uj9C zg)K4Mss{*=w}?FP)R_yL9V4=~g?^&H3`ygf=}yOG-1$qHl# zGEFj=>UVdMbm<~geCf92Me7@o?v^hbeW7121-*9ABbVs4Zw$R#E=swX=UX9q_ zf2Gv}@b~`pnzP*3&US=WGc+TWoV>%-BI*lZhU@_0|033AjH}psI>F~CU_3#K_2_n0 Mbd+t`h03Y;0TY&XWdHyG literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_memmove.o b/lib/libft/_obj/ft_memmove.o new file mode 100644 index 0000000000000000000000000000000000000000..df18bef278191658922eaf3a81331a2075d193db GIT binary patch literal 824 zcma)4ze@sP82&Um-{)Wa@ zX^5uUy3r*#hrsb@(4P11JG}^@7oK~c_t*2i-|@YDe+^@dg=QE&Km>Rqk_KQ)z$V30 z%&%Fp$B&`O2&79UL``qhJnqFg?JzfqefA*<>CrA@i?FLP2N9xJHBJk~ny6PUPAbPj z?Cl2YmJHI;KZd=75`Zo16I_Z#4%@xuK&$ZO{bK zj)o4+=|A{EMzfVR{YjL1C|U3pH@p10JA!dDYw?!Dl=iaMWAjedx=Y4gCD7Ysy#I>E zzN_(~S!g3Ii)XZ+(psN7<@U_db?H=3L(aM@qV60$Q^qy+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%*Z>v30aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjO7bufXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1- z%29yQ8cYzkbO33nQ-Lf5h>uUrh)*j@%uR)e#mA$%uK=pl0ZMy7&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNPGg+9SeXo50DSk&j52XkO>ALy->G8MTn4XAk{9rgs1S-#16~w?;A;2iW!_F}Qs7eJWE(62`K*K-)7QYOR id;)Du&b(|;eIN>`oDF0!KeFlZX(jQwskz0eB@6&ni&EAA literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_printaddr.o b/lib/libft/_obj/ft_printaddr.o new file mode 100644 index 0000000000000000000000000000000000000000..64e9dea79f0b44724688bd2477493c41be035f18 GIT binary patch literal 1128 zcma)5O=}ZT6ulGEHdNC$U=;3Kw+SC z7z6zif6>0fXoOh9QD6$Td_&z-qr)0Tn;_o_pqn9RB%rI!0t&BOI_I ztW>~JfdO}6+uXPUpQSg&GeDk$lh~M#VT|W=y)4f1#oC+2vpkQ=Lwr2@9l}zMB5me( z*c;PW_uN+dtrU$p&zJM?cQI!3AWKQ)N|y4yTV1O+Jkx1!wAxK$UOfNTL|}`qsubtI zmr_EUaGj$x##u4TZhh6s1}^Gb5WW@R>*jotUnk02Y2^vdJFs+2jngQM!ArSrLkH`r z!cW0to)%yXp2>~x%W7`@H(u%BhxUKkI_Sk;m_YYuf5YuEVZ<~+?L>#YSob?8X&xf? zzuHUt>H%I-<|{m}gU+!IYsdZ^ss0E?2On{u66;5bBR?KjK7Z9vZDa=dcI{|z^FsY~ zR@Z(nR%&Z9@9srK9b!*#5N#$&BAPo#yDVM=M}99N^`V^2Ku-y?;qo*S72%W2GIiJVfmtZ0D5MCyDSA z%}>}{g=gha9s>9to|QhyJ=t^V-XZSbCz^f?4@}?3!8z}Tzg2<9+LV_4ZR8UOs_+bi kr1%i<^9-f<<1Bk-4Sz(h-fX&LHr$ry&{@T}PJ>7P0_VZ0&;S4c literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_printf.o b/lib/libft/_obj/ft_printf.o new file mode 100644 index 0000000000000000000000000000000000000000..44aedad2ebe400f57f27131ea47f073bc35f7287 GIT binary patch literal 2996 zcma)8ZD?Cn7(Us$F8e$|6sJrUh8w9E8Olb7AGB;24w6WjD-^NZW=Xr2bun~_D{3So zy)Ku_#r{~JAcKMm{+L*h!Pr>Wu|SIyjDP&KAN?aVP+5LE=VZPNpNQ+Skr)*?Up211%R;K zNeShQgxjMM?hgU@R0@Uhhz#RhRu9odbS}3~YMP)tBsI-?Gb1%!%5Z^4ba9ubc|@0+ zo8=Kbf&83sEUHP^RyQJrzfK;`AT3^(k$mMedH2#kC5Zp20`56uxidEq-JQR&4W;9_F1dsKUx#f6}~gO;QAs*1o$iJ-85!%E5J zwMpx*(j=WApMRM$Ru4b0vQ*=I+GR7^lWtuZ~{D#MTLov_z znM)q?Ok3s>m`gt5Q%&L=x6&5}!M~GiP3WH;jtQZSEMwhN~?KKrzXh&Km4_sgZ zAN4(isA*36=RClzFSpiVjUv!?Q+V?0$7Cra%Tmf@^H(zfy%v@UWL(>V$O#1zINf|c z_oTV&#}TQD!cBew$^#;7n(3XqXlx*^;TRiqS1>U6XvDiC@_rQ8LOrE?L*8oP<{Fzf zTNEoHcsH-qwDu3vWfH}F9WRwZNg)}rS9Ot$uNK}5!f+4<$5@qbfYsWHoI(!v{#D7O zYg{Yl*O>P%kcHNIRiJHb)J{Rvb)9?%@?HAA`64^HrQRYNWT>@Fw^#`eK8mDsTIvEHD`gg!b>oQ3m62>VLcHVJp)91^iMp< zKL&(L^e7Oa@6)G;@_r9QiyjBk_z)C`ojn@E8Ub>g&e}mZc>DK}*1i3rH#gb6{h_tt z(7pBv1fR;jZqbjm=;Z77?`_fPtorR&TXbfQWX%kIG_#|_lT1nYRZM^G$@mN1^hu;r zJ}sBN;M1fcGnvWJ1PrEmC7VcIf_BLqNsNterWs-8)rqm}@K&FTxx_>Y<+1+&Oq^1g literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_printhex.o b/lib/libft/_obj/ft_printhex.o new file mode 100644 index 0000000000000000000000000000000000000000..5ef814fa5e93f8eda620c6004ab97d6a0966191d GIT binary patch literal 1012 zcma)5&ubG=5Pn-@8>;55qFBL06tBhNsd$R$!X7M$G~lH?O5Bnh8cW#FAOs2zO4cQi z|G*ymCy0k=sSx#|#~$?{Y(Qy*9Ha?dzuBEpOFhfm{O9uhjRv+w8?2P2_>PsP=1U1zrx-@jDGP1N$F z9YXl_2t1&EXrK*`5EOC@xcG*(xtYK@* z>5>~YjS{Ll0m`XP8B)OUL{=?NM zouAxnzfTyljyl;fkRa`Bl!pYLP$8{Jw{y!nY9g z1v@(eE2uez_;G0958Y?E%>4;*r7O7DHgu5QLlVLbLocZ6uj4^JefI$EjG!4! zfK>`WPC{KDF%o*;6<(81OY*(@pxM==@duF5p%Ps_MDUd}>CIi)vb?;xTrS GcfG%gdr*o1 literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_putchar_fd.o b/lib/libft/_obj/ft_putchar_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..e3a7ad2907378eb443c8769d9327d60cc29ee47b GIT binary patch literal 680 zcma)3ze~eV5WZANi@%z|LBSz|h>MGpV?~7w4k8s?|Fsg0vK&qkoFH z>h9`4AUNn=9IW3p?~ynN9(=j)yWD;6c<<%w^SexB%n?4oJn$gI1`zAOp6EYfpz5!x zM{9VJKzt>b6Th2eJk#}~^Lnl|+fqdQWS7fQwim>W?vc#wU9}?DOE_(Jn(YSj@nP}* zwi323!bf%qwI2~!9?X8oLF~5ttj7F%KS#CJRJN6$lC%hG%_Z*wYryPUstaTS5^|{2 zBM{+Zd_-fOPJm*_tVXf^AAaTx-<w6lqO#2#vC+=egG(fL=pf1 literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_putendl_fd.o b/lib/libft/_obj/ft_putendl_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..5ff74c86fd9fee3fbd0d18193fb3d7f59124790e GIT binary patch literal 860 zcmaJ8?$9XIh4aomZ|*(szL|OceE$jyp^XbHzyuH(!;%0Hi@+5< z_#^Ikf0cR=zJ{kDkROForrtEY+|!vw_!lTKSzs`CE44Wi~I5Z261x}|lAVqXU3sp1~{=kZE2-T>UP2Jt8S*C6jDympO{ST^) BWNH8a literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_putnbr_fd.o b/lib/libft/_obj/ft_putnbr_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..1de64824a15d94ab75437067696a42ee27041226 GIT binary patch literal 1088 zcma)5O=}ZT6uqgXjbE8r7>Ov@g^O+?wMOlx&{Bi5u%Oa_8+p{}#0E(W;|wi@Kp2zH$)L&tMx?juc0p$G1}-{;OHJvF{58p^ z)?QF*)l8XJM$=nhxr6vE$d4ne0|-CSY{pz4n!6gmY2>+%ADWqzMKb49-DlL`x69km zK>j%n_Map=dslqsLp(bMjWyyitgpk*z|h~5hHt>vVDp%ZKkSNI@f=cRPt|>|_S#kD MCF+~Xb>db21J&xEzW@LL literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_putstr_fd.o b/lib/libft/_obj/ft_putstr_fd.o new file mode 100644 index 0000000000000000000000000000000000000000..bc970e3c6fa1fbc61b5f17cd41b46fc7b85c0f61 GIT binary patch literal 740 zcmb7BO-lk%6uo0%QIhmTsbjt1wD<5qL3ywgAxdW5Dl~OC-gH~ z1_do^*&hg86tr+5Evj>!`_O_GUFOWW=f3+j^BzCmK4*xmDZ&ew25#7~0oV$VX8ng< zOZ-`Kj7Cpla9=j9U8m)SeyDTVquf{Zq+8V?U>?OO1Th2_stn-0wsZGs0=eGcu(qY!E4Z{r+r}3xR${+|FuKqzo_o3t^D@T_Xa_GpaO5Gg6z<5zbpSi z`Ch-zO;zD3KqN4-dv71#jiPwudbKmQ|qh6`HwE+Fndt zMs^mWQnv}lccs?BC`)k|99;s(C#JDGAu0AtlP8fpJgHikg^B_J5DXsXB*gUM*fq8JDNCO24)3DvxVzMc5*9KuB zdN;Z^*FYaC_~@fAiXcdzmaZwei(q#1BKIK=5mwkMD_JFwOVz~h+?i>T+JJ|hIdjf@ z=bUfOoxQht|M%UKj3tgUOc+UwJG28m=z>i5ZNkSu@UBnt{ z1CILO?TR3rvoI>;CmU2ihlvO}lFq%e6D$113T?2sA8t89FLr#FP?(S#Dp(k?UcJX++$dIq8F3ud7>LHx-o$h^zhNsDEtCk0h(Bu zI>g86X7-W~MEIhOndxeHa&2CFZNS+@$u(Yi4m(s5PZ9n>^q{mg`e%lJ z?q{mywI#9kpl&~qo@mF%ZinB*2PI2iEga~<)oS5twH{`21>wGkpR*@A=S7<@pRu*w zy8NiFdzcND(%{qbN*#B{@e^*jBXeuj!Bn`a57`3K&T2BHS$o-@bQ2Un?T4n@kU{&; zJkB5n;*VMU}o>-wo zB&qn1umAqqqvy2tvrn~YtbN3n#`D1u@k8c4boq$*L6a)+;oB@RpH8GtolM}EcV{i1QKRNd1X?hot5bgp->u-%SJRgah25#gZjWc{7iMtKltzC^Xy#IqM z;9N<@h9`{v3@<(0>tP?U6e3(jwB2!aE_5O|N>v}acm(N?1 ZfCYRERdM#cd;vi0F*P$eJw2Oa{{lg#($)X~ literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strcat.o b/lib/libft/_obj/ft_strcat.o new file mode 100644 index 0000000000000000000000000000000000000000..f749d90f2a479b82f5b3b9483e4dbc6e36622ee2 GIT binary patch literal 756 zcma)4ze~el5dG4YHfU`#bWm{U;GnCMgM*@h3>HKxxX4jrOC4HEO|S?;p(4gCb@NZ@ zD2VOmkFBGNkV1rx#ld=)T-t~TK6trz_uakkLh}6i@s$uliVA!nW5^DPEE2JRT%-IC zjJV$Co*+k0K_p)SfKhB1zV`FHdXS&yfx2ZuezeO3G0~i86ae~3rB=`lFsoCs~fQh`-AVMqU-w6ad9Cl3z+5*Q|??W|_mD>d;J2bt!1JI@0u<+gz7L z`Z9$TTXkFalBK$XxAAy9;HDuqIeycMKju|#GBP>XrW-XKO@F%1$hPUUx{_r&gGZeA zPIGQFho`UInBrY{_&}~9@OS?8dKvDK&i91WP$VUpklWa`g!M(_GTuN4{u8m8Qm!If XbMcTjw#Ugh9d?J30jEY?FBsw*!pCzE literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strchr.o b/lib/libft/_obj/ft_strchr.o new file mode 100644 index 0000000000000000000000000000000000000000..fea0b41d07737d7bdae15502407785512a48ccfa GIT binary patch literal 756 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%_yHBa0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZj5QI;0GS7J3mmX8G{D(FMtpp7er`cxa!Gt?UU_C-N_@PJ3$pwS zC`SQG7cfEGasfy~oeE?jKzw{^MtoXPVs0u#EIuC9eLJ8^9ia3CsCiH>12+Rh28<1& zjeuAJh{1O8b1|?1F$jPx1&QB)y5j|q<^l47`WXU%7#V={LfwiiOcXoRqw}dpXYGg1 z(l^IlUx2iDbi01=NcMffzfXjt`4;C`$-|hOwh5@@`4v+!IU4H;6ki|b@4}(}p02CD920=5RDfbKK&%0@7X)DGgu#(dppD6ymkp!|3V_PlKnC+8n;xH55?@?W Jl$=q-000_gZi4^- literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strcmp.o b/lib/libft/_obj/ft_strcmp.o new file mode 100644 index 0000000000000000000000000000000000000000..5c7286bcb59957738b9badbeb6bf0535b96cdc26 GIT binary patch literal 748 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%_y85Z0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjMWWgfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zCOq zl%oKpGngQ5IRT`hP6e_MAU-}dBR;JtF*g+=79Wr5z70^N4p6!SY95r!z|Fvr0b_$` zBOsOlVz6EOTnubL3<4laLE;yn?sx#Cd4PPNeue-bMg}0gP`4rr6U7eo=zQwYS^LAI zv-HDp*Eb+Nh6g;leSdf)hrZ$8XCm1AkDLgr2-U}0b&E7H6Q>>9}JFs0&Psryle=gL1D!PGMFFP Q^!T)r_~MeH+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%H~oEfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1; z%29yQ7EBPg%mC6*rvh0B5FekK5ua9+n41a_i;qWjUjtOB1C)+{ng``Fa5FGuz}O(# z2#6(s7;G0m7Xup*g8;}Wntw6yx2PZqc8PER<$r+WJ486TOW!mfW9%$_^YZxr z|NmhU$5=Q(hWv;@Bid^0%m g3A8ae^Rgj~2Kk*0WH3Ln>G5eL@x>)Y$pw`R0L?&KM*si- literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strdup.o b/lib/libft/_obj/ft_strdup.o new file mode 100644 index 0000000000000000000000000000000000000000..e052b4064af80f52ed229ba559b3cc897877527b GIT binary patch literal 816 zcmaJ<&r1SP5S}$rDNO^Rq7F-R6{1te!WP~kA;O?bJY-c2{1LX21VXSCZXWVa>DVzT zs#|pP*ug-dV2?|Owwd)k(x8U@-Z$U;dc*EMe|~%g0h9^A1K~&9kfS2d<`HY8|1ev` zyP`&FoCyS)OUAj8s~baqsMFeB`bSIeN;ou+c6ssv;6vh+NE+vQrF59l4PGlBAC$A4 zZ*9sPaa#ygZ~=$VE?s1?sy9}oalc%F=c}1gZW!Twe7|c^xGuOU<_QT?00rq2uOj9U z-d)j22q4JlQi{Kd{unN$qQ-vMMvNNu62=xCE%?XZW!4)r-&JNcY}RVneX6yzUQ6ql zw+ho8FTgCV&&)<2qURCJvq#OLx<65bn=|J>sVVJime;E(S z(q=p~cyV3V)0XBSJIuUS_wQ(`XX5*MuSLd)<3cDWJD}8KN-P`evQIrm0VdN1Bv%fU(yupu*YPNPL-D0i`yp$;x HD>}e83dVRB literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_striteri.o b/lib/libft/_obj/ft_striteri.o new file mode 100644 index 0000000000000000000000000000000000000000..e8264a9b103c85420847f465af067157358c069e GIT binary patch literal 696 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%*Z~#40aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZj1>lDfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zA1< z%29yQ222pQOaRhQrvh0B5FekK5ua9+n41a_i;qWjUjl=_hk8al=-M()+Pc_&GFz~miL4-bZ*S_)S_WjWv`lj=m2jfSN&U61S z06EQv7&}AXygdH@|9_9>BMPyH5mrOv3B!3JP$i62K@5x)0*nGY>>Lw-s#JjDGC-UG rGz$b^@yy`JC(y>^%*%!_8suj-kiq=OrpKq1#21$oWtOBCWdh{@TFzXM literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strjoin.o b/lib/libft/_obj/ft_strjoin.o new file mode 100644 index 0000000000000000000000000000000000000000..bb8a89e0789803629eb0dca2bd411fcd3c2236d9 GIT binary patch literal 1044 zcma)5J!=$E6ulGIWbh-q#fl0RQ7kN6SZuVgNJs`=;fhECHsP_18xq+s;w&b@LSRIE zPLnd7DJ?B6l}I8sK}fMbV1x;bGUZ~C_1t;yp-}=JxO493xp&yv{h!~DCWxF3QKbG>|oUJiuCYUz-c}(B31wFV7LpqSMu`HKX>#c^3kKb1{@3*YW zh|^*;3wd3(rfie5`ne#$gOz%K5h#=J!j$H^G>v2QUWDSmXX_{fQm0>^8ti@E#57- zJUkFlPb(=e7Eukgg;+RWkxqo#&lPM%)rN;IOYC_=z1tg#@KbehXEVP~^@q4E+w)RW z&9Erlxa(r|b-g;zye_*U!YGQb%5Kz4!(B)9(!(#K(J1oL#T_2kc%#YuS~g3xZQT1O z)XS#sJby^eTFEJ$n{YRw!e?B8y*t7#z~~drOqO1b&7L1ObKExvyP?}gX3sx;>$<-p z4c`Xi6R2DT<9DuHFgyju`dpqFMw57KgBkq26gg>d5&TC;*ZztL|CjE%d>X8hTnd<< SbXMBdZ#Lkz>dj`y$J{RpgR*e| literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strlcat.o b/lib/libft/_obj/ft_strlcat.o new file mode 100644 index 0000000000000000000000000000000000000000..e7aff812ccdec6eaa3ad575fbe2530743313a67f GIT binary patch literal 896 zcma)5Jxe1|6n$f246Zs6Eg}e;Vp|KhQnZM;4_;wlkpyg(w;>x*SU=DS20@7Ku4GIj z;t#OgpI|8p&U8*WuuYl;rw}ZIh4I{ZFL6W!FWh*JmdOCnG0bGAXTc)l#v_^L#1)oOhy+5kAt=wK%JFV+2x`Hr6(a zB}-P;cUISbNV)JO+Rtd7j4rl%l$Iq3(k)b;P0I3$T;3|Kl~qm3m-@1LD62=(;OX3r zN*@?o(XH_KjAt4ij+y-|0VkuSRR6AZY~oBI$2|KAj~dPDwbAms;)1aM3w!Tg*p*vh z7n;K1J`IWnzZH#~Uz<%b^Y@6V_@bBg2%G!CzjnI~u&2TI0DCXMUKi{saD#hdhBwWF zVa3)IG46w_6&zE+;VyAaUVzCJGdaJ`9rM??!g|2EXf(xs5K5SK&6CS|!8zj2U&H*< z3s^9ru%z2P8cpH~p(+u}x%Du0yOP}Cl=Mds*YPA>nihqk5VyWvfl-5ITNFenxQU0DVvr^_k_AFxiKCk!`VT>W zz*Pi+Eu)<~XA?L<;8I*@_s+c0$q>45=AHX-&bu?rd-uENBSe@W@Bp|0H6#H5#3En= z^D&X+y#_z+96SjEeK8nQ<9XHMRvuC!p_8HAf$4LA_SVyCH0G^Vm#`usS3 z#MthRvoCU=059q;YnLD_#9L4q24nFgOJt*|xK(59_kJr}6tpGaW4{}grU*&eEj-r& z3jk9lO%g8v124ro<$FZnlpzN_*#|fSwftIV`CmLtwNI)QI#kQGsTOY0H$_JwEf!it zDm?);FkgG2)jge7VdDA=FQc0uWu++<=aE;HHnyc_zgX;&p!84=mUGRD(tH%8TMtYa ztB$dXUj#)56=jp^)MHv|if-KZ`+d7xcZ;Lm(#@RZ+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;n{P0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAa64fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw# z%29yQ0!$FM6aZuUrh)*j@%uR)e#mA$%F9NF60ZJP{&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW22-jt(Hr1LOnsGXwxJG63m?x)oWND0Zkv=Tnc)+8@VV zzkt+xbi4lWNcR2GV8g+{-@*qJ>303ne1Ngj^~=i#|Ns97@?sAo8w`yH4C_UpiWsYc z7#J%A7zKFPIVJ#AsQ|@gfVcx_7zn`Pk-?EqppD6ymkr5qpmH{l!TiXk$ETIV7nc;} Iq~J8~KHA@BFR&-?3pb9a~j|2>Qm8KZ;)mVlkH zlZFAWVDDK!fwazDYmPK#5*yEDNa+@8Zr|_gto=DV(2@5|J3Nnf>5LHJ$6}u;f|U8K z%C?htcJ;r&8gxTyI| z&(o4#5N$?2^IO;qtaq0=K}i^cFXgy}J$Ro*9BDB6X$=+!_p%Kw8ZUUp&k1!ay!!>A z>TRKRTf(omTU@W~z_$ahVW@^`islUob=gY@WrxD6hh!e6P$w?z4%go~EPOlkR|ECu zcfz6zJKzLj?OtsEgGJ^6|6zn$emxNWYTM5R>aThJ?oIa!GK9>itEJj%QZeYlwE5Eoqxu40UtNeW7ew>mCLQ-~) z=Q1D&7`#gyCtd&sz7*?0zQ;VA5^$I&I{;_kEZ@~x{#PEQ>N{17CROtWRipZotl`|! zeYvQSn%og9D+5Z)MSZ}li@<3^HpM%C`IFoTwP;(c;A&7btfF}N0M)wO27|iXxe~;R z2L#=Hd$j2vh?~;FtGcbBTPaM$^8oKt4}K0+WfNu2mN9G@(9)@=4*^2Gy9r4{)(#$F z(h>Zg{Q5o9TqB(A5}_ao(xlIS0jfEu&jR!wI`{kbJtJ!Ysp?vv@;bah?nPtK>CTc0 MJ5h3(csh&HZ_K@goB#j- literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_strncpy.o b/lib/libft/_obj/ft_strncpy.o new file mode 100644 index 0000000000000000000000000000000000000000..5585d2949e3d3408be65950d47133c1d1e310efb GIT binary patch literal 728 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%xB(Tv0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZj8zI{fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zElV z%29yQ0Zb6LYyi?wrvh0B5FekK5ua9+n41a_i;qWj-wdcy2PjRv)Qz6fA+>0Glm%+ zzzA?b$sB-q3M^3lpK$cv-zz*BfqW^HGIK@K&;5E;yj%TU2bmf1qglcjVWlufqSVIj z&ffZlsS5cI@AI2VEiXm)i`r*SH&-wS&GH!!y)_i&E0x<;Tl?!fIlrsapYxq-QCf@k zv|r%ykg@F`r}ZW91Q^Kp0~P})=uqlk=sA91O`wLJtpL#=tv)u|zE_@=*0r>bJZTj= z(#p1FU3jGh#;dcCqv-HPynMrWWrFG}(Ir=R9><|@sECp#buClE$cC(Aun6HQ)8-MI_v4%lEWCSUc4SbaoxbpZomW7sx7{aVX3k3};)aLQ-ca+F>z zu3)>Be!ow*g`ZtojN>IGeUb+oXK>4Bfp4I4+;LLr7YB8B?Hf2@=+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%cmWl^0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjMWZhfXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zElW z%29yQ2}}^T901Z#rvh0B5FekK5ua9+n41a_i;qWj-wLQw2PoYDH4n;V;AUXRfU!Ze z5fDoNG1xACE(SIr1_6+zAn_AWciaHd0zf`cKSKZzBLk3Ls9TYRiDHL(bUyXyto_kh z`o-h8D>zn;yM6#^_2_o};gRh7fq$O}NAoWR{uT=~!S2#84*dK6S^na0H4DE^+WRk#!lA{FE{`H|G(Syiwy%-bwF!g#2yA&2nNu2#qf>@RGzUah=H*}fKh;l zonrz}l?qT?28bRhl0cJ6nqUzEm9#a} z*>vN7=+33CN=u8Am5y%A4;Uc>3fUQLb^OlUJFT?{9&+BVZ_Z5K|M>c=k1^u}g8+Af z-;gm32Av0|$o~gTcd0~E*Tg<%GGdxbBxO0fSXQ?3$NA*=p&whX^&FZ6{UeMo0GGpnL;-9kK*fS zTsf6yo}Q;&c8ak$6@_j>o&!g1=1JBICZeSj&jAO1Yy;vdH2T?nFcI~{O!Y^AQo(=F zgs?x0+LyGjt8HOdTEgMbyb0Z0O9-dZGB>}sXi%-g%;mE%C?$GmF%+T>?qOt8Tx%#WSnY7Xwq*#b6JY_mhNx8=fc;3VYX~djzwJ&im-~pQCmH3Q z`Qm!)+1miEo-NZ{OX67@PQ|ys)m+1_`oelwA4~+hYJUS8IzfV3UEa|HJEFFmp4u^o zmMOsKzUg{(54Ua8ZI@DjLoeOjc+sssw~udj@5la4gLZnw(1+X3ytq|T!&0CE929Ngs#Q*>R literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_substr.o b/lib/libft/_obj/ft_substr.o new file mode 100644 index 0000000000000000000000000000000000000000..eebbca787844ea7acac90e1fd8f711f6ba666ec2 GIT binary patch literal 912 zcmaJ=&ubb%6rMHKNE5Rj0!g3;4>=S{F6|{?4_lgnIaCNiAr~2pHCRv+%t}H*2$7af z_R>Emx3siWZ{1VK!NXnx8n$3>(nIX`c4tu!?SpULulc_BV0M50`Sq~Kn6bcc0CC`o zf(!uL0JbUrhwbX#t@cq4O-3MHGAZrKnH|Pqp6C1dX&y!QIv_pTAZPTw`&O8I6d>X9GmB%^%~BDBjk4!vq1tJ~PGQk93zQoRyZq@3R`tx1+9 z476UvUt+8p#pIs@>p(y=AF~8NMnkD?VGr8p7)J&ke6|bB8gU78i_Tv7Ph1e{PIP=r zsP;&;e4z@SaN45*Q55ex+|Tm9d67gay4<6(!~4&;ufC|SBAfHf&dPjE<)FYl@rYIu zsvAfN#e1UD?lJR2ippI+hGWAbB@TK{&ifHhQp2SNYOcs~sJ{ra5pK9n!B;oJ_-$Rj zOlp>EeF|bXn#bMY^<**$+KP|i$D;GyDt;r`sp;>BcAT?Sof+@K($<3~8O+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;n{P0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAa64fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw# z%29yQ0!$FM6aZuUrh)*j@%uR)e#mA$%F9NF60ZJP{&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW22-jt(F#0OSMpGXwxJG63m?x)oWND0Zkv=hM#GAI-Ht z9Qk`d76MsO{QZ1DR=4Yq<^u|yu76&#L3luBx9gwS!^j3h;{n5Z5vU@@svri&3IRp| z9(IliKvgP0aTy@)_zwZFcw}(o6KG>{<^@>=13=|$AcOglO^;72i7&~|$uCbW0;vN4 Db)`kr literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/ft_toupper.o b/lib/libft/_obj/ft_toupper.o new file mode 100644 index 0000000000000000000000000000000000000000..137ae034299c5876940f6875451f8bafc47236ea GIT binary patch literal 664 zcmX^A>+L^w1_nlE1|R{%EI_;i#83cYAdm!N3lJX%m;n{P0aXLz1I=UrVUW2X5FcNX zT2TUFL---C5g`aZjAa64fXoBA1rAsk8sKaoBR)PkKer$;xg@?cuRJp^B|hHA1zFw# z%29yQ0!$FM6aZuUrh)*j@%uR)e#mA$%F9NF60ZJP{&4Y3oxEUBSU~CX= z1jG_R47Q7(i-8S@K>%baNW22-jt(F#0OSMpGXwxJG63m?x)oWND0Zkv=hM#GAI-Ht z68U>T76MsS{QZ1DR=4Yq<`)W`u76&#L3luBx9gwS!^j3h;{n5Z5vU@@svri&3IRp| z9(IliKvgP0aTy@)_zwZFcw}(o6KG>{<^@>=13=|$AcOglO^;72i7&}7EhtDW0;vN4 DyER5X literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/get_next_line.o b/lib/libft/_obj/get_next_line.o new file mode 100644 index 0000000000000000000000000000000000000000..d5cbdc532f7dfb1146d127d84f64887441028d42 GIT binary patch literal 1860 zcmb7FUuaWj6hGH=wfLtu&OIpjCmVuJ$Y_OOnF=lTgAZvyq=7MzuQ9!yvKl2#wr&sz z+;#MNiTJX;>|s9oxJQ{FQpIdfQxs9@L!cQXpm3EkQc<(t`R*6XYKj z$+q5-u9`Yrk8|&QK(v{ieN<#K#d`^trR= zQ|X+_XTCd=nO16Iyd#xbeN7o-1cS2 zFfG*warh!|Z&;oP>erghCYP`mQfx1*%F^c$=nsB``U+1}-9nY@(pFf8|COa9?ANY( z43c(U+yV*NwPUC!J<+HS!B7Wts}08bE*uE)6KGN2Axp`ct|NU><0N21y0>B{Z`!+y zoMYx6@(M4dmk*?uta*v5^b3KXubS>E(ofc;{{%(wd9M6^d5Lirg$F3`~5^U zlBl?AnDi4=##MoRU4H7WZLk-(`Oc#CYcQ0>GES^&`H-mCr5I#RLLEQ3>^*RATV8(I zx+~LbxBEt@ejkJTq8bquw}Csp55sHH9U=S2Z@3U<@bf|EVjsGNhgj@hc(GVa)!v3b z(w58cV}Bpx&IeDXRC;{fh9L&=pra9Hn=@Ouy+J1SfAIL(^Ia`tvcSF3XY7^Ok?q zeAV+^(d`N!8PWRT1X=S@E4pd@z$H}K1N#o}pD)n~$lOmfHW>YB-OQsJa#>tYJ%Vkw+dist2wUbjB{1d6!GZ{zCIvG-3rq7Vr UV0bGjQ{`u literal 0 HcmV?d00001 diff --git a/lib/libft/_obj/get_next_line_utils.o b/lib/libft/_obj/get_next_line_utils.o new file mode 100644 index 0000000000000000000000000000000000000000..0eecbe78a49a5f7297254d9da19e46992848f8f4 GIT binary patch literal 1384 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 literal 0 HcmV?d00001 diff --git a/src/builtins_part_one.c b/src/builtins_part_one.c index f3bcfc0..7cbcdeb 100644 --- a/src/builtins_part_one.c +++ b/src/builtins_part_one.c @@ -6,60 +6,13 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/09 17:01:16 by chuhlig #+# #+# */ -/* Updated: 2025/01/14 19:51:59 by chuhlig ### ########.fr */ +/* Updated: 2025/01/18 18:33:33 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ #include "env.h" #include -int echo(char **av) -{ - int i; - int f; - - i = 1; - f = 1; - if (av[1] == NULL || av[1][0] == '\0') - { - write(1, "\n", 1); - return (0); - } - if (ft_strncmp(av[1], "-n", 3) == 0) - { - i++; - f = 0; - } - while (av[i]) - { - write(1, av[i], ft_strlen(av[i])); - i++; - if (av[i]) - write(1, " ", 1); - } - if (f) - write(1, "\n", 1); - return (0); -} - -void exit_shell(t_env **env, int exit_status) -{ - free_envlst(env); - exit(exit_status); -} - -int builtin_exit(char **args, t_env **env) -{ - int exit_status; - - if (args[1]) - exit_status = ft_atoi(args[1]); - else - exit_status = 0; - exit_shell(env, exit_status); - return (exit_status); -} - int unset(char **av, t_env **env) { t_env *current; @@ -69,8 +22,6 @@ 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) @@ -95,6 +46,8 @@ t_env *check_existing(t_env *env, char *av) { while (env) { + if (ft_strcmp("$", av) == 0) + return (NULL); if (ft_strcmp(env->name, av) == 0) return (env); env = env->next; @@ -102,51 +55,65 @@ t_env *check_existing(t_env *env, char *av) return (NULL); } -int export(char **av, t_env **env) +void export_export(char *av, t_env **env) { char *tmp; t_env *current; - int i; current = NULL; + tmp = ft_strchr(av, '='); + *tmp = '\0'; + current = check_existing(*env, av); + if (current) + free(current->value); + else + { + current = env_new(ft_strdup(av)); + current->next = *env; + *env = current; + } + current->value = ft_strdup(tmp + 1); +} + +int is_valid_identifier(char *str) +{ + int i; + i = 0; - while (av[++i]) + if (!ft_isalpha(str[0]) && str[0] != '_') + return (0); + while (str[i] && str[i] != '=') { - if ((ft_strchr(av[i], '='))) - { - 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); - else - { - current = env_new(ft_strdup(av[i])); - current->next = *env; - *env = current; - } - current->value = ft_strdup(tmp + 1); - } - else - return (1); + if (!ft_isalnum(str[i]) && str[i] != '_') + return (0); + i++; } - return (0); + return (1); } -void set_return_code(int return_code, t_env **env) +int export(char **av, t_env **env) { - t_env *cur; + char *equal_sign; + int i; - cur = check_existing(*env, "?"); - if (cur) - free(cur->value); - else + i = 0; + while (av[++i]) { - cur = env_new(ft_strdup("?")); - cur->next = *env; - *env = cur; + equal_sign = ft_strchr(av[i], '='); + if (equal_sign) + *equal_sign = '\0'; + if (!is_valid_identifier(av[i])) + { + write(1, "Minishell $ export: not a valid identifier\n", 43); + if (equal_sign) + *equal_sign = '='; + continue ; + } + if (equal_sign) + { + *equal_sign = '='; + export_export(av[i], env); + } } - cur->value = ft_itoa(return_code); + return (0); } diff --git a/src/builtins_part_three.c b/src/builtins_part_three.c new file mode 100644 index 0000000..7c73e95 --- /dev/null +++ b/src/builtins_part_three.c @@ -0,0 +1,76 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* builtins_part_three.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: chuhlig +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/18 18:29:24 by chuhlig #+# #+# */ +/* Updated: 2025/01/18 18:34:29 by chuhlig ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "env.h" + +void exit_shell(t_env **env, int exit_status) +{ + free_envlst(env); + exit(exit_status); +} + +int builtin_exit(char **av, t_env **env) +{ + int exit_status; + + if (av[1]) + exit_status = ft_atoi(av[1]); + else + exit_status = 0; + exit_shell(env, exit_status); + return (exit_status); +} + +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); +} + +int echo(char **av) +{ + int i; + int f; + + i = 1; + f = 1; + if (av[1] == NULL || av[1][0] == '\0') + { + write(1, "\n", 1); + return (0); + } + if (ft_strncmp(av[1], "-n", 3) == 0) + { + i++; + f = 0; + } + while (av[i]) + { + write(1, av[i], ft_strlen(av[i])); + i++; + if (av[i]) + write(1, " ", 1); + } + if (f) + write(1, "\n", 1); + return (0); +} diff --git a/src/builtins_part_two.c b/src/builtins_part_two.c index 05d6943..9fabc81 100644 --- a/src/builtins_part_two.c +++ b/src/builtins_part_two.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/25 20:52:16 by chuhlig #+# #+# */ -/* Updated: 2025/01/14 19:31:17 by chuhlig ### ########.fr */ +/* Updated: 2025/01/18 18:57:12 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -72,6 +72,7 @@ int cd(t_env **env, char **av) } if (chdir(current->value) == -1) return (1); + update_pwd(env); } else { @@ -101,7 +102,7 @@ int ft_env(t_env *env) { while (env != NULL) { - if (strchr(env->name, '?')) + if (ft_strchr(env->name, '?')) { env = env->next; continue ; diff --git a/src/collect_redirs.c b/src/collect_redirs.c index 171dc06..c170a30 100644 --- a/src/collect_redirs.c +++ b/src/collect_redirs.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/02 13:49:31 by dkaiser #+# #+# */ -/* Updated: 2025/01/16 18:19:36 by dkaiser ### ########.fr */ +/* Updated: 2025/01/20 13:00:04 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,8 @@ static t_redirection *set_redir(t_redirection *redir, int type, char *spec, static int set_heredoc_data(t_token *cur, t_redirection *result, t_env *env); -t_redirection *collect_redirs(t_token **tokens, t_env *env, t_list **create_files) +t_redirection *collect_redirs(t_token **tokens, t_env *env, + t_list **create_files) { t_redirection *result; t_token *cur; @@ -45,28 +46,6 @@ t_redirection *collect_redirs(t_token **tokens, t_env *env, t_list **create_file return (result); } -static t_redirection *set_redir(t_redirection *redir, int type, char *spec, - t_env *env) -{ - t_redirection *result; - - redir->type = type; - if (spec != NULL) - redir->specifier = format_string(spec, env); - else - redir->specifier = spec; - if (redir->type == OUTPUT_APPEND || redir->type == OUTPUT_OVERRIDE) - { - result = malloc(sizeof(t_redirection)); - if (!result) - return (NULL); - result->type = type; - result->specifier = spec; - return (result); - } - return (NULL); -} - static void collect_and_check_redir(t_redirection *result, t_token **cur, t_env *env, t_list **create_files) { @@ -89,7 +68,7 @@ static void collect_and_check_redir(t_redirection *result, t_token **cur, ft_lstadd_back(create_files, ft_lstnew(set_redir(&result[1], OUTPUT_APPEND, str, env))); next_token = (*cur)->next; - free_token_and_connect(*cur); + // free_token_and_connect(*cur); if (next_token) { *cur = next_token->next; @@ -99,6 +78,30 @@ static void collect_and_check_redir(t_redirection *result, t_token **cur, *cur = NULL; } +static t_redirection *set_redir(t_redirection *redir, int type, char *spec, + t_env *env) +{ + t_redirection *result; + + redir->type = type; + if (spec != NULL) + redir->specifier = format_string(spec, env, ft_atoi("0")); + else + redir->specifier = spec; + if (redir->type == OUTPUT_APPEND || redir->type == OUTPUT_OVERRIDE) + { + result = malloc(sizeof(t_redirection)); + if (!result) + return (NULL); + result->type = type; + result->specifier = spec; + return (result); + } + return (NULL); +} + + + static int set_heredoc_data(t_token *cur, t_redirection *result, t_env *env) { char *heredoc_data; diff --git a/src/create_files.c b/src/create_files.c index faee27f..8689f88 100644 --- a/src/create_files.c +++ b/src/create_files.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* create_files.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: dkaiser +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/16 16:23:51 by dkaiser #+# #+# */ -/* Updated: 2025/01/16 19:16:33 by dkaiser ### ########.fr */ +/* Updated: 2025/01/19 14:36:59 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,10 +22,10 @@ void create_files(t_list *files) { dbg("Test"); if (files->content == NULL) - continue; + continue ; file = (t_redirection *)files->content; if (access(file->specifier, F_OK) != -1 && access(file->specifier, W_OK) == -1) - break; + break ; if (file->type == OUTPUT_OVERRIDE) { fd = open(file->specifier, O_WRONLY | O_CREAT | O_TRUNC, 0644); @@ -36,10 +36,10 @@ void create_files(t_list *files) fd = open(file->specifier, O_WRONLY | O_CREAT | O_APPEND, 0644); close(fd); } - /* if (files->next == NULL) */ - /* break; */ - /* if (((t_redirection *) files->next->content)->type == 0) */ - /* break; */ + if (files->next == NULL) + break ; + if (((t_redirection *) files->next->content)->type == 0) + break ; files = files->next; } } diff --git a/src/debug_tools.c b/src/debug_tools.c index de59703..6bee1b0 100644 --- a/src/debug_tools.c +++ b/src/debug_tools.c @@ -3,14 +3,16 @@ /* ::: :::::::: */ /* debug_tools.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: dkaiser +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 15:34:14 by dkaiser #+# #+# */ -/* Updated: 2024/06/28 15:04:43 by dkaiser ### ########.fr */ +/* Updated: 2025/01/20 12:50:36 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ #include "debug_tools.h" +#include +#include void dbg(char *msg) { diff --git a/src/env_to_strlst.c b/src/env_to_strlst.c index a1ab7cc..5806d96 100644 --- a/src/env_to_strlst.c +++ b/src/env_to_strlst.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:22:28 by chuhlig #+# #+# */ -/* Updated: 2025/01/14 19:34:10 by chuhlig ### ########.fr */ +/* Updated: 2025/01/18 18:50:49 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,25 +15,32 @@ static char *get_var_assign(t_env *cur); -char **env_to_strlst(t_env *env) +static int getsize(t_env *env) { int size; t_env *cur; - char **result; - int i; size = 0; cur = env; - while (cur != NULL) + while (cur) { - if (ft_strchr(cur->name, '?')) - { - cur = cur->next; - continue ; - } - size++; + if (!ft_strchr(cur->name, '?')) + size++; cur = cur->next; } + return (size); +} + +char **env_to_strlst(t_env *env) +{ + int size; + t_env *cur; + char **result; + int i; + + size = 0; + cur = env; + size = getsize(env); result = malloc(sizeof(char *) * (size + 1)); if (result == NULL) return (NULL); diff --git a/src/execute_cmd.c b/src/execute_cmd.c index 8f5b541..e2b9d66 100644 --- a/src/execute_cmd.c +++ b/src/execute_cmd.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:21:35 by chuhlig #+# #+# */ -/* Updated: 2025/01/16 18:38:00 by dkaiser ### ########.fr */ +/* Updated: 2025/01/19 19:15:46 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/format_string.c b/src/format_string.c index 5f31130..7e64039 100644 --- a/src/format_string.c +++ b/src/format_string.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:30:11 by chuhlig #+# #+# */ -/* Updated: 2025/01/14 18:06:17 by dkaiser ### ########.fr */ +/* Updated: 2025/01/19 20:24:05 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,46 +14,18 @@ #include "libft.h" #include "minishell.h" -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); - -char *format_string(char *str, t_env *env) +void append_var_exit_code(char **dst, t_env *env) { + char *exit_code; char *result; - int pos; - int start; - int is_literal; - pos = 0; - start = 0; - is_literal = 0; - result = NULL; - if (str == NULL) - return (NULL); - while (str[pos] != '\0') + exit_code = env_get(env, "?"); + if (exit_code) { - if (str[pos] == '\'') - { - append_slice(&result, str, start, pos); - start = pos + 1; - is_literal = !is_literal; - } - if (str[pos] == '"' && !is_literal) - { - append_slice(&result, str, start, pos); - start = pos + 1; - } - if (str[pos] == '$' && !is_literal) - { - append_slice(&result, str, start, pos); - append_var(&result, str, &pos, env); - start = pos; - continue ; - } - pos++; + result = ft_strjoin(*dst, exit_code); + free(*dst); + *dst = result; } - append_slice(&result, str, start, pos); - return (result); } static void append_slice(char **dst, char *src, int start, int end) @@ -65,9 +37,7 @@ static void append_slice(char **dst, char *src, int start, int end) if (*dst != NULL) len = ft_strlen(*dst); else - { len = 0; - } result = malloc(len + (end - start) + 1); if (!result) return ; @@ -93,27 +63,63 @@ static void append_var(char **dst, char *src, int *pos, t_env *env) i = 0; *pos += 1; - while (src[*pos + i] != '\0' && src[*pos + i] != '\'' && src[*pos - + i] != '"' && src[*pos + i] != '$') - { + while (ft_isalnum(src[*pos + i]) || src[*pos + i] == '_') i++; - } - var = malloc(i + 1); - if (var == NULL) + if (i == 0) return ; - var[i] = '\0'; - i--; - while (i >= 0) - { - var[i] = src[*pos + i]; - i--; - } + var = ft_substr(src, *pos, i); value = env_get(env, var); - if (value != NULL) + if (value) { result = ft_strjoin(*dst, value); free(*dst); *dst = result; } - *pos += ft_strlen(var); + *pos += i; + free(var); +} + +static void handle_dollar_sign(char **result, char *str, int *pos, t_env *env) +{ + if (str[*pos + 1] == '?') + { + append_var_exit_code(result, env); + *pos += 2; + } + else if (ft_isalnum(str[*pos + 1]) || str[*pos + 1] == '_') + append_var(result, str, pos, env); + else + { + append_slice(result, str, *pos, *pos + 1); + (*pos)++; + } +} + +char *format_string(char *str, t_env *env, int is_literal) +{ + char *result; + int pos; + int start; + + pos = 0; + start = 0; + result = NULL; + if (!str) + return (NULL); + while (str[pos]) + { + if (str[pos] == '\'' || (str[pos] == '\"' && !is_literal) + || (str[pos] == '$' && !is_literal)) + { + append_slice(&result, str, start, pos); + if (str[pos] == '$') + handle_dollar_sign(&result, str, &pos, env); + else + is_literal ^= (str[pos++] == '\''); + start = pos; + continue ; + } + pos++; + } + return (append_slice(&result, str, start, pos), result); } diff --git a/src/free_token.c b/src/free_token.c index 9b035ac..512ba23 100644 --- a/src/free_token.c +++ b/src/free_token.c @@ -3,14 +3,15 @@ /* ::: :::::::: */ /* free_token.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: dkaiser +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 14:38:57 by dkaiser #+# #+# */ -/* Updated: 2024/08/02 14:23:56 by dkaiser ### ########.fr */ +/* Updated: 2025/01/20 12:49:48 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ #include "token.h" +#include "debug_tools.h" void free_token(t_token *token) { @@ -19,6 +20,7 @@ void free_token(t_token *token) if (token->next != NULL) token->next->previous = NULL; free(token); + token = NULL; } void free_token_and_connect(t_token *token) @@ -28,6 +30,7 @@ void free_token_and_connect(t_token *token) if (token->next != NULL) token->next->previous = token->previous; free(token); + token = NULL; } void free_tokens(t_token *tokens) diff --git a/src/get_cmd_path.c b/src/get_cmd_path.c index 543540b..c35b3bc 100644 --- a/src/get_cmd_path.c +++ b/src/get_cmd_path.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:19:59 by chuhlig #+# #+# */ -/* Updated: 2025/01/15 16:38:39 by dkaiser ### ########.fr */ +/* Updated: 2025/01/19 18:56:22 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -86,7 +86,7 @@ static char *find_in_path(char *cmd, t_env *env, int *return_code) } *return_code = 127; printf("%s:", cmd); - ft_putstr_fd(" command not found", 2); + ft_putstr_fd(" command not found", 2);//output is shit even if its fine for tester return (NULL); } diff --git a/src/handle_redir.c b/src/handle_redir.c new file mode 100644 index 0000000..29bba92 --- /dev/null +++ b/src/handle_redir.c @@ -0,0 +1,103 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* handle_redir.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: chuhlig +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/18 18:34:51 by chuhlig #+# #+# */ +/* Updated: 2025/01/18 18:47:31 by chuhlig ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int handle_input_redirection(t_redirection *redir) +{ + int fd; + + if (redir->type == INPUT_FILE) + { + fd = open_file(redir->specifier, O_RDONLY, 0); + if (fd < 0) + return (-1); + dup2(fd, STDIN_FILENO); + close(fd); + } + else if (redir->type == INPUT_LIMITER) + { + fd = open_file("/tmp/heredoc_tmp", O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + return (-1); + write(fd, redir->specifier, ft_strlen(redir->specifier)); + close(fd); + fd = open_file("/tmp/heredoc_tmp", O_RDONLY, 0); + if (fd < 0) + return (-1); + dup2(fd, STDIN_FILENO); + close(fd); + } + return (0); +} + +int handle_output_redirection(t_redirection *redir) +{ + int fd; + + if (redir->type == OUTPUT_OVERRIDE) + { + fd = open_file(redir->specifier, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + return (-1); + dup2(fd, STDOUT_FILENO); + close(fd); + } + else if (redir->type == OUTPUT_APPEND) + { + fd = open_file(redir->specifier, O_WRONLY | O_CREAT | O_APPEND, 0644); + if (fd < 0) + return (-1); + dup2(fd, STDOUT_FILENO); + close(fd); + } + return (0); +} + +int handle_redirections(t_redirection *redirs) +{ + if (redirs[0].type == INPUT_FILE || redirs[0].type == INPUT_LIMITER) + { + if (handle_input_redirection(&redirs[0]) < 0) + return (-1); + } + if (redirs[1].type == OUTPUT_OVERRIDE || redirs[1].type == OUTPUT_APPEND) + { + if (handle_output_redirection(&redirs[1]) < 0) + return (-1); + } + return (0); +} + +int handle_pipe_parent(int p[2], t_node *node, t_env **env) +{ + int original_stdin; + int result; + + close(p[1]); + original_stdin = dup(STDIN_FILENO); + dup2(p[0], STDIN_FILENO); + result = eval_rec(node->content.pipe.right, env, p[0]); + dup2(original_stdin, STDIN_FILENO); + close(original_stdin); + close(p[0]); + return (result); +} + +int handle_pipe_child(int p[2], t_node *node, t_env **env, int in_fd) +{ + close(p[0]); + dup2(in_fd, STDIN_FILENO); + dup2(p[1], STDOUT_FILENO); + close(p[1]); + exit(eval_rec(node->content.pipe.left, env, in_fd)); +} diff --git a/src/interpreter.c b/src/interpreter.c index c7fe67c..f31e965 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -6,100 +6,41 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:15:49 by chuhlig #+# #+# */ -/* Updated: 2025/01/16 18:44:39 by dkaiser ### ########.fr */ +/* Updated: 2025/01/20 12:48:49 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ #include "debug_tools.h" #include "minishell.h" -int handle_redirections(t_redirection *redirs) +int eval_rec(t_node *node, t_env **env, int in_fd); + +int open_file(char *path, int flags, int mode) { int fd; - if (redirs[0].type == INPUT_FILE) - { - fd = open(redirs[0].specifier, O_RDONLY); - if (fd < 0) - { - perror("open"); - return (-1); - } - dup2(fd, STDIN_FILENO); - close(fd); - } - else if (redirs[0].type == INPUT_LIMITER) - { - fd = open("/tmp/heredoc_tmp", O_WRONLY | O_TRUNC, 0644); - if (fd < 0) - { - perror("open"); - return (-1); - } - write(fd, redirs[0].specifier, ft_strlen(redirs[0].specifier)); - close(fd); - fd = open("/tmp/heredoc_tmp", O_RDONLY); - if (fd < 0) - { - perror("open"); - return (-1); - } - dup2(fd, STDIN_FILENO); - close(fd); - } - if (redirs[1].type == OUTPUT_OVERRIDE) - { - fd = open(redirs[1].specifier, O_WRONLY | O_TRUNC, 0644); - if (fd < 0) - { - perror("open"); - return (-1); - } - dup2(fd, STDOUT_FILENO); - close(fd); - } - else if (redirs[1].type == OUTPUT_APPEND) - { - fd = open(redirs[1].specifier, O_WRONLY | O_APPEND, 0644); - if (fd < 0) - { - perror("open"); - return (-1); - } - dup2(fd, STDOUT_FILENO); - close(fd); - } - return (0); + fd = open(path, flags, mode); + if (fd < 0) + perror("open"); + return (fd); } int eval_rec(t_node *node, t_env **env, int in_fd) { - pid_t pid; int p[2]; + pid_t pid; int result; - int original_stdin; if (node->type == PIPE_NODE) { - pipe(p); + if (pipe(p) == -1) + return (perror("pipe"), EXIT_FAILURE); pid = fork(); + if (pid == -1) + return (perror("fork"), close(p[0]), close(p[1]), EXIT_FAILURE); if (pid == 0) - { - close(p[0]); - dup2(in_fd, STDIN_FILENO); - dup2(p[1], STDOUT_FILENO); - result = eval_rec(node->content.pipe.left, env, in_fd); - exit(result); - } - else - { - close(p[1]); - original_stdin = dup(STDIN_FILENO); - dup2(p[0], STDIN_FILENO); - result = eval_rec(node->content.pipe.right, env, p[0]); - dup2(original_stdin, STDIN_FILENO); - close(original_stdin); - } + handle_pipe_child(p, node, env, in_fd); + result = handle_pipe_parent(p, node, env); } else if (node->type == CMD_NODE) result = execute_cmd(&node->content.cmd, env); diff --git a/src/new_node.c b/src/new_node.c index 83d9159..bbac154 100644 --- a/src/new_node.c +++ b/src/new_node.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* new_node.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: dkaiser +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 11:21:03 by dkaiser #+# #+# */ -/* Updated: 2025/01/16 18:25:54 by dkaiser ### ########.fr */ +/* Updated: 2025/01/19 19:01:01 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,6 +51,7 @@ t_node *new_cmd_node(char **args, t_redirection redirs[2], t_list *create_files) node->content.cmd.redirs[1] = redirs[1]; node->content.cmd.create_files = create_files; free(redirs); + redirs = NULL;//1 return (node); } return (NULL); diff --git a/src/parse_cmd.c b/src/parse_cmd.c index 92dfd12..d13bf3f 100644 --- a/src/parse_cmd.c +++ b/src/parse_cmd.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/08 15:06:25 by dkaiser #+# #+# */ -/* Updated: 2025/01/16 19:06:03 by dkaiser ### ########.fr */ +/* Updated: 2025/01/20 12:44:44 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,7 @@ t_node *parse_cmd(t_token *tokens, t_env **env) { char **args; t_redirection *redirs; - t_list *create_files; + t_list *create_files; create_files = NULL; redirs = collect_redirs(&tokens, *env, &create_files); @@ -36,6 +36,7 @@ t_node *parse_cmd(t_token *tokens, t_env **env) static char **collect_args(t_token **tokens, t_env **env) { t_token *cur; + t_token *next;//2 char **result; int i; @@ -50,12 +51,14 @@ static char **collect_args(t_token **tokens, t_env **env) i = 0; while (cur != NULL && cur->type == STRING_TOKEN) { + next = cur->next;//2 if (cur->previous) free_token(cur->previous); - result[i] = format_string(cur->content.string, *env); + result[i] = format_string(cur->content.string, *env, ft_atoi("0")); i++; - cur = cur->next; + // cur = cur->next; + cur = next;//2 } result[i] = NULL; return (result); -} +} \ No newline at end of file diff --git a/src/parser.c b/src/parser.c index 1375954..aef8d70 100644 --- a/src/parser.c +++ b/src/parser.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/29 15:53:29 by dkaiser #+# #+# */ -/* Updated: 2025/01/11 16:06:54 by chuhlig ### ########.fr */ +/* Updated: 2025/01/19 18:59:00 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,6 +40,7 @@ static t_node *parse_statement(t_token *tokens, t_env **env) if (left_side_tokens == NULL) { free_tokens(tokens); + tokens = NULL;//1 return (NULL); } else if (tokens != NULL) @@ -70,6 +71,7 @@ t_token *split_at_first(t_token **tokens, int type) if (result == split) result = NULL; free_token(split); + split = NULL;//1 return (result); } diff --git a/src/repl.c b/src/repl.c index 5079ee8..15b0a80 100644 --- a/src/repl.c +++ b/src/repl.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 16:07:04 by dkaiser #+# #+# */ -/* Updated: 2025/01/14 15:39:58 by chuhlig ### ########.fr */ +/* Updated: 2025/01/20 12:45:00 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,7 +23,7 @@ void repl(const char *prompt, t_env **env, int *promptflag) while (1) { input = readline(prompt); - if (input == NULL) + if (input == NULL) { if (*promptflag > 1) (*promptflag)--; @@ -41,3 +41,5 @@ void repl(const char *prompt, t_env **env, int *promptflag) free(input); } } + +//echo hi | >./outfiles/outfile01 echo bye >./test_files/invalid_permission \ No newline at end of file diff --git a/src/signal_handling.c b/src/signal_handling.c index c6273d0..6c6ca1e 100644 --- a/src/signal_handling.c +++ b/src/signal_handling.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 15:08:43 by dkaiser #+# #+# */ -/* Updated: 2025/01/14 14:11:29 by chuhlig ### ########.fr */ +/* Updated: 2025/01/20 12:15:32 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/teest.txt b/teest.txt deleted file mode 100644 index 9daeafb..0000000 --- a/teest.txt +++ /dev/null @@ -1 +0,0 @@ -test -- 2.47.2