summaryrefslogtreecommitdiffstats
path: root/src/b_sqb.c
diff options
context:
space:
mode:
authorsalad <fmoenne-@student.le-101.fr>2020-10-26 13:42:56 +0100
committersalad <fmoenne-@student.le-101.fr>2020-10-26 13:42:56 +0100
commit0277ddfac754ab4ad5bdd2b692e31a717efbe569 (patch)
tree49d7c5fd3a12248af85e2c3a3254bc1538ae5775 /src/b_sqb.c
parentreqdy for MERGE (diff)
parentTODO update (diff)
download42-minishell-0277ddfac754ab4ad5bdd2b692e31a717efbe569.tar.gz
42-minishell-0277ddfac754ab4ad5bdd2b692e31a717efbe569.tar.bz2
42-minishell-0277ddfac754ab4ad5bdd2b692e31a717efbe569.tar.xz
42-minishell-0277ddfac754ab4ad5bdd2b692e31a717efbe569.tar.zst
42-minishell-0277ddfac754ab4ad5bdd2b692e31a717efbe569.zip
merge wif master
Diffstat (limited to 'src/b_sqb.c')
-rw-r--r--src/b_sqb.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/b_sqb.c b/src/b_sqb.c
new file mode 100644
index 0000000..a5a0fd5
--- /dev/null
+++ b/src/b_sqb.c
@@ -0,0 +1,93 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* b_sqb.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <libft.h>
+#include <stdint.h>
+#include <unistd.h>
+
+#include "b_sqb_err.h"
+#include "b_sqb_file.h"
+#include "b_sqb_nbr.h"
+#include "b_sqb_str.h"
+#include "d_define.h"
+#include "s_struct.h"
+#include "u_utils.h"
+
+static uint8_t
+ b_get_sqb_id(char *argv[],
+ t_msh *msh)
+{
+ uint8_t i;
+
+ i = 0;
+ while (i < FT_ID_SQB_COUNT)
+ {
+ if (i < FT_ID_SQB_NT &&
+ ft_strncmp(argv[0],
+ msh->sqb_ref[i],
+ ft_strlen(msh->sqb_ref[i]) + 1) == 0)
+ return (i);
+ if (i >= FT_ID_SQB_NT &&
+ ft_strncmp(argv[1],
+ msh->sqb_ref[i],
+ ft_strlen(msh->sqb_ref[i]) + 1) == 0)
+ return (i);
+ i++;
+ }
+ return (i);
+}
+
+static uint8_t
+ b_eval_sqb(char *argv[],
+ t_msh *msh)
+{
+ uint8_t id;
+ uint8_t ret;
+
+ id = b_get_sqb_id(argv, msh);
+ if (id == FT_ID_SQB_COUNT)
+ {
+ ft_dprintf(STDERR_FILENO, "[: %s: unexpected operator\n", argv[0]);
+ return (2);
+ }
+ if (b_sqb_err_check(id, argv) != 0)
+ return (2);
+ ret = 0;
+ if (id < FT_ID_SQB_NT && id != FT_ID_SQB_Z && id != FT_ID_SQB_N)
+ ret = b_sqb_file_tests(id, argv);
+ else if (id == FT_ID_SQB_NT || id == FT_ID_SQB_OT)
+ ret = b_sqb_double_file_tests(id, argv);
+ else if (id == FT_ID_SQB_N || id == FT_ID_SQB_Z ||
+ id == FT_ID_SQB_EQUA || id == FT_ID_SQB_DIFF)
+ ret = b_sqb_str(id, argv);
+ else if (id >= FT_ID_SQB_EQ)
+ ret = b_sqb_nbr(id, argv);
+ return (ret);
+}
+
+uint8_t
+ b_sqb(char *args[],
+ t_msh *msh)
+{
+ const uint64_t argc = u_builtins_get_argc((const char**)args);
+
+ if (ft_strncmp(args[argc - 1], "]", 2) != 0)
+ {
+ ft_dprintf(STDERR_FILENO, "[: missing ]\n");
+ return (2);
+ }
+ if (argc == 1)
+ return (1);
+ else if (argc == 2)
+ return (0);
+ return (b_eval_sqb(args, msh));
+}