-
Notifications
You must be signed in to change notification settings - Fork 0
/
error_free.c
78 lines (72 loc) · 2.03 KB
/
error_free.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* error_free.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: rjobert <rjobert@student.42barcelo> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/08/02 22:07:16 by rjobert #+# #+# */
/* Updated: 2023/08/02 22:09:45 by rjobert ### ########.fr */
/* */
/* ************************************************************************** */
#include "pipex.h"
/*display error message as shell would for a cmd 1 | cmd2 error
if the struct path_cmd is provided, we clear all inside */
void exit_error(int err, char *txt, char *cmd, t_cmd **p_cmd)
{
write(2, "pipex: ", 7);
if (cmd)
{
write(2, cmd, ft_strlen(cmd));
write(2, ": ", 2);
}
write(2, txt, ft_strlen(txt));
write(2, "\n", 1);
if (p_cmd)
free_cmd(p_cmd);
exit(err);
}
/*to clear matrices of strings used for path search*/
void free_split(char ***split_result)
{
int i;
if (!*split_result || !split_result)
return ;
i = 0;
while ((*split_result)[i])
{
free((*split_result)[i]);
i++;
}
free(*split_result);
*split_result = NULL;
}
/*
clear all what's inside the process due to error
1 - close the fd
2 - if path was malloc, free
3 - clear all arguments (malloc string) from split matrix
4 - clear the matrix itslef and set to null
*/
void free_cmd(t_cmd **cmd)
{
int i;
if (!*cmd)
return ;
close((*cmd)->fd);
if ((*cmd)->malloc_path == 1)
{
free((*cmd)->path);
(*cmd)->path = NULL;
}
i = 0;
while ((*cmd)->args[i])
{
free((*cmd)->args[i]);
i++;
}
free((*cmd)->args);
(*cmd)-> args = NULL;
free(*cmd);
*cmd = NULL;
}