summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libft/Makefile2
-rw-r--r--libft/include/libft.h2
-rw-r--r--libft/src/ft_abs.c16
-rw-r--r--libft/src/ft_labs.c16
-rw-r--r--src/p_redirs.c21
5 files changed, 46 insertions, 11 deletions
diff --git a/libft/Makefile b/libft/Makefile
index 1c90f66..701d902 100644
--- a/libft/Makefile
+++ b/libft/Makefile
@@ -115,6 +115,8 @@ SRCS_NAME += ft_printf_cat_output.c
SRCS_NAME += ft_printf_flag_to_atoi.c
SRCS_NAME += ft_strsubst.c
SRCS_NAME += ft_strsubst_s.c
+SRCS_NAME += ft_abs.c
+SRCS_NAME += ft_labs.c
#------------------------------------------------------------------------------#
SRCS = $(addprefix ${SRCS_DIR},${SRCS_NAME})
#------------------------------------------------------------------------------#
diff --git a/libft/include/libft.h b/libft/include/libft.h
index edd04d4..d2bea38 100644
--- a/libft/include/libft.h
+++ b/libft/include/libft.h
@@ -163,6 +163,8 @@ int ft_putendl(const char *s);
int ft_putchar_fd(char c, int fd);
int ft_putstr_fd(char *s, int fd);
int ft_strcmp(const char *s1, const char *s2);
+int ft_abs(int j);
+long ft_labs(long j);
long ft_memlchr(const void *s, int c, size_t n);
long ft_strlchr(const char *s, int c);
size_t ft_strlen(const char *s);
diff --git a/libft/src/ft_abs.c b/libft/src/ft_abs.c
new file mode 100644
index 0000000..c732fee
--- /dev/null
+++ b/libft/src/ft_abs.c
@@ -0,0 +1,16 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_abs.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+int ft_abs(int j)
+{
+ return ((j < 0) ? (-j) : (j));
+}
diff --git a/libft/src/ft_labs.c b/libft/src/ft_labs.c
new file mode 100644
index 0000000..980c005
--- /dev/null
+++ b/libft/src/ft_labs.c
@@ -0,0 +1,16 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_labs.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+long ft_labs(long j)
+{
+ return ((j < 0) ? (-j) : (j));
+}
diff --git a/src/p_redirs.c b/src/p_redirs.c
index b615d01..eeaefea 100644
--- a/src/p_redirs.c
+++ b/src/p_redirs.c
@@ -56,28 +56,27 @@ static size_t p_get_path(char path[],
{
char h[PATH_MAX];
size_t pos[2];
- size_t hlen;
- size_t len;
+ size_t len[2];
- hlen = 0;
- tmp.redir = (tmp.redir < 0) ? (-tmp.redir) : (tmp.redir);
- tmp.ptr += tmp.redir;
+ len[1] = 0;
+ tmp.ptr += ft_abs(tmp.redir);
+ tmp.ptr += (tmp.redir == -2 && *tmp.ptr == '-') ? (1) : (0);
while (*tmp.ptr != C_NUL && ft_iswhitespace(*tmp.ptr) == TRUE)
tmp.ptr++;
if (*tmp.ptr == C_TILDE && u_get_var_value(h, "$HOME", PATH_MAX, msh) == 0)
{
ft_strlcpy(path, h, PATH_MAX);
- hlen = ft_strlen(h);
+ len[1] = ft_strlen(h);
tmp.ptr++;
}
pos[0] = (tmp.ptr - tmp.word);
- while (*tmp.ptr != C_NUL && ft_iswhitespace(*tmp.ptr) == FALSE &&
- u_is_not_escaped(tmp.word, tmp.ptr) == TRUE)
+ while (*tmp.ptr != C_NUL && ft_iswhitespace(*tmp.ptr) == FALSE
+ && u_is_not_escaped(tmp.word, tmp.ptr) == TRUE)
tmp.ptr++;
pos[1] = (tmp.ptr - tmp.word);
- len = (pos[1] - pos[0]);
- len = ((hlen + len + 1) > PATH_MAX) ? (PATH_MAX - 1) : (len);
- ft_strlcpy(path + hlen, tmp.word + pos[0], len + 1);
+ len[0] = (pos[1] - pos[0]);
+ len[0] = ((len[1] + len[0] + 1) > PATH_MAX) ? (PATH_MAX - 1) : (len[0]);
+ ft_strlcpy(path + len[1], tmp.word + pos[0], len[0] + 1);
return (pos[1]);
}