Files
minishell/src/parser/parser_command_fd.c
2026-02-14 14:26:58 +01:00

55 lines
1.8 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parser_command_fd.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2026/02/14 16:40:00 by sede-san #+# #+# */
/* Updated: 2026/02/14 16:40:00 by sede-san ### ########.fr */
/* */
/* ************************************************************************** */
#include "parser.h"
#include <limits.h>
static bool parse_io_number(const char *value, int *io_number)
{
long number;
size_t i;
if (value == NULL || value[0] == '\0')
return (false);
number = 0;
i = 0;
while (value[i] != '\0')
{
if (!ft_isdigit(value[i]))
return (false);
if (number > (INT_MAX - (value[i] - '0')) / 10)
return (false);
number = (number * 10) + (value[i] - '0');
i++;
}
*io_number = (int)number;
return (true);
}
bool parser_token_is_fd_prefix(
t_list *token_node,
int *io_number
)
{
t_token *token;
t_token *next_token;
if (token_node == NULL || token_node->next == NULL)
return (false);
token = (t_token *)token_node->content;
next_token = (t_token *)token_node->next->content;
if (token == NULL || next_token == NULL || token->type != TOKEN_WORD
|| !is_redirection(next_token))
return (false);
return (parse_io_number(token->value, io_number));
}