From 690752d22b5aac9a836e8ba09c8c2544f8d026bd Mon Sep 17 00:00:00 2001
From: JozanLeClerc <bousset.rudy@gmail.com>
Date: Sat, 12 Sep 2020 20:00:38 +0200
Subject: Norme in progress

---
 src/b_alias_print.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 src/b_alias_print.c

(limited to 'src/b_alias_print.c')

diff --git a/src/b_alias_print.c b/src/b_alias_print.c
new file mode 100644
index 0000000..ebe2708
--- /dev/null
+++ b/src/b_alias_print.c
@@ -0,0 +1,116 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   b_alias_print.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 <stdlib.h>
+
+#include "d_define.h"
+#include "s_struct.h"
+
+static char
+	**b_alloc_buff(t_lalias *ptr, size_t i)
+{
+	char	**buff;
+
+	if ((buff = (char**)malloc((i + 1) * sizeof(char*))) == NULL)
+		return (NULL);
+	i = 0;
+	while (ptr != NULL)
+	{
+		buff[i + 1] = NULL;
+		if ((buff[i] = (char*)malloc((6 + ft_strlen(ptr->name) + 2
+			+ ft_strlen(ptr->val) + 3) * sizeof(char))) == NULL)
+		{
+			ft_delwords(buff);
+			return (NULL);
+		}
+		ptr = ptr->next;
+		i++;
+	}
+	return (buff);
+}
+
+static void
+	b_fill_buff(t_lalias *ptr, char *buff[])
+{
+	size_t	i;
+
+	i = 0;
+	while (ptr != NULL)
+	{
+		ft_sprintf(buff[i], "alias %s='%s'\n", ptr->name, ptr->val);
+		ptr = ptr->next;
+		i++;
+	}
+}
+
+static void
+	b_sort_buff(char *buff[])
+{
+	size_t	i;
+	int		cmp;
+	char	tmp[ARG_MAX];
+
+	i = 1;
+	while (buff[i] != NULL)
+	{
+		if ((cmp = ft_strncmp(buff[i - 1], buff[i], ARG_MAX)) > 0)
+		{
+			ft_strlcpy(tmp, buff[i - 1], ARG_MAX);
+			ft_memdel((void*)&buff[i - 1]);
+			if ((buff[i - 1] = ft_strdup(buff[i])) == NULL)
+				return ;
+			ft_memdel((void*)&buff[i]);
+			if ((buff[i] = ft_strdup(tmp)) == NULL)
+				return ;
+			i = 0;
+		}
+		i++;
+	}
+}
+
+static void
+	b_print_buff(char *buff[])
+{
+	char	**ptr;
+
+	ptr = buff;
+	while (*ptr != NULL)
+	{
+		ft_printf("%s", *ptr);
+		ptr++;
+	}
+}
+
+void
+	b_print_alias_list(t_msh *msh)
+{
+	t_lalias	*ptr;
+	char		**buff;
+	size_t		i;
+
+	ptr = msh->alias;
+	i = 0;
+	while (ptr != NULL)
+	{
+		ptr = ptr->next;
+		i++;
+	}
+	ptr = msh->alias;
+	if ((buff = b_alloc_buff(ptr, i)) == NULL)
+		return ;
+	ptr = msh->alias;
+	b_fill_buff(ptr, buff);
+	b_sort_buff(buff);
+	b_print_buff(buff);
+	ft_delwords(buff);
+}
-- 
cgit v1.2.3