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);