summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--TODO.org1
-rw-r--r--src/d_define.h1
-rw-r--r--src/f_alloc.c4
-rw-r--r--src/f_chdir.c2
-rw-r--r--src/f_errno.c2
-rw-r--r--src/f_fail.c2
-rw-r--r--src/f_file.c2
-rw-r--r--src/f_redir.c2
-rw-r--r--src/m_argv.c4
-rw-r--r--src/m_minishell.c7
-rw-r--r--src/s_destroy.c1
-rw-r--r--src/s_init.c7
-rw-r--r--src/s_init.h3
-rw-r--r--src/s_struct.h3
-rw-r--r--src/u_vars.c15
15 files changed, 32 insertions, 24 deletions
diff --git a/TODO.org b/TODO.org
index 47f5316..aa54a35 100644
--- a/TODO.org
+++ b/TODO.org
@@ -49,4 +49,5 @@
** TODO [#C] if else
** TODO [#C] <<
** TODO [#C] Termcaps
+** TODO [#C] -i option (alias in scripts, etc)
** TODO [#C] Simple arithmetics $((a + 1))
diff --git a/src/d_define.h b/src/d_define.h
index 674a141..fb387b3 100644
--- a/src/d_define.h
+++ b/src/d_define.h
@@ -49,7 +49,6 @@
** ====== VARS ======
*/
-#define FT_ZER_VAR "$0"
#define FT_RET_VAR "$?"
#define FT_PID_VAR "$$"
#define FT_ARGC_VAR "$#"
diff --git a/src/f_alloc.c b/src/f_alloc.c
index 641bc9f..c1e0c76 100644
--- a/src/f_alloc.c
+++ b/src/f_alloc.c
@@ -26,7 +26,7 @@ void
char tmp[255];
s_line_clear(&msh->curr);
- ft_strlcpy(tmp, msh->shname, ft_strlen(msh->shname) + 1);
+ ft_strlcpy(tmp, msh->argv[0], 255);
s_destroy(msh);
ft_dprintf(STDERR_FILENO, "%s: %s\n", tmp, strerror(errno));
exit(FT_RET_ALLOC);
@@ -36,5 +36,5 @@ void
f_alloc_and_clear_line(t_msh *msh)
{
s_line_clear(&msh->curr);
- ft_dprintf(STDERR_FILENO, "%s: %s\n", msh->shname, strerror(errno));
+ ft_dprintf(STDERR_FILENO, "%s: %s\n", msh->argv[0], strerror(errno));
}
diff --git a/src/f_chdir.c b/src/f_chdir.c
index 4623c82..ce69ca5 100644
--- a/src/f_chdir.c
+++ b/src/f_chdir.c
@@ -23,5 +23,5 @@ void
t_msh *msh)
{
ft_dprintf(STDERR_FILENO, "%s: %s: %s: %s\n",
- msh->shname, concern, path, strerror(errno));
+ msh->argv[0], concern, path, strerror(errno));
}
diff --git a/src/f_errno.c b/src/f_errno.c
index 360cf9f..4fd53a6 100644
--- a/src/f_errno.c
+++ b/src/f_errno.c
@@ -22,5 +22,5 @@ void
t_msh *msh)
{
ft_dprintf(STDERR_FILENO, "%s: %s: %s\n",
- msh->shname, concern, strerror(errno));
+ msh->argv[0], concern, strerror(errno));
}
diff --git a/src/f_fail.c b/src/f_fail.c
index 3704b1f..c4868b2 100644
--- a/src/f_fail.c
+++ b/src/f_fail.c
@@ -24,7 +24,7 @@ static void
const char msg[],
t_msh *msh)
{
- ft_dprintf(STDERR_FILENO, "%s: %s: %s\n", msh->shname, concern, msg);
+ ft_dprintf(STDERR_FILENO, "%s: %s: %s\n", msh->argv[0], concern, msg);
}
void
diff --git a/src/f_file.c b/src/f_file.c
index c26596c..47b9ab6 100644
--- a/src/f_file.c
+++ b/src/f_file.c
@@ -23,7 +23,7 @@ void
f_open_file(char filename[],
t_msh *msh)
{
- ft_dprintf(STDERR_FILENO, "%s: %s: %s\n", msh->shname,
+ ft_dprintf(STDERR_FILENO, "%s: %s: %s\n", msh->argv[0],
filename,
strerror(errno));
s_destroy(msh);
diff --git a/src/f_redir.c b/src/f_redir.c
index 71e5613..2883977 100644
--- a/src/f_redir.c
+++ b/src/f_redir.c
@@ -24,7 +24,7 @@ void
t_msh *msh)
{
ft_dprintf(STDERR_FILENO, "%s: %s: %s\n",
- msh->shname, path, strerror(errno));
+ msh->argv[0], path, strerror(errno));
s_line_clear(&msh->curr);
s_destroy(msh);
exit(1);
diff --git a/src/m_argv.c b/src/m_argv.c
index 7661ef7..bd415ec 100644
--- a/src/m_argv.c
+++ b/src/m_argv.c
@@ -56,6 +56,8 @@ static void m_read_script(char *const argv[], t_msh *msh)
if ((fd = open(*(argv + 1), O_RDONLY)) == -1)
f_open_file(*(argv + 1), msh);
msh->fd = fd;
+ msh->argv = (char**)(argv + 1);
+ msh->argc -= 1;
msh->ret = m_loop(fd, msh);
close(fd);
}
@@ -75,7 +77,7 @@ uint8_t m_argv(int argc, char *const argv[], t_msh *msh)
if (*(argv + 2) == NULL)
{
ft_dprintf(STDERR_FILENO, "%s: %s: option requires an argument\n",
- msh->shname, FT_OPT_COMMAND);
+ msh->argv[0], FT_OPT_COMMAND);
return (2);
}
msh->ret = m_comm(*(argv + 2), msh);
diff --git a/src/m_minishell.c b/src/m_minishell.c
index 6be605a..aac3af7 100644
--- a/src/m_minishell.c
+++ b/src/m_minishell.c
@@ -23,15 +23,12 @@
#include "s_init.h"
#include "s_destroy.h"
-int
- main(int argc,
- char *const argv[],
- char *const envp[])
+int main(int argc, char *const argv[], char *const envp[])
{
int32_t ret;
t_msh *msh;
- if ((msh = init_msh(argv, envp)) == NULL)
+ if ((msh = init_msh(argc, argv, envp)) == NULL)
{
ft_dprintf(STDERR_FILENO, "%s\n", strerror(errno));
return (FT_RET_ALLOC);
diff --git a/src/s_destroy.c b/src/s_destroy.c
index 3e7eb21..12c2f7d 100644
--- a/src/s_destroy.c
+++ b/src/s_destroy.c
@@ -20,7 +20,6 @@ void
s_destroy(t_msh *msh)
{
ft_memdel((void*)&msh->prev_hist);
- ft_memdel((void*)&msh->shname);
ft_memdel((void*)&msh->cwd);
ft_delwords(msh->envp);
lvars_clear(&msh->vars);
diff --git a/src/s_init.c b/src/s_init.c
index 7d2b656..c71ac9a 100644
--- a/src/s_init.c
+++ b/src/s_init.c
@@ -155,19 +155,18 @@ static void
}
}
-t_msh
- *init_msh(char *const argv[], char *const envp[])
+t_msh *init_msh(int32_t argc, char *const argv[], char *const envp[])
{
char cwd[PATH_MAX];
t_msh *msh;
if ((msh = (t_msh*)malloc(sizeof(t_msh))) == NULL)
return (NULL);
- if ((msh->shname = ft_strdup(argv[0])) == NULL)
- return (NULL);
msh->envp = NULL;
if ((msh->envp = dupenv(envp)) == NULL)
return (NULL);
+ msh->argc = argc - 1;
+ msh->argv = (char**)argv;
msh->ret = 0;
init_buptr(msh);
msh->fd = 0;
diff --git a/src/s_init.h b/src/s_init.h
index 3539086..a598043 100644
--- a/src/s_init.h
+++ b/src/s_init.h
@@ -14,9 +14,10 @@
#define S_INIT_H
#include <stdlib.h>
+#include <stdint.h>
#include "s_struct.h"
-t_msh *init_msh(char *const argv[], char *const envp[]);
+t_msh *init_msh(int32_t argc, char *const argv[], char *const envp[]);
#endif
diff --git a/src/s_struct.h b/src/s_struct.h
index c9f86e1..f47eda0 100644
--- a/src/s_struct.h
+++ b/src/s_struct.h
@@ -80,13 +80,14 @@ typedef struct s_msh
struct s_lpipes *pipes;
struct s_lvars *vars;
struct s_lalias *alias;
+ int32_t argc;
+ char **argv;
char **envp;
char *prev_hist;
char *curr_hist;
char ps[4][255];
char env_fork_tmp[128][4096];
char sqb_ref[FT_ID_SQB_COUNT][4];
- char *shname;
char *cwd;
int32_t fd;
uint8_t (*bu_ptr[FT_BUILTINS_COUNT])(char **, struct s_msh*);
diff --git a/src/u_vars.c b/src/u_vars.c
index 28040b4..eafcace 100644
--- a/src/u_vars.c
+++ b/src/u_vars.c
@@ -54,16 +54,25 @@ static void
size_t dstsize,
t_msh *msh)
{
- char tmp[4];
+ char tmp[255];
+ int32_t n;
if (ft_strncmp(varname, FT_RET_VAR, 3) == 0)
{
ft_uitoa_s(tmp, msh->ret);
ft_strlcpy(str, tmp, 4);
}
- else if (ft_strncmp(varname, FT_ZER_VAR, 3) == 0)
+ else if (ft_strncmp(varname, FT_ARGC_VAR, 3) == 0)
{
- ft_strlcpy(str, msh->shname, dstsize);
+ ft_uitoa_s(tmp, msh->argc);
+ ft_strlcpy(str, tmp, 255);
+ }
+ else if (ft_strlen(varname) == 2 && ft_isdigit(*(varname + 1)) == TRUE)
+ {
+ if ((n = ft_atoi(varname + 1)) < msh->argc)
+ ft_strlcpy(str, msh->argv[n], dstsize);
+ else
+ (void)ft_memcpy(str, "", 1 * sizeof(char));
}
}