diff options
Diffstat (limited to 'common/readline.c')
-rw-r--r-- | common/readline.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/common/readline.c b/common/readline.c index e75b183f..76ed6926 100644 --- a/common/readline.c +++ b/common/readline.c | |||
@@ -3,7 +3,7 @@ | |||
3 | #include <stdio.h> | 3 | #include <stdio.h> |
4 | 4 | ||
5 | char *read_line(FILE *file) { | 5 | char *read_line(FILE *file) { |
6 | int length = 0, size = 128; | 6 | size_t length = 0, size = 128; |
7 | char *string = malloc(size); | 7 | char *string = malloc(size); |
8 | if (!string) { | 8 | if (!string) { |
9 | return NULL; | 9 | return NULL; |
@@ -37,3 +37,28 @@ char *read_line(FILE *file) { | |||
37 | string[length] = '\0'; | 37 | string[length] = '\0'; |
38 | return string; | 38 | return string; |
39 | } | 39 | } |
40 | |||
41 | char *read_line_buffer(FILE *file, char *string, size_t string_len) { | ||
42 | size_t length = 0; | ||
43 | if (!string) { | ||
44 | return NULL; | ||
45 | } | ||
46 | while (1) { | ||
47 | int c = getc(file); | ||
48 | if (c == EOF || c == '\n' || c == '\0') { | ||
49 | break; | ||
50 | } | ||
51 | if (c == '\r') { | ||
52 | continue; | ||
53 | } | ||
54 | string[length++] = c; | ||
55 | if (string_len <= length) { | ||
56 | return NULL; | ||
57 | } | ||
58 | } | ||
59 | if (length + 1 == string_len) { | ||
60 | return NULL; | ||
61 | } | ||
62 | string[length] = '\0'; | ||
63 | return string; | ||
64 | } | ||