-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget_input
74 lines (61 loc) · 1.45 KB
/
get_input
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
#include "main.h"
/**
* get_input - gets input from the command line
* @void: no parameters
*
* Return: A string containing the user input
*/
char *get_input(void)
{
char *buffer = NULL;
size_t n = 0;
ssize_t input;
if (isatty(STDIN_FILENO))
{
input = getline(&buffer, &n, stdin);
if (input > 0 && buffer[input - 1] == '\n')
buffer[input - 1] = '\0';
}
else
{
size_t max_buffer_size = MAX_BUFFER_SIZE;
size_t total_size = 0;
while (1)
{
if (total_size >= max_buffer_size - 1)
{
max_buffer_size *= 2;
buffer = realloc(buffer, max_buffer_size);
if (buffer == NULL)
{
perror("get_input");
exit(EXIT_FAILURE);
}
}
input = read(STDIN_FILENO, buffer + total_size, 1);
if (input == -1)
{
perror("get_input");
exit(EXIT_FAILURE);
}
if (input == 0 || buffer[total_size] == '\n')
{
buffer[total_size] = '\0';
break;
}
total_size++;
}
}
if (input == -1)
{
if (errno == EOF)
{
free(buffer);
return (NULL);
}
free(buffer);
exit(EXIT_FAILURE);
}
printf("get input got: %s", buffer);
return buffer;
}