aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar taiyu <taiyu.len@gmail.com>2015-08-18 01:32:54 -0700
committerLibravatar taiyu <taiyu.len@gmail.com>2015-08-18 01:32:54 -0700
commiteff55d0de1eee416bc4669a4d17270c80e95fab4 (patch)
tree1561981ed071c09f9549e28451baf517594f7eff
parentAdd support for workspace [name] output [name] (diff)
downloadsway-eff55d0de1eee416bc4669a4d17270c80e95fab4.tar.gz
sway-eff55d0de1eee416bc4669a4d17270c80e95fab4.tar.zst
sway-eff55d0de1eee416bc4669a4d17270c80e95fab4.zip
fixed doubling memory bug for config lines longer then 128
-rw-r--r--sway/readline.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/sway/readline.c b/sway/readline.c
index be8c35cc..dfdc3fe8 100644
--- a/sway/readline.c
+++ b/sway/readline.c
@@ -3,7 +3,7 @@
3#include <stdio.h> 3#include <stdio.h>
4 4
5char *read_line(FILE *file) { 5char *read_line(FILE *file) {
6 int i = 0, length = 0, size = 128; 6 int 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;
@@ -16,21 +16,20 @@ char *read_line(FILE *file) {
16 if (c == '\r') { 16 if (c == '\r') {
17 continue; 17 continue;
18 } 18 }
19 if (i == size) { 19 if (length == size) {
20 string = realloc(string, length *= 2); 20 string = realloc(string, size *= 2);
21 if (!string) { 21 if (!string) {
22 return NULL; 22 return NULL;
23 } 23 }
24 } 24 }
25 string[i++] = (char)c; 25 string[length++] = c;
26 length++;
27 } 26 }
28 if (i + 1 != size) { 27 if (length + 1 == size) {
29 string = realloc(string, length + 1); 28 string = realloc(string, length + 1);
30 if (!string) { 29 if (!string) {
31 return NULL; 30 return NULL;
32 } 31 }
33 } 32 }
34 string[i] = '\0'; 33 string[length] = '\0';
35 return string; 34 return string;
36} 35}