Repository navigation
Expand file tree
/
Copy patherrors.c
More file actions
92 lines (88 loc) · 1.67 KB
/
Copy patherrors.c
File metadata and controls
92 lines (88 loc) · 1.67 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "holberton.h"
/**
* fork_fail - if fork fails, shows error.
*@buffer: buffer
*@argv: argument
* Return: Returns 1.
*/
int fork_fail(char *buffer, char **argv)
{
free(buffer);
free_memory(argv);
perror("Error:");
return (1);
}
/**
* end_of_line - Executes if the end of line is reached.
* @buffer: Buffer.
* @argv: Commands.
*
*/
void end_of_line(char *buffer, char **argv)
{
free(buffer);
free_memory(argv);
exit(EXIT_SUCCESS);
}
/**
* _forkexe - Function that executes processes.
* @buffer: Buffer.
* @argv: Commands.
* @environ: Global variable containing.
* @count: Counter for command number.
* Return: Returns 1 on success or 0 if it fails to execute.
*/
void _forkexe(char *buffer, char **argv, char **environ, int count)
{
char *_salida = "exit";
char *environment_command = "env";
struct stat statbuf;
if (argv == NULL)
{
free_memory(argv);
free(buffer);
exit(EXIT_SUCCESS);
}
else if (_strcmp(_salida, argv[0]))
{
free(buffer);
free_memory(argv);
exit(EXIT_SUCCESS);
}
else if (_strcmp(argv[0], environment_command))
env_command(buffer, argv, environ);
else if (stat(argv[0], &statbuf) == 0)
{
execve(argv[0], argv, environ);
free(buffer);
free_memory(argv);
}
else
exe_path(argv, environ, count);
}
/**
* _forkwait - Function that waits for processes to be finished.
* @buffer: Buffer.
* @argv: Commands.
* Return: Returns 1 on success or 0 if it fails to execute.
*/
void _forkwait(char *buffer, char **argv)
{
char *_salida = "exit";
if (_strcmp(_salida, argv[0]))
{
free(buffer);
free_memory(argv);
exit(EXIT_SUCCESS);
}
else if (argv == NULL)
{
free(buffer);
exit(EXIT_SUCCESS);
}
else
{
free(buffer);
free_memory(argv);
}
}