-
Notifications
You must be signed in to change notification settings - Fork 0
/
split.c
106 lines (84 loc) · 1.72 KB
/
split.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "monty.h"
/**
* _memcpy - copies memory
* @dest: destination area
* @src: source memory
* @n: no of bytes to copy
* Return: *dest
*/
char *_memcpy(char *dest, char *src, unsigned int n)
{
unsigned int i;
for (i = 0; i < n; i++)
{
dest[i] = src[i]; /* Duplicate */
}
return (dest);
}
/**
* _realloc - reallocates a memory block
* @buffer: pointer to the memory previously allocated
* @size: size in bytes of the allocated space for ptr
* Return: pointer to the newly allocated memory
*/
void *_realloc(void *buffer, size_t size)
{
size_t old_size = 64, cp_size;
void *new_buffer;
/* If the buffer is null, allocate memory of size new_size */
if (buffer == NULL)
{
return (malloc(size));
}
if (size == 0)
{
free(buffer);
return (NULL);
}
/* New buffer size */
new_buffer = malloc(size);
if (new_buffer == NULL)
{
return (NULL);
}
/* Copy the data from the old buffer to the new buffer */
cp_size = (old_size < size) ? old_size : size;
memcpy(new_buffer, buffer, cp_size);
free(buffer);
return (new_buffer);
}
/**
* get_token - splits a string into tokens
* @line: string to split
* Return: array of tokens
*/
char **get_token(char *line)
{
int buffer_size = 64, i = 0;
char *token, **args = malloc(buffer_size * sizeof(char *));
if (!args)
{
fprintf(stderr, "Unable to allocate memory\n");
exit(EXIT_FAILURE);
}
token = strtok(line, DELIM);
while (token != NULL)
{
args[i] = token;
i++;
if (i >= buffer_size)
{
buffer_size += 64;
args = _realloc(args, buffer_size * sizeof(char *));
if (!args)
{
fprintf(stderr, "Unable to allocate memory\n");
exit(EXIT_FAILURE);
}
}
token = strtok(NULL, DELIM);
}
free(token);
args[i] = NULL;
return (args);
}