Push sur ta branche

This commit is contained in:
Etienne Rey-bethbeder 2023-02-02 17:40:09 +01:00
commit 13d412ea71
27 changed files with 268 additions and 42 deletions

View File

@ -1,4 +1,5 @@
SRCS = env.c UTILS_SRC = utils/ft_is_in_quote.c utils/ft_strncpy.c utils/ft_strreplace.c utils/ft_strnchr.c utils/ft_getstr.c
SRCS = env.c ${UTILS_SRC}
OBJS = ${SRCS:.c=.o} OBJS = ${SRCS:.c=.o}
@ -16,7 +17,7 @@ LIBS = libftx/libftx.a
all: ${NAME} all: ${NAME}
${NAME}: ${OBJS} ${NAME}: ${OBJS}
make -C libftx make -C libftx all
${CC} ${OBJS} -o ${NAME} ${LIBS} ${CC} ${OBJS} -o ${NAME} ${LIBS}
clean: clean:

BIN
argprinter Executable file

Binary file not shown.

96
env.c
View File

@ -1,6 +1,50 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* env.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/02 14:39:56 by erey-bet #+# #+# */
/* Updated: 2023/02/02 17:39:56 by erey-bet ### ########.fr */
/* */
/* ************************************************************************** */
#include "env.h" #include "env.h"
#include "libftx/libftx.h" #include "libftx/libftx.h"
void print_export(t_list **head, int fd)
{
t_list *current;
char *ctn;
current = *head;
while (current != NULL)
{
ctn = current->content;
if (*(ft_strchr(ctn, '=') - 1) != '_')
{
write(fd, "declare -x ", 11);
ft_putstr_fd(ctn, fd);
write(fd, "\n", 1);
}
current = current->next;
}
}
void print_env(t_list **head, int fd)
{
t_list *current;
current = *head;
while (current != NULL)
{
ft_putstr_fd(current->content, fd);
write(fd, "\n", 1);
current = current->next;
}
}
int strcmp_alphabet(char *s1, char *s2) int strcmp_alphabet(char *s1, char *s2)
{ {
int i; int i;
@ -28,28 +72,34 @@ void ft_double_swap(char **a, char **b)
*b = c; *b = c;
} }
void exchange(char **a, char **b, char **c)
{
void *d;
d = *a;
*a = *b;
*b = *c;
*c = d;
}
void add_sort(t_list **head, char *str) void add_sort(t_list **head, char *str)
{ {
t_list *current; t_list *current;
char *last; char *last;
current = *head; current = *head;
while (current->next != NULL) while (current->next != NULL && strcmp_alphabet(str, current->content) != 0)
{
if (strcmp_alphabet(str, current->content) == 0)
break ;
current = current->next; current = current->next;
} if (strcmp_alphabet(str, current->content) == 1)
last = current->content; last = str;
current->content = str; else
exchange(&last, (char **)(&current->content), &str);
while (current != NULL) while (current != NULL)
{ {
if (current->next == NULL) if (current->next == NULL)
{
current->next = ft_calloc(1, sizeof(t_list)); current->next = ft_calloc(1, sizeof(t_list));
if (current->next == NULL) if (current->next == NULL)
return ; return ;
}
current = current->next; current = current->next;
if (current->content == NULL) if (current->content == NULL)
{ {
@ -57,7 +107,7 @@ void add_sort(t_list **head, char *str)
return ; return ;
} }
else else
ft_double_swap((char**)(&current->content), &last); ft_double_swap((char **)(&current->content), &last);
} }
} }
@ -66,34 +116,24 @@ t_list **init_env(char **env)
t_list **head; t_list **head;
int i; int i;
head = ft_calloc(1, sizeof(t_list*)); head = ft_calloc(1, sizeof(t_list *));
*head = ft_calloc(1, sizeof(t_list)); *head = ft_calloc(1, sizeof(t_list));
if (*head == NULL) if (*head == NULL)
return (NULL); return (NULL);
i = -1; i = -1;
while (env[++i]) while (env[++i])
{ {
if (ft_strnstr(env[i], "XDG_SESSION_CLASS=user", 200)) if (ft_strnstr(env[i], "XMODIFIERS=@im=ibus", 200))
write(1, "", 0); write(1, "", 0);
add_sort(head, env[i]); add_sort(head, env[i]);
} }
//current->next = NULL; return (head);
return(head);
} }
int main(int argc, char *argv[], char **env) /*int main(int argc, char *argv[], char **env)
{ {
t_list **new_env;
t_list *current;
(void)argc; (void)argc;
(void)argv; (void)argv;
new_env = init_env(env); print_export(init_env(env));
current = *new_env;
while (current != NULL)
{
ft_printf("%s\n", current->content);
current = current->next;
}
return (0); return (0);
} }*/

BIN
env.o

Binary file not shown.

Binary file not shown.

View File

@ -6,7 +6,7 @@
/* By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ */ /* By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/09/26 14:47:54 by cchauvet #+# #+# */ /* Created: 2022/09/26 14:47:54 by cchauvet #+# #+# */
/* Updated: 2023/01/18 19:21:40 by cchauvet ### ########.fr */ /* Updated: 2023/02/01 16:20:05 by cchauvet ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -18,6 +18,7 @@
char *ft_ultoa_base(unsigned long long n, char *base); char *ft_ultoa_base(unsigned long long n, char *base);
int ft_printf(const char *format, ...); int ft_printf(const char *format, ...);
int ft_eprintf(const char *format, ...);
char *get_next_line(int fd); char *get_next_line(int fd);
size_t ft_random_generator(size_t start, size_t stop); size_t ft_random_generator(size_t start, size_t stop);
void ft_freer_tab_ultimate(size_t len, ...); void ft_freer_tab_ultimate(size_t len, ...);

View File

@ -6,13 +6,13 @@
# By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ # # By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/09/27 08:39:27 by cchauvet #+# #+# # # Created: 2022/09/27 08:39:27 by cchauvet #+# #+# #
# Updated: 2023/01/05 18:25:05 by cchauvet ### ########.fr # # Updated: 2023/02/01 16:19:19 by cchauvet ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
CC = clang CC = clang
SRCS = ft_dprintarg.c ft_dprintflag.c ft_dprintl_base.c ft_dprintptr.c ft_dprintstrtab.c ft_dprintul_base.c ft_dprintul.c ft_dprintx.c ft_dprintX.c ft_isarg.c ft_isdigit.c ft_printf.c ft_putchar_fd.c ft_putstr_fd.c ft_skipflag.c ft_strlen.c ft_vdprintf.c SRCS = ft_dprintarg.c ft_dprintflag.c ft_dprintl_base.c ft_dprintptr.c ft_dprintstrtab.c ft_dprintul_base.c ft_dprintul.c ft_dprintx.c ft_dprintX.c ft_isarg.c ft_isdigit.c ft_printf.c ft_putchar_fd.c ft_putstr_fd.c ft_skipflag.c ft_strlen.c ft_vdprintf.c ft_eprintf.c
OBJS = ${SRCS:.c=.o} OBJS = ${SRCS:.c=.o}

View File

@ -0,0 +1,24 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_eprintf.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 22:01:28 by cchauvet #+# #+# */
/* Updated: 2023/02/01 16:18:46 by cchauvet ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
int ft_printf(const char *format, ...)
{
va_list va;
int i;
va_start(va, format);
i = ft_vdprintf(2, format, va);
va_end(va);
return (i);
}

BIN
libftx/printf/ft_eprintf.o Normal file

Binary file not shown.

Binary file not shown.

View File

@ -6,7 +6,7 @@
/* By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ */ /* By: cchauvet <cchauvet@student.42angoulem +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/09/26 14:47:54 by cchauvet #+# #+# */ /* Created: 2022/09/26 14:47:54 by cchauvet #+# #+# */
/* Updated: 2023/01/05 17:36:39 by cchauvet ### ########.fr */ /* Updated: 2023/02/01 16:19:38 by cchauvet ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -32,6 +32,7 @@ int ft_dprintarg(int fd, int c, va_list va);
int ft_dprintstrtab(int fd, char **tab); int ft_dprintstrtab(int fd, char **tab);
int ft_printf(const char *format, ...); int ft_printf(const char *format, ...);
int ft_eprintf(const char *format, ...);
int ft_vdprintf(int fd, const char *format, va_list va); int ft_vdprintf(int fd, const char *format, va_list va);

47
main.c
View File

@ -1,11 +1,56 @@
#include "minishell.h" #include "minishell.h"
int ft_get_infile(char **line)
{
size_t i;
char *path;
path = NULL;
i = 0;
while ((*line)[i] != '\0')
{
if ((*line)[i] == '<' && ft_is_in_quote(*line, i) == 0)
{
if (path != NULL)
free(path);
path = ft_getstr(*line, i);
if (path == NULL)
return (-1);
if (ft_file_is_readable(path) == 0)
{
free(path);
return (-1);
}
}
i++;
}
return (open(path, O_RDONLY));
}
t_list **ft_parse_cmd(char *line) t_list **ft_parse_cmd(char *line)
{ {
ft_split() char infile;
char outfile;
t_list **cmds;
size_t i;
(void) outfile;
(void) cmds;
i = 0;
while (line[i] != '\0')
{
i++;
}
} }
int main(int ac, char **av) int main(int ac, char **av)
{ {
int fd;
int i;
if (ac == 1)
return (1);
ft_parse_cmd(av[1]);
return (1);
} }

BIN
main.o Normal file

Binary file not shown.

BIN
minishell

Binary file not shown.

View File

@ -1,13 +1,13 @@
#ifndef FT_MINISHELL #ifndef FT_MINISHELL
# define FT_MINISHELL # define FT_MINISHELL
# include "libftx/libftx.h" # include "libftx/libftx.h"
# include "utils/utils.h"
# include <sys/types.h>
# include <sys/stat.h>
# include <fcntl.h>
typedef struct s_list int ft_file_is_readable(char *path);
{ int ft_file_is_writeable(char *path);
void *content;
void *next;
int tag;
} t_list
typedef struct cmd typedef struct cmd
{ {

BIN
utils/.ft_is_a_quote.c.swp Normal file

Binary file not shown.

27
utils/ft_getstr.c Normal file
View File

@ -0,0 +1,27 @@
#include "utils.h"
char *ft_getstr(char *str, size_t n)
{
size_t start;
size_t stop;
char c;
int quote;
start = n;
stop = n;
quote = ft_is_in_quote(str, n);
if (quote == 0)
c = ' ';
else
{
if (quote == 1)
c = '\'';
else
c = '"';
}
while (str[start - 1] != c && start > 0)
start--;
while (str[stop] != c && str[stop] != '\0')
stop++;
return (ft_strndup(str + start, stop - start));
}

BIN
utils/ft_getstr.o Normal file

Binary file not shown.

29
utils/ft_is_in_quote.c Normal file
View File

@ -0,0 +1,29 @@
#include "utils.h"
int ft_is_in_quote(char *str, size_t n)
{
size_t double_quoted;
size_t simple_quoted;
size_t i;
double_quoted = 0;
simple_quoted = 0;
i = 0;
while (str[i] != '\0' && i < n)
{
if (str[i] == '"')
{
if (simple_quoted == 0)
double_quoted = !double_quoted;
}
if (str[i] == '\'')
{
if (double_quoted == 0)
simple_quoted = !simple_quoted;
}
i++;
}
return (simple_quoted == 1 + (double_quoted == 1) * 2);
}

BIN
utils/ft_is_in_quote.o Normal file

Binary file not shown.

15
utils/ft_strnchr.c Normal file
View File

@ -0,0 +1,15 @@
#include "utils.h"
ssize_t ft_strnchr(char *str, char c)
{
size_t i;
i = 0;
while (str[i] != '\0')
{
if (str[i] == c)
return (i);
i++;
}
return (-1);
}

BIN
utils/ft_strnchr.o Normal file

Binary file not shown.

14
utils/ft_strncpy.c Normal file
View File

@ -0,0 +1,14 @@
#include "utils.h"
size_t ft_strncpy(char *dst, char *src, size_t n)
{
size_t i;
i = 0;
while (i < n)
{
dst[i] = src[i];
i++;
}
return (i);
}

BIN
utils/ft_strncpy.o Normal file

Binary file not shown.

17
utils/ft_strreplace.c Normal file
View File

@ -0,0 +1,17 @@
#include "utils.h"
char *ft_strreplace(char *str, char *fill, size_t start, size_t stop)
{
char *out;
size_t sum;
out = malloc((ft_strlen(str) + ft_strlen(fill) - (stop - start) + 1 * sizeof(char)));
if (out == NULL)
return (NULL);
ft_strncpy(out, str, start);
ft_strncpy(out + start, fill, ft_strlen(fill));
sum = start + ft_strlen(fill);
ft_strncpy(out + sum, str + stop, ft_strlen(str) - stop);
out[sum + ft_strlen(str) - stop] = '\0';
return (out);
}

BIN
utils/ft_strreplace.o Normal file

Binary file not shown.

12
utils/utils.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef FT_UTILS
# define FT_UTILS
# include <stdlib.h>
# include "../libftx/libftx.h"
size_t ft_strncpy(char *dst, char *src, size_t n);
int ft_is_in_quote(char *str, size_t n);
char *ft_strreplace(char *str, char *fill, size_t start, size_t stop);
ssize_t ft_strnchr(char *str, char c);
char *ft_getstr(char *str, size_t n);
#endif