update: added echo builtin

This commit is contained in:
2025-11-02 03:14:43 +01:00
parent 52807ca13c
commit 214d7c24d2
4 changed files with 138 additions and 1 deletions

View File

@@ -6,7 +6,7 @@
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */ /* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/29 22:09:51 by sede-san #+# #+# */ /* Created: 2025/10/29 22:09:51 by sede-san #+# #+# */
/* Updated: 2025/11/01 20:09:41 by sede-san ### ########.fr */ /* Updated: 2025/11/02 03:13:46 by sede-san ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -24,6 +24,10 @@
extern u_int8_t builtin_cd(t_command cmd, t_minishell *msh); extern u_int8_t builtin_cd(t_command cmd, t_minishell *msh);
// echo.c
extern u_int8_t builtin_echo(t_command cmd);
// exit.c // exit.c
extern u_int8_t builtin_exit(t_command cmd, t_minishell *msh); extern u_int8_t builtin_exit(t_command cmd, t_minishell *msh);

32
src/builtins/echo/echo.c Normal file
View File

@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* echo.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/31 02:41:11 by sede-san #+# #+# */
/* Updated: 2025/11/02 03:12:00 by sede-san ### ########.fr */
/* */
/* ************************************************************************** */
#include "builtins.h"
#include "echo_def.h"
u_int8_t builtin_echo(
t_command cmd
){
const t_args args = read_args(cmd);
size_t i;
i = -1;
while (args.strings.data.sp[++i])
{
ft_putstr(args.strings.data.sp[i]);
if (args.strings.data.sp[i + 1])
ft_putchar(SPACE);
}
if (args.no_newline.data.b == false)
ft_putchar(NEWLINE);
return (EXIT_SUCCESS);
}

View File

@@ -0,0 +1,69 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* echo_def.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/11/01 20:06:30 by sede-san #+# #+# */
/* Updated: 2025/11/02 03:11:01 by sede-san ### ########.fr */
/* */
/* ************************************************************************** */
#include "echo_def.h"
static void assign_flags(t_args *args, t_command cmd, size_t *i);
static u_int8_t is_valid_flag(t_args *args, char *flag);
static void assign_default_flags(
t_args *args
){
args->no_newline = (t_arg){
.short_name = 'n', .long_name = NULL,
.data = {.b = false}
};
}
t_args read_args(
t_command cmd
){
t_args args;
size_t i;
assign_default_flags(&args);
i = 0;
assign_flags(&args, cmd, &i);
args.strings.data.sp = &cmd.argv[i];
return (args);
}
static void assign_flags(
t_args *args,
t_command cmd,
size_t *i
){
while (cmd.argv[++(*i)] && ft_strchr(cmd.argv[*i], '-'))
{
if (!is_valid_flag(args, cmd.argv[*i]))
break ;
else
args->no_newline.data.b = true;
}
}
static u_int8_t is_valid_flag(
t_args *args,
char *flag
){
size_t i;
if (!flag[1])
return (0);
i = 0;
while (flag[++i])
{
if (flag[i] != args->no_newline.short_name)
return (0);
}
return (1);
}

View File

@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* echo_def.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/10/31 10:31:08 by sede-san #+# #+# */
/* Updated: 2025/11/02 03:11:10 by sede-san ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef ECHO_DEF_H
# define ECHO_DEF_H
# include "builtins.h"
typedef struct s_args
{
t_arg no_newline;
t_arg strings;
} t_args;
/******************************************************************************/
/* Functions */
/******************************************************************************/
// echo_def.c
extern t_args read_args(t_command cmd);
#endif /* ECHO_DEF_H */