fix: infile/outfile work as well now
This commit is contained in:
parent
e7f8373b4a
commit
686ea5d0db
8
infile.c
8
infile.c
@ -28,14 +28,18 @@ static int ft_infile_is_valid(const char *line)
|
|||||||
if (tab[0] == NULL)
|
if (tab[0] == NULL)
|
||||||
return (1);
|
return (1);
|
||||||
i = 0;
|
i = 0;
|
||||||
while (tab[i + 1] != NULL)
|
while (tab[i] != NULL)
|
||||||
i++;
|
{
|
||||||
if (tab[i][0] == '<')
|
if (tab[i][0] == '<')
|
||||||
{
|
{
|
||||||
|
if (tab[i + 1] != NULL && !ft_contain_only_str(tab[i + 1], "| <>"))
|
||||||
|
continue ;
|
||||||
ft_eprintf("minishell: %s: must be followed by an infile\n", tab[i]);
|
ft_eprintf("minishell: %s: must be followed by an infile\n", tab[i]);
|
||||||
ft_freer_tab_ultimate(1, tab);
|
ft_freer_tab_ultimate(1, tab);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
ft_freer_tab_ultimate(1, tab);
|
ft_freer_tab_ultimate(1, tab);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
13
outfile.c
13
outfile.c
@ -10,7 +10,6 @@
|
|||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "libftx/libftx.h"
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
|
|
||||||
static int ft_outfile_is_valid(const char *line)
|
static int ft_outfile_is_valid(const char *line)
|
||||||
@ -27,14 +26,18 @@ static int ft_outfile_is_valid(const char *line)
|
|||||||
if (tab[0] == NULL)
|
if (tab[0] == NULL)
|
||||||
return (1);
|
return (1);
|
||||||
i = 0;
|
i = 0;
|
||||||
while (tab[i + 1] != NULL)
|
while (tab[i] != NULL)
|
||||||
i++;
|
{
|
||||||
if (tab[i][0] == '>')
|
if (tab[i][0] == '>')
|
||||||
{
|
{
|
||||||
ft_eprintf("minishell: %s: must be followed by an infile\n", tab[i]);
|
if (tab[i + 1] != NULL && !ft_contain_only_str(tab[i + 1], "| <>"))
|
||||||
|
continue ;
|
||||||
|
ft_eprintf("minishell: %s: must be followed by an outfile\n", tab[i]);
|
||||||
ft_freer_tab_ultimate(1, tab);
|
ft_freer_tab_ultimate(1, tab);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
ft_freer_tab_ultimate(1, tab);
|
ft_freer_tab_ultimate(1, tab);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
@ -85,10 +88,8 @@ static int ft_remove_outfile(char *line)
|
|||||||
while (tab[i] != NULL)
|
while (tab[i] != NULL)
|
||||||
{
|
{
|
||||||
if (tab[i][0] == '>')
|
if (tab[i][0] == '>')
|
||||||
{
|
|
||||||
ft_strshift(line + y,
|
ft_strshift(line + y,
|
||||||
(-1) * (ft_strlen(tab[i]) + ft_strlen(tab[i + 1]) + 1 + (line[ft_strlen(tab[i]) + ft_strlen(tab[i + 1]) + 1] != '\0')));
|
(-1) * (ft_strlen(tab[i]) + ft_strlen(tab[i + 1]) + 1 + (line[ft_strlen(tab[i]) + ft_strlen(tab[i + 1]) + 1] != '\0')));
|
||||||
}
|
|
||||||
else
|
else
|
||||||
y = y + ft_strlen(tab[i]) + (y != 0);
|
y = y + ft_strlen(tab[i]) + (y != 0);
|
||||||
i++;
|
i++;
|
||||||
|
@ -80,7 +80,7 @@ static int ft_special_char_dub(const char *str)
|
|||||||
if ((y > 2 && (str[i] == '>' || str[i] == '<'))
|
if ((y > 2 && (str[i] == '>' || str[i] == '<'))
|
||||||
|| (y > 1 && str[i] == '|'))
|
|| (y > 1 && str[i] == '|'))
|
||||||
{
|
{
|
||||||
ft_eprintf("minishell: too many %c in a row\n", str, str[i]);
|
ft_eprintf("minishell: too many %s in a row\n", str);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
i = i + y;
|
i = i + y;
|
||||||
|
68
utils/tags
Normal file
68
utils/tags
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/
|
||||||
|
!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/
|
||||||
|
!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/
|
||||||
|
!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/
|
||||||
|
!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/
|
||||||
|
!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/
|
||||||
|
!_TAG_FIELD_DESCRIPTION input /input file/
|
||||||
|
!_TAG_FIELD_DESCRIPTION name /tag name/
|
||||||
|
!_TAG_FIELD_DESCRIPTION pattern /pattern/
|
||||||
|
!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/
|
||||||
|
!_TAG_FIELD_DESCRIPTION!C++ name /aliased names/
|
||||||
|
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
||||||
|
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C d,macro /macro definitions/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C e,enumerator /enumerators (values inside an enumeration)/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C f,function /function definitions/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C g,enum /enumeration names/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C h,header /included header files/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C m,member /struct, and union members/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C s,struct /structure names/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C t,typedef /typedefs/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C u,union /union names/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C v,variable /variable definitions/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ c,class /classes/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ d,macro /macro definitions/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ e,enumerator /enumerators (values inside an enumeration)/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ f,function /function definitions/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ g,enum /enumeration names/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ h,header /included header files/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ m,member /class, struct, and union members/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ n,namespace /namespaces/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ s,struct /structure names/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ t,typedef /typedefs/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ u,union /union names/
|
||||||
|
!_TAG_KIND_DESCRIPTION!C++ v,variable /variable definitions/
|
||||||
|
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
|
||||||
|
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
|
||||||
|
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
||||||
|
!_TAG_OUTPUT_VERSION 0.0 /current.age/
|
||||||
|
!_TAG_PARSER_VERSION!C 0.0 /current.age/
|
||||||
|
!_TAG_PARSER_VERSION!C++ 0.0 /current.age/
|
||||||
|
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
|
||||||
|
!_TAG_PROC_CWD /nfs/homes/cchauvet/42/minishell/utils/ //
|
||||||
|
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
||||||
|
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
||||||
|
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
||||||
|
!_TAG_PROGRAM_VERSION 6.0.0 //
|
||||||
|
!_TAG_ROLE_DESCRIPTION!C!header local /local header/
|
||||||
|
!_TAG_ROLE_DESCRIPTION!C!header system /system header/
|
||||||
|
!_TAG_ROLE_DESCRIPTION!C!macro undef /undefined/
|
||||||
|
!_TAG_ROLE_DESCRIPTION!C++!header local /local header/
|
||||||
|
!_TAG_ROLE_DESCRIPTION!C++!header system /system header/
|
||||||
|
!_TAG_ROLE_DESCRIPTION!C++!macro undef /undefined/
|
||||||
|
UTILS_H utils.h /^# define UTILS_H$/;" d
|
||||||
|
ft_atoi_check ft_atoi_check.c /^int ft_atoi_check(const char *nptr)$/;" f typeref:typename:int
|
||||||
|
ft_change_exit_code ft_change_exit_code.c /^int ft_change_exit_code(t_data *data, int new_value)$/;" f typeref:typename:int
|
||||||
|
ft_is_in_quote ft_is_in_quote.c /^int ft_is_in_quote(const char *str, size_t n)$/;" f typeref:typename:int
|
||||||
|
ft_isspace ft_atoi_check.c /^static int ft_isspace(char c)$/;" f typeref:typename:int file:
|
||||||
|
ft_printn ft_printn.c /^void ft_printn(const char *str, size_t n)$/;" f typeref:typename:void
|
||||||
|
ft_quote_remover ft_quote_remover.c /^char *ft_quote_remover(char *str)$/;" f typeref:typename:char *
|
||||||
|
ft_seglen_quoted ft_split_quoted.c /^size_t ft_seglen_quoted(const char *str, char c)$/;" f typeref:typename:size_t
|
||||||
|
ft_segsplitter ft_split_quoted.c /^static char **ft_segsplitter(char **tab, size_t len, const char *s, char c)$/;" f typeref:typename:char ** file:
|
||||||
|
ft_split_quoted ft_split_quoted.c /^char **ft_split_quoted(const char *s, char c)$/;" f typeref:typename:char **
|
||||||
|
ft_str_is_empty ft_str_is_empty.c /^int ft_str_is_empty(const char *str)$/;" f typeref:typename:int
|
||||||
|
ft_strnchr ft_strnchr.c /^ssize_t ft_strnchr(const char *str, char c)$/;" f typeref:typename:ssize_t
|
||||||
|
ft_strncpy ft_strncpy.c /^size_t ft_strncpy(char *dst, const char *src, size_t n)$/;" f typeref:typename:size_t
|
||||||
|
ft_strreplace ft_strreplace.c /^char *ft_strreplace(const char *str, const char *fill,$/;" f typeref:typename:char *
|
||||||
|
ft_strshift ft_strshift.c /^void ft_strshift(char *str, int shift)$/;" f typeref:typename:void
|
Loading…
Reference in New Issue
Block a user