Mercurial > repos > blastem
comparison config.c @ 796:41f73c76b978
Fix some memory issues
author | =?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com> |
---|---|
date | Sun, 26 Jul 2015 11:00:25 -0700 |
parents | bce97fc0bb8a |
children | 0b692b5d154b |
comparison
equal
deleted
inserted
replaced
795:bce97fc0bb8a | 796:41f73c76b978 |
---|---|
46 | 46 |
47 config_data = NULL; | 47 config_data = NULL; |
48 curline = strip_ws(curline); | 48 curline = strip_ws(curline); |
49 int len = strlen(curline); | 49 int len = strlen(curline); |
50 if (!len) { | 50 if (!len) { |
51 *line++; | 51 *line = *line + 1; |
52 continue; | 52 continue; |
53 } | 53 } |
54 if (curline[0] == '#') { | 54 if (curline[0] == '#') { |
55 *line++; | 55 *line = *line + 1; |
56 continue; | 56 continue; |
57 } | 57 } |
58 if (curline[0] == '}') { | 58 if (curline[0] == '}') { |
59 if (started) { | 59 if (started) { |
60 return head; | 60 return head; |
65 | 65 |
66 char * end = curline + len - 1; | 66 char * end = curline + len - 1; |
67 if (*end == '{') { | 67 if (*end == '{') { |
68 *end = 0; | 68 *end = 0; |
69 curline = strip_ws(curline); | 69 curline = strip_ws(curline); |
70 *line++; | 70 *line = *line + 1; |
71 head = tern_insert_node(head, curline, parse_config_int(state, 1, line)); | 71 head = tern_insert_node(head, curline, parse_config_int(state, 1, line)); |
72 } else { | 72 } else { |
73 char * val = strip_ws(split_keyval(curline)); | 73 char * val = strip_ws(split_keyval(curline)); |
74 char * key = curline; | 74 char * key = curline; |
75 if (*val) { | 75 if (*val) { |
76 head = tern_insert_ptr(head, key, strdup(val)); | 76 head = tern_insert_ptr(head, key, strdup(val)); |
77 } else { | 77 } else { |
78 fprintf(stderr, "Key %s is missing a value on line %d\n", key, *line); | 78 fprintf(stderr, "Key %s is missing a value on line %d\n", key, *line); |
79 } | 79 } |
80 *line++; | 80 *line = *line + 1; |
81 } | 81 } |
82 } | 82 } |
83 return head; | 83 return head; |
84 } | 84 } |
85 | 85 |
98 } | 98 } |
99 long config_size = file_size(config_file); | 99 long config_size = file_size(config_file); |
100 if (!config_size) { | 100 if (!config_size) { |
101 goto config_empty; | 101 goto config_empty; |
102 } | 102 } |
103 char * config_data = malloc(config_size); | 103 char * config_data = malloc(config_size+1); |
104 if (fread(config_data, 1, config_size, config_file) != config_size) { | 104 if (fread(config_data, 1, config_size, config_file) != config_size) { |
105 goto config_read_fail; | 105 goto config_read_fail; |
106 } | 106 } |
107 config_data[config_size] = '\0'; | |
108 | |
107 ret = parse_config(config_data); | 109 ret = parse_config(config_data); |
108 config_read_fail: | 110 config_read_fail: |
109 free(config_data); | 111 free(config_data); |
110 config_empty: | 112 config_empty: |
111 fclose(config_file); | 113 fclose(config_file); |