mirror of
https://github.com/zoriya/ash.git
synced 2026-06-08 04:30:47 +00:00
@@ -26,6 +26,7 @@ SRC = src/shell.c \
|
||||
src/builtin/builtin_where.c \
|
||||
src/builtin/builtin_alias.c \
|
||||
src/builtin/builtin_unalias.c \
|
||||
src/builtin/builtin_echo.c \
|
||||
src/signal.c \
|
||||
src/free_env.c \
|
||||
src/utility/same_var.c \
|
||||
@@ -54,6 +55,8 @@ TESTS = tests/tenv.c \
|
||||
tests/targc.c \
|
||||
tests/texecute.c \
|
||||
tests/tcd.c \
|
||||
tests/tsource.c \
|
||||
tests/techo.c
|
||||
|
||||
COVERAGE = -lcriterion --coverage
|
||||
|
||||
|
||||
+5
-1
@@ -28,6 +28,7 @@ int builtin_source(char **argv, env_t *env);
|
||||
int builtin_history(char **args, env_t *env);
|
||||
int builtin_alias(char **args, env_t *env);
|
||||
int builtin_unalias(char **args, env_t *env);
|
||||
int builtin_echo(char **args, env_t *env);
|
||||
//utility
|
||||
bool find_path_in_builtins(char *cmd);
|
||||
char **get_envpath(env_t *env);
|
||||
@@ -52,4 +53,7 @@ void print_aliases(alias_t *list);
|
||||
int add_alias_to_list(alias_t **list, alias_t *elem, char *alias);
|
||||
|
||||
//unalias
|
||||
void remove_alias(char *alias, alias_t **list);
|
||||
void remove_alias(char *alias, alias_t **list);
|
||||
|
||||
//echo
|
||||
int print_char(char *str, int i);
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
** EPITECH PROJECT, 2020
|
||||
** builtin_echo.c
|
||||
** File description:
|
||||
** builtin_echo
|
||||
*/
|
||||
|
||||
#include "builtin.h"
|
||||
#include <shell.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int builtin_echo(char **argv, env_t *env)
|
||||
{
|
||||
for (int i = 1; argv[i]; i++) {
|
||||
for (int j = 0; argv[i][j]; j++)
|
||||
j += print_char(argv[i], j);
|
||||
if (argv[i + 1])
|
||||
printf(" ");
|
||||
}
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
env->vars = my_setenv(env->vars, "?", "0");
|
||||
return (0);
|
||||
}
|
||||
|
||||
int print_char(char *str, int i)
|
||||
{
|
||||
if (str[i] == '\\' && str[i + 1] == 'a')
|
||||
return (printf("\a"));
|
||||
if (str[i] == '\\' && str[i + 1] == 'b')
|
||||
return (printf("\b"));
|
||||
if (str[i] == '\\' && str[i + 1] == 't')
|
||||
return (printf("\t"));
|
||||
if (str[i] == '\\' && str[i + 1] == 'n')
|
||||
return (printf("\n"));
|
||||
if (str[i] == '\\' && str[i + 1] == 'v')
|
||||
return (printf("\v"));
|
||||
if (str[i] == '\\' && str[i + 1] == 'f')
|
||||
return (printf("\f"));
|
||||
if (str[i] == '\\' && str[i + 1] == 'r')
|
||||
return (printf("\r"));
|
||||
if (str[i] == '\\') {
|
||||
printf("\\%c", str[i + 1]);
|
||||
return (1);
|
||||
}
|
||||
printf("%c", str[i]);
|
||||
return (0);
|
||||
}
|
||||
@@ -27,6 +27,7 @@ const builtin builtins[] = {
|
||||
{"source", &builtin_source},
|
||||
{"alias", &builtin_alias},
|
||||
{"unalias", &builtin_unalias},
|
||||
{"echo", &builtin_echo},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
** EPITECH PROJECT, 2020
|
||||
** test_echo.c
|
||||
** File description:
|
||||
** techo
|
||||
*/
|
||||
|
||||
#include <criterion/redirect.h>
|
||||
#include <criterion/criterion.h>
|
||||
#include "builtin.h"
|
||||
|
||||
Test(echo, normal_message, .init = cr_redirect_stdout)
|
||||
{
|
||||
env_t env = {};
|
||||
char *av[] = {"echo", "hello", NULL};
|
||||
builtin_echo(av, &env);
|
||||
cr_assert_stdout_eq_str("hello\n");
|
||||
}
|
||||
|
||||
Test(echo, with_simple_backslash, .init = cr_redirect_stdout)
|
||||
{
|
||||
env_t env = {};
|
||||
char *av[] = {"echo", "\\n", NULL};
|
||||
builtin_echo(av, &env);
|
||||
cr_assert_stdout_eq_str("\n\n");
|
||||
}
|
||||
|
||||
Test(echo, incorrect_ascii, .init = cr_redirect_stdout)
|
||||
{
|
||||
env_t env = {};
|
||||
char *av[] = {"echo", "\\q", NULL};
|
||||
builtin_echo(av, &env);
|
||||
cr_assert_stdout_eq_str("\\q\n");
|
||||
}
|
||||
|
||||
Test(echo, multiple_args, .init = cr_redirect_stdout)
|
||||
{
|
||||
env_t env = {};
|
||||
char *av[] = {"echo", "Hello", "I\'m", "Marvin", NULL};
|
||||
builtin_echo(av, &env);
|
||||
cr_assert_stdout_eq_str("Hello I\'m Marvin\n");
|
||||
}
|
||||
Reference in New Issue
Block a user