-
Notifications
You must be signed in to change notification settings - Fork 0
/
aux_functions.c
81 lines (79 loc) · 1.94 KB
/
aux_functions.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
79
80
81
#include "monty.h"
/**
* error_msg - error messages
* @error: error case
* Return: error message and exit status 1
*/
int error_msg(int error)
{
if (error == 0)
fprintf(stderr, "USAGE: monty file\n");
else if (error == 1)
fprintf(stderr, "Error: Can't open file %s\n", global->argv[1]);
else if (error == 2)
fprintf(stderr, "Error: malloc failed\n");
else if (error == 3)
fprintf(stderr, "L%u: unknown instruction %s\n", global->ln, global->arr[0]);
else if (error == 4)
fprintf(stderr, "L%u: usage: push integer\n", global->ln);
else if (error == 5)
fprintf(stderr, "L%u: can't %s, stack empty\n", global->ln, global->op);
else if (error == 6)
fprintf(stderr, "L%u: can't pop an empty stack\n", global->ln);
else if (error == 7)
fprintf(stderr, "L%u: can't %s, stack too short\n", global->ln, global->op);
else if (error == 8)
fprintf(stderr, "L%u: division by zero\n", global->ln);
else if (error == 9)
fprintf(stderr, "L%u: can't pchar, value out of range\n", global->ln);
free_all();
exit(EXIT_FAILURE);
}
/**
* free_all - free all the memory allocated and close open files
*/
void free_all(void)
{
if (global)
{
if (global->stack != NULL)
free_stack(global->stack);
if (global->command != NULL)
free(global->command);
if (global->arr != NULL)
free(global->arr);
if (global->fp != NULL)
fclose(global->fp);
free(global);
}
}
/**
* free_stack - free the elements of a stack
* @stack: head of the stack (top)
*/
void free_stack(stack_t *stack)
{
stack_t *current_node;
while (stack)
{
current_node = stack;
stack = stack->next;
free(current_node);
}
}
/**
* initialize - initialize the elelemnts in a structure global_t
* @global: structure
* @argv: elements in the command line
*/
void initialize(global_t *global, char **argv)
{
global->arr = NULL;
global->command = NULL;
global->op = NULL;
global->status = 0;
global->ln = 0;
global->fp = NULL;
global->stack = NULL;
global->argv = argv;
}