-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathenvironA.c
89 lines (76 loc) · 1.56 KB
/
environA.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
82
83
84
85
86
87
88
89
#include "header.h"
/**
* link_count - counts number of nodes in linked list
* @head: pointer to head of linked list
*
* Return: number of nodes
*/
unsigned int link_count(env_t *head)
{
env_t *tmp;
unsigned int count;
tmp = head;
count = 0;
while (tmp != NULL)
{
tmp = tmp->next;
count++;
}
return (count);
}
/**
* env_list - creates a linked list of all environ variables
*
* Return: head (pointer to first node of linked list of environ variables)
*/
env_t *env_list(void)
{
int i;
env_t *head;
char **variable;
head = NULL;
for (i = 0; environ[i] != NULL; i++)
{
variable = separate_string(environ[i]);
if (add_node_env(&head, variable[0], variable[1]) == NULL)
return (NULL);
free(variable[0]);
free(variable[1]);
free(variable);
}
return (head);
}
/**
* zelda_to_ganondorf - converts linked list to double pointer
* @head: head pointer to head of linked list
*
* Return: array of pointers, pointing to strings
*/
char **zelda_to_ganondorf(env_t *head)
{
int i;
unsigned int count, len1, len2, lennew;
char **ganondorf, *var, *val, *new_val;
env_t *tmp;
count = link_count(head);
ganondorf = malloc(sizeof(char *) * (count + 1));
tmp = head;
i = 0;
while (tmp != NULL)
{
var = tmp->var;
val = tmp->val;
len1 = _strlen(var);
len2 = _strlen(val);
lennew = len1 + len2 + 2;
new_val = safe_malloc(lennew * sizeof(char));
_strncat(new_val, var, len1);
_strncat(new_val, "=", 1);
_strncat(new_val, val, len2);
ganondorf[i] = new_val;
tmp = tmp->next;
i++;
}
ganondorf[i] = NULL;
return (ganondorf);
}