end pull
This commit is contained in:
commit
86fcb41c2f
19 changed files with 158 additions and 115 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */
|
/* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/07 11:47:50 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:07:59 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -16,19 +16,12 @@
|
||||||
# define PIPE_READ 0
|
# define PIPE_READ 0
|
||||||
# define PIPE_WRITE 1
|
# define PIPE_WRITE 1
|
||||||
|
|
||||||
# define PROCESS_BUILTIN (1 << 0)
|
# define PROCESS_COMPLETED (1 << 0)
|
||||||
# define PROCESS_BINARY (1 << 1)
|
# define PROCESS_SUSPENDED (1 << 1)
|
||||||
# define PROCESS_SCRIPT (1 << 2)
|
# define PROCESS_RUNNING (1 << 2)
|
||||||
# define PROCESS_SUBSHELL (1 << 3)
|
# define PROCESS_CONTINUED (1 << 3)
|
||||||
# define PROCESS_UNKNOWN (1 << 4)
|
|
||||||
# define PROCESS_CONTROL (1 << 5)
|
|
||||||
# define PROCESS_COMPLETED (1 << 6)
|
|
||||||
# define PROCESS_SUSPENDED (1 << 7)
|
|
||||||
# define PROCESS_RUNNING (1 << 8)
|
|
||||||
# define PROCESS_CONTINUED (1 << 9)
|
|
||||||
|
|
||||||
# define PROCESS_TYPE_MASK (1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5)
|
# define PROCESS_STATE_MASK ((1 << 4) - (1 << 0))
|
||||||
# define PROCESS_STATE_MASK (1 << 6 | 1 << 7 | 1 << 8 | 1 << 9)
|
|
||||||
|
|
||||||
# define IS_PIPESTART(p) ((p).fdin == STDIN)
|
# define IS_PIPESTART(p) ((p).fdin == STDIN)
|
||||||
# define IS_PIPEEND(p) ((p).fdout == STDOUT)
|
# define IS_PIPEEND(p) ((p).fdout == STDOUT)
|
||||||
|
|
@ -39,12 +32,13 @@
|
||||||
# define EXEC_OR_IF (1 << 3)
|
# define EXEC_OR_IF (1 << 3)
|
||||||
# define EXEC_IF_BRANCH (1 << 4)
|
# define EXEC_IF_BRANCH (1 << 4)
|
||||||
# define EXEC_CASE_BRANCH (1 << 5)
|
# define EXEC_CASE_BRANCH (1 << 5)
|
||||||
|
|
||||||
|
# define EXEC_AOL_MASK (EXEC_AND_IF | EXEC_OR_IF)
|
||||||
|
|
||||||
# define EXEC_IS_BG(j) (j & EXEC_BG)
|
# define EXEC_IS_BG(j) (j & EXEC_BG)
|
||||||
# define EXEC_IS_FG(j) (!EXEC_IS_BG(j))
|
# define EXEC_IS_FG(j) (!EXEC_IS_BG(j))
|
||||||
# define EXEC_IS_AND_IF(j) (j & EXEC_AND_IF)
|
# define EXEC_IS_AND_IF(j) (j & EXEC_AND_IF)
|
||||||
# define EXEC_IS_OR_IF(j) (j & EXEC_OR_IF)
|
# define EXEC_IS_OR_IF(j) (j & EXEC_OR_IF)
|
||||||
# define EXEC_AOL_MASK (EXEC_AND_IF | EXEC_OR_IF)
|
|
||||||
|
|
||||||
# define EXEC_IS_IF_BRANCH(j) (j & EXEC_IF_BRANCH)
|
# define EXEC_IS_IF_BRANCH(j) (j & EXEC_IF_BRANCH)
|
||||||
# define EXEC_IS_CASE_BRANCH(j) (j & EXEC_CASE_BRANCH)
|
# define EXEC_IS_CASE_BRANCH(j) (j & EXEC_CASE_BRANCH)
|
||||||
|
|
||||||
|
|
@ -52,18 +46,34 @@
|
||||||
# include "types.h"
|
# include "types.h"
|
||||||
# include "job_control.h"
|
# include "job_control.h"
|
||||||
|
|
||||||
|
enum e_process_type
|
||||||
|
{
|
||||||
|
PROCESS_FUNCTION,
|
||||||
|
PROCESS_BUILTIN,
|
||||||
|
PROCESS_FILE,
|
||||||
|
PROCESS_SUBSHELL,
|
||||||
|
PROCESS_WHILE,
|
||||||
|
PROCESS_IF,
|
||||||
|
PROCESS_FOR,
|
||||||
|
PROCESS_CASE,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum e_process_type t_process_type;
|
||||||
|
|
||||||
struct s_process
|
struct s_process
|
||||||
{
|
{
|
||||||
char **av;
|
/* char **av; */
|
||||||
char *path;
|
/* char *path; */
|
||||||
t_execf *execf;
|
/* t_execf *execf; */
|
||||||
pid_t pid;
|
t_process_type type;
|
||||||
int fdin;
|
t_process_data data;
|
||||||
int fdout;
|
pid_t pid;
|
||||||
int to_close;
|
int fdin;
|
||||||
t_list *redirs;
|
int fdout;
|
||||||
int status;
|
int to_close;
|
||||||
t_flag attrs;
|
t_list *redirs;
|
||||||
|
int status;
|
||||||
|
t_flag attrs;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s_exec
|
struct s_exec
|
||||||
|
|
@ -77,22 +87,11 @@ struct s_exec
|
||||||
int control_count;
|
int control_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s_execmap
|
|
||||||
{
|
|
||||||
t_type type;
|
|
||||||
int (*f)(t_btree **ast);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct s_redirmap
|
|
||||||
{
|
|
||||||
t_flag type;
|
|
||||||
int (*f)(t_redir *redir);
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
extern t_execmap g_execmap[];
|
extern t_itof g_execmap[];
|
||||||
extern t_redirmap g_redirmap[];
|
extern t_itof g_redirmap[];
|
||||||
|
extern t_itof g_launchmap[];
|
||||||
|
|
||||||
int ft_exec(t_btree **ast);
|
int ft_exec(t_btree **ast);
|
||||||
|
|
||||||
|
|
@ -127,7 +126,7 @@ void process_free(void *content, size_t content_size);
|
||||||
void process_reset(t_process *p);
|
void process_reset(t_process *p);
|
||||||
void process_resetfds(void);
|
void process_resetfds(void);
|
||||||
|
|
||||||
int fd_is_valid(int fd);
|
int fd_is_valid(int fd, int flag);
|
||||||
int bad_fd(int fd);
|
int bad_fd(int fd);
|
||||||
int process_redirect(t_process *p);
|
int process_redirect(t_process *p);
|
||||||
int redirect_great(t_redir *redir);
|
int redirect_great(t_redir *redir);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */
|
/* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/04 16:46:52 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 14:27:40 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 17:11:48 by jhalford #+# #+# */
|
/* Created: 2016/12/13 17:11:48 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/06 17:51:59 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:08:17 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 6a6a23b2839a5ec7322bdc6adbb2d3dad3d1023c
|
Subproject commit 6a2672a19268c6481525d9aaee5bd35722bbd75a
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 13:09:57 by jhalford #+# #+# */
|
/* Created: 2016/12/13 13:09:57 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/07 11:05:55 by gwojda ### ########.fr */
|
/* Updated: 2017/03/07 15:08:45 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ t_execf *is_builtin(t_process *p)
|
||||||
i = -1;
|
i = -1;
|
||||||
while (g_builtin[++i].name)
|
while (g_builtin[++i].name)
|
||||||
{
|
{
|
||||||
if (ft_strcmp(g_builtin[i].name, p->av[0]) == 0)
|
if (ft_strcmp(g_builtin[i].name, p->data.cmd.av[0]) == 0)
|
||||||
return (g_builtin[i].f);
|
return (g_builtin[i].f);
|
||||||
}
|
}
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
|
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/06 18:51:58 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:09:45 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,16 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/03 13:46:40 by jhalford #+# #+# */
|
/* Created: 2017/02/03 13:46:40 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/05 19:44:16 by jhalford ### ########.fr */
|
/* Updated: 2017/03/06 16:58:38 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
int fd_is_valid(int fd)
|
int fd_is_valid(int fd, int has_flag)
|
||||||
{
|
{
|
||||||
return (fcntl(fd, F_GETFD) != -1 || errno != EBADF);
|
int flags;
|
||||||
|
|
||||||
|
flags = fcntl(fd, F_GETFD);
|
||||||
|
return ((flags != -1 || errno != EBADF) && flags & has_flag);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/27 20:30:32 by jhalford #+# #+# */
|
/* Created: 2016/11/27 20:30:32 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/07 11:50:18 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:08:58 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "exec.h"
|
#include "exec.h"
|
||||||
|
|
||||||
t_execmap g_execmap[] =
|
t_itof g_execmap[] =
|
||||||
{
|
{
|
||||||
{TK_NEWLINE, &exec_semi},
|
{TK_NEWLINE, &exec_semi},
|
||||||
{TK_SEMI, &exec_semi},
|
{TK_SEMI, &exec_semi},
|
||||||
|
|
|
||||||
59
42sh/src/exec/launch_file.c
Normal file
59
42sh/src/exec/launch_file.c
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* launch_file.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2017/03/07 14:53:31 by jhalford #+# #+# */
|
||||||
|
/* Updated: 2017/03/07 14:54:18 by jhalford ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
int launch_file(t_process *p)
|
||||||
|
{
|
||||||
|
int pid;
|
||||||
|
|
||||||
|
if (p->attrs & PROCESS_BUILTIN && IS_PIPESINGLE(*p))
|
||||||
|
{
|
||||||
|
if (process_redirect(p))
|
||||||
|
return (1);
|
||||||
|
set_exitstatus((*p->execf)(p->path, p->av, data_singleton()->env), 1);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
p->attrs &= ~PROCESS_STATE_MASK;
|
||||||
|
p->attrs |= PROCESS_RUNNING;
|
||||||
|
if (p->attrs & (PROCESS_BINARY | PROCESS_SCRIPT)
|
||||||
|
&& access(p->path, X_OK) == -1)
|
||||||
|
{
|
||||||
|
ft_dprintf(2, "{red}%s: permission denied: %s{eoc}\n", SHELL_NAME, p->av[0]);
|
||||||
|
set_exitstatus(126, 1);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
pid = fork();
|
||||||
|
if (pid == 0)
|
||||||
|
{
|
||||||
|
if (p->attrs & PROCESS_UNKNOWN)
|
||||||
|
{
|
||||||
|
ft_dprintf(2, "{red}%s: command not found: %s{eoc}\n", SHELL_NAME, p->av[0]);
|
||||||
|
exit(127);
|
||||||
|
}
|
||||||
|
process_setgroup(p, 0);
|
||||||
|
process_setsig();
|
||||||
|
if (process_redirect(p))
|
||||||
|
exit (1);
|
||||||
|
if (p->attrs & PROCESS_BUILTIN)
|
||||||
|
exit((*p->execf)(p->path, p->av, data_singleton()->env));
|
||||||
|
(*p->execf)(p->path, p->av, data_singleton()->env);
|
||||||
|
ft_dprintf(2, "{red}%s: internal execve error on %s{eoc}\n", SHELL_NAME, p->av[0]);
|
||||||
|
}
|
||||||
|
else if (pid > 0)
|
||||||
|
{
|
||||||
|
p->pid = pid;
|
||||||
|
process_setgroup(p, pid);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
else if (pid == -1)
|
||||||
|
ft_dprintf(2, "{red}%s: internal fork error{eoc}\n", SHELL_NAME);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
@ -6,59 +6,39 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 14:20:45 by jhalford #+# #+# */
|
/* Created: 2016/12/13 14:20:45 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/06 16:20:54 by wescande ### ########.fr */
|
/* Updated: 2017/03/07 15:04:44 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
|
t_itof g_launchmap[] =
|
||||||
|
{
|
||||||
|
{PROCESS_FUNCTION, NULL},
|
||||||
|
{PROCESS_BUILTIN, NULL},
|
||||||
|
{PROCESS_FILE, launch_file},
|
||||||
|
{PROCESS_SUBSHELL, NULL},
|
||||||
|
{PROCESS_WHILE, NULL},
|
||||||
|
{PROCESS_IF, NULL},
|
||||||
|
{PROCESS_FOR, NULL},
|
||||||
|
{PROCESS_CASE, NULL},
|
||||||
|
};
|
||||||
|
|
||||||
int launch_process(t_process *p)
|
int launch_process(t_process *p)
|
||||||
{
|
{
|
||||||
int pid;
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
/* DG("gonna launch [%s]", p->av[0]); */
|
/* DG("gonna launch [%s]", p->av[0]); */
|
||||||
/* DG("fdin=[%i]", p->fdin); */
|
/* DG("fdin=[%i]", p->fdin); */
|
||||||
/* DG("fdout=[%i]", p->fdout); */
|
/* DG("fdout=[%i]", p->fdout); */
|
||||||
if (p->attrs & PROCESS_BUILTIN && IS_PIPESINGLE(*p))
|
while (g_launchmap[i].type)
|
||||||
{
|
{
|
||||||
if (process_redirect(p))
|
if (p->type == g_launchmap[i].type)
|
||||||
return (1);
|
if (!g_launchmap[i].f)
|
||||||
set_exitstatus((*p->execf)(p->path, p->av, data_singleton()->env), 1);
|
return (-1);
|
||||||
return (1);
|
return ((*g_launchmap[i].f)(p));
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
p->attrs &= ~PROCESS_STATE_MASK;
|
return (-1);
|
||||||
p->attrs |= PROCESS_RUNNING;
|
|
||||||
if (p->attrs & (PROCESS_BINARY | PROCESS_SCRIPT)
|
|
||||||
&& access(p->path, X_OK) == -1)
|
|
||||||
{
|
|
||||||
ft_dprintf(2, "{red}%s: permission denied: %s{eoc}\n", SHELL_NAME, p->av[0]);
|
|
||||||
set_exitstatus(126, 1);
|
|
||||||
return (1);
|
|
||||||
}
|
|
||||||
pid = fork();
|
|
||||||
if (pid == 0)
|
|
||||||
{
|
|
||||||
if (p->attrs & PROCESS_UNKNOWN)
|
|
||||||
{
|
|
||||||
ft_dprintf(2, "{red}%s: command not found: %s{eoc}\n", SHELL_NAME, p->av[0]);
|
|
||||||
exit(127);
|
|
||||||
}
|
|
||||||
process_setgroup(p, 0);
|
|
||||||
process_setsig();
|
|
||||||
if (process_redirect(p))
|
|
||||||
exit (1);
|
|
||||||
if (p->attrs & PROCESS_BUILTIN)
|
|
||||||
exit((*p->execf)(p->path, p->av, data_singleton()->env));
|
|
||||||
(*p->execf)(p->path, p->av, data_singleton()->env);
|
|
||||||
ft_dprintf(2, "{red}%s: internal execve error on %s{eoc}\n", SHELL_NAME, p->av[0]);
|
|
||||||
}
|
|
||||||
else if (pid > 0)
|
|
||||||
{
|
|
||||||
p->pid = pid;
|
|
||||||
process_setgroup(p, pid);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
else if (pid == -1)
|
|
||||||
ft_dprintf(2, "{red}%s: internal fork error{eoc}\n", SHELL_NAME);
|
|
||||||
return (1);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 17:07:10 by jhalford #+# #+# */
|
/* Created: 2016/12/13 17:07:10 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/06 12:26:01 by wescande ### ########.fr */
|
/* Updated: 2017/03/07 14:49:45 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -15,18 +15,20 @@
|
||||||
int process_setexec(t_process *p)
|
int process_setexec(t_process *p)
|
||||||
{
|
{
|
||||||
p->path = NULL;
|
p->path = NULL;
|
||||||
if ((p->execf = is_builtin(p)))
|
/* if ((p->execf = is_function(p))) */
|
||||||
p->attrs |= PROCESS_BUILTIN;
|
/* p->type = PROCESS_FUNCTION; */
|
||||||
else if (ft_strchr(p->av[0], '/'))
|
if ((p->data.cmd.execf = is_builtin(p)))
|
||||||
{
|
p->type = PROCESS_BUILTIN;
|
||||||
p->execf = &execve;
|
|
||||||
p->attrs |= PROCESS_SCRIPT;
|
|
||||||
p->path = ft_strdup(p->av[0]);
|
|
||||||
}
|
|
||||||
else if (ft_hash(p))
|
else if (ft_hash(p))
|
||||||
{
|
{
|
||||||
p->execf = &execve;
|
p->data.cmd.execf = &execve;
|
||||||
p->attrs |= PROCESS_BINARY;
|
p->type = PROCESS_FILE;
|
||||||
|
}
|
||||||
|
else if (ft_strchr(p->av[0], '/'))
|
||||||
|
{
|
||||||
|
p->data.cmd.execf = &execve;
|
||||||
|
p->type = PROCESS_FILE;
|
||||||
|
p->data.cmd.path = ft_strdup(p->av[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/06 22:12:31 by jhalford #+# #+# */
|
/* Created: 2017/02/06 22:12:31 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/05 19:44:10 by jhalford ### ########.fr */
|
/* Updated: 2017/03/06 16:54:43 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ int redirect_greatand(t_redir *redir)
|
||||||
return (0);
|
return (0);
|
||||||
if (fdold > 9)
|
if (fdold > 9)
|
||||||
return (bad_fd(fdold));
|
return (bad_fd(fdold));
|
||||||
if (fd_is_valid(fdold))
|
if (fd_is_valid(fdold, O_RDONLY))
|
||||||
dup2_close(fdold, fdnew);
|
dup2_close(fdold, fdnew);
|
||||||
else
|
else
|
||||||
return (bad_fd(fdold));
|
return (bad_fd(fdold));
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/06 22:11:18 by jhalford #+# #+# */
|
/* Created: 2017/02/06 22:11:18 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/05 19:43:42 by jhalford ### ########.fr */
|
/* Updated: 2017/03/06 16:53:29 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ int redirect_lessand(t_redir *redir)
|
||||||
return (0);
|
return (0);
|
||||||
if (fdold > 9)
|
if (fdold > 9)
|
||||||
return (bad_fd(fdold));
|
return (bad_fd(fdold));
|
||||||
if (fd_is_valid(fdold))
|
if (fd_is_valid(fdold, O_WRONLY))
|
||||||
dup2_close(fdold, fdnew);
|
dup2_close(fdold, fdnew);
|
||||||
else
|
else
|
||||||
return (bad_fd(fdold));
|
return (bad_fd(fdold));
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/05 14:54:45 by jhalford #+# #+# */
|
/* Created: 2017/03/05 14:54:45 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/06 18:41:01 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:09:36 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/18 11:20:11 by gwojda #+# #+# */
|
/* Created: 2017/02/18 11:20:11 by gwojda #+# #+# */
|
||||||
/* Updated: 2017/03/04 18:51:01 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 14:43:33 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -23,6 +23,6 @@ int ft_add_hash(t_process *p)
|
||||||
hash.key = ft_strdup(p->av[0]);
|
hash.key = ft_strdup(p->av[0]);
|
||||||
id = ft_hash_str(p->av[0]);
|
id = ft_hash_str(p->av[0]);
|
||||||
ft_lsteadd(&(g_hash[id]), ft_lstnew(&hash, sizeof(t_hash)));
|
ft_lsteadd(&(g_hash[id]), ft_lstnew(&hash, sizeof(t_hash)));
|
||||||
p->path = ft_strdup(hash.path);
|
p->data.cmd.path = ft_strdup(hash.path);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/07 14:43:24 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:53:42 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/11 14:04:48 by jhalford #+# #+# */
|
/* Created: 2017/01/11 14:04:48 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/05 17:45:37 by jhalford ### ########.fr */
|
/* Updated: 2017/03/06 16:52:34 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
|
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
|
||||||
/* Updated: 2017/03/07 15:02:19 by ariard ### ########.fr */
|
/* Updated: 2017/03/07 15:53:23 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue