mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-11-05 13:29:54 -05:00
fix: miss free memory in some case
This commit is contained in:
parent
33cc0f4979
commit
99b13588fb
1 changed files with 117 additions and 41 deletions
|
|
@ -1091,6 +1091,10 @@ void parse_config_line(Config *config, const char *line) {
|
||||||
binding->arg.v = NULL;
|
binding->arg.v = NULL;
|
||||||
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
||||||
if (!binding->func) {
|
if (!binding->func) {
|
||||||
|
if (binding->arg.v) {
|
||||||
|
free(binding->arg.v);
|
||||||
|
binding->arg.v = NULL;
|
||||||
|
}
|
||||||
fprintf(stderr, "Error: Unknown function in bind: %s\n", func_name);
|
fprintf(stderr, "Error: Unknown function in bind: %s\n", func_name);
|
||||||
} else {
|
} else {
|
||||||
config->key_bindings_count++;
|
config->key_bindings_count++;
|
||||||
|
|
@ -1121,6 +1125,10 @@ void parse_config_line(Config *config, const char *line) {
|
||||||
binding->arg.v = NULL;
|
binding->arg.v = NULL;
|
||||||
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
||||||
if (!binding->func) {
|
if (!binding->func) {
|
||||||
|
if (binding->arg.v) {
|
||||||
|
free(binding->arg.v);
|
||||||
|
binding->arg.v = NULL;
|
||||||
|
}
|
||||||
fprintf(stderr, "Error: Unknown function in mousebind: %s\n", func_name);
|
fprintf(stderr, "Error: Unknown function in mousebind: %s\n", func_name);
|
||||||
} else {
|
} else {
|
||||||
config->mouse_bindings_count++;
|
config->mouse_bindings_count++;
|
||||||
|
|
@ -1150,6 +1158,10 @@ void parse_config_line(Config *config, const char *line) {
|
||||||
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
||||||
|
|
||||||
if (!binding->func) {
|
if (!binding->func) {
|
||||||
|
if (binding->arg.v) {
|
||||||
|
free(binding->arg.v);
|
||||||
|
binding->arg.v = NULL;
|
||||||
|
}
|
||||||
fprintf(stderr, "Error: Unknown function in axisbind: %s\n", func_name);
|
fprintf(stderr, "Error: Unknown function in axisbind: %s\n", func_name);
|
||||||
} else {
|
} else {
|
||||||
config->axis_bindings_count++;
|
config->axis_bindings_count++;
|
||||||
|
|
@ -1184,6 +1196,10 @@ void parse_config_line(Config *config, const char *line) {
|
||||||
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
binding->func = parse_func_name(func_name, &binding->arg, arg_value, arg_value2);
|
||||||
|
|
||||||
if (!binding->func) {
|
if (!binding->func) {
|
||||||
|
if (binding->arg.v) {
|
||||||
|
free(binding->arg.v);
|
||||||
|
binding->arg.v = NULL;
|
||||||
|
}
|
||||||
fprintf(stderr, "Error: Unknown function in axisbind: %s\n", func_name);
|
fprintf(stderr, "Error: Unknown function in axisbind: %s\n", func_name);
|
||||||
} else {
|
} else {
|
||||||
config->gesture_bindings_count++;
|
config->gesture_bindings_count++;
|
||||||
|
|
@ -1227,78 +1243,138 @@ void free_circle_layout(Config *config) {
|
||||||
config->circle_layout_count = 0; // 重置计数
|
config->circle_layout_count = 0; // 重置计数
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void free_baked_points(void) {
|
||||||
|
if(baked_points_move)
|
||||||
|
free(baked_points_move);
|
||||||
|
if(baked_points_open)
|
||||||
|
free(baked_points_open);
|
||||||
|
if(baked_points_close)
|
||||||
|
free(baked_points_close);
|
||||||
|
if(baked_points_tag)
|
||||||
|
baked_points_move = NULL;
|
||||||
|
baked_points_open = NULL;
|
||||||
|
baked_points_close = NULL;
|
||||||
|
baked_points_tag = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void free_config(void) {
|
void free_config(void) {
|
||||||
// 释放内存
|
// 释放内存
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < config.window_rules_count; i++) {
|
|
||||||
|
// 释放 window_rules
|
||||||
|
if (config.window_rules) {
|
||||||
|
for (int i = 0; i < config.window_rules_count; i++) {
|
||||||
ConfigWinRule *rule = &config.window_rules[i];
|
ConfigWinRule *rule = &config.window_rules[i];
|
||||||
if (rule->id)
|
|
||||||
free((void *)rule->id);
|
free((void *)rule->id);
|
||||||
if (rule->title)
|
|
||||||
free((void *)rule->title);
|
free((void *)rule->title);
|
||||||
if (rule->animation_type_open)
|
|
||||||
free((void *)rule->animation_type_open);
|
free((void *)rule->animation_type_open);
|
||||||
if (rule->animation_type_close)
|
|
||||||
free((void *)rule->animation_type_close);
|
free((void *)rule->animation_type_close);
|
||||||
|
// 释放 globalkeybinding 的 arg.v(如果动态分配)
|
||||||
|
if (rule->globalkeybinding.arg.v) {
|
||||||
|
free((void *)rule->globalkeybinding.arg.v);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free(config.window_rules);
|
free(config.window_rules);
|
||||||
|
config.window_rules = NULL;
|
||||||
|
config.window_rules_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < config.monitor_rules_count; i++) {
|
// 释放 monitor_rules
|
||||||
|
if (config.monitor_rules) {
|
||||||
|
for (int i = 0; i < config.monitor_rules_count; i++) {
|
||||||
ConfigMonitorRule *rule = &config.monitor_rules[i];
|
ConfigMonitorRule *rule = &config.monitor_rules[i];
|
||||||
if (rule->name)
|
|
||||||
free((void *)rule->name);
|
free((void *)rule->name);
|
||||||
if (rule->layout)
|
|
||||||
free((void *)rule->layout);
|
free((void *)rule->layout);
|
||||||
}
|
}
|
||||||
free(config.monitor_rules);
|
free(config.monitor_rules);
|
||||||
|
config.monitor_rules = NULL;
|
||||||
|
config.monitor_rules_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 key_bindings
|
||||||
|
if (config.key_bindings) {
|
||||||
for (i = 0; i < config.key_bindings_count; i++) {
|
for (i = 0; i < config.key_bindings_count; i++) {
|
||||||
if (config.key_bindings[i].arg.v) {
|
if (config.key_bindings[i].arg.v) {
|
||||||
free((void *)config.key_bindings[i].arg.v);
|
free((void *)config.key_bindings[i].arg.v);
|
||||||
config.key_bindings[i].arg.v = NULL; // 避免重复释放
|
config.key_bindings[i].arg.v = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(config.key_bindings);
|
free(config.key_bindings);
|
||||||
|
config.key_bindings = NULL;
|
||||||
|
config.key_bindings_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 mouse_bindings
|
||||||
|
if (config.mouse_bindings) {
|
||||||
for (i = 0; i < config.mouse_bindings_count; i++) {
|
for (i = 0; i < config.mouse_bindings_count; i++) {
|
||||||
if (config.mouse_bindings[i].arg.v) {
|
if (config.mouse_bindings[i].arg.v) {
|
||||||
free((void *)config.mouse_bindings[i].arg.v);
|
free((void *)config.mouse_bindings[i].arg.v);
|
||||||
config.mouse_bindings[i].arg.v = NULL; // 避免重复释放
|
config.mouse_bindings[i].arg.v = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(config.mouse_bindings);
|
free(config.mouse_bindings);
|
||||||
|
config.mouse_bindings = NULL;
|
||||||
|
config.mouse_bindings_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 axis_bindings
|
||||||
|
if (config.axis_bindings) {
|
||||||
for (i = 0; i < config.axis_bindings_count; i++) {
|
for (i = 0; i < config.axis_bindings_count; i++) {
|
||||||
if (config.axis_bindings[i].arg.v) {
|
if (config.axis_bindings[i].arg.v) {
|
||||||
free((void *)config.axis_bindings[i].arg.v);
|
free((void *)config.axis_bindings[i].arg.v);
|
||||||
config.axis_bindings[i].arg.v = NULL; // 避免重复释放
|
config.axis_bindings[i].arg.v = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(config.axis_bindings);
|
free(config.axis_bindings);
|
||||||
|
config.axis_bindings = NULL;
|
||||||
|
config.axis_bindings_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 gesture_bindings
|
||||||
|
if (config.gesture_bindings) {
|
||||||
for (i = 0; i < config.gesture_bindings_count; i++) {
|
for (i = 0; i < config.gesture_bindings_count; i++) {
|
||||||
if (config.gesture_bindings[i].arg.v) {
|
if (config.gesture_bindings[i].arg.v) {
|
||||||
free((void *)config.gesture_bindings[i].arg.v);
|
free((void *)config.gesture_bindings[i].arg.v);
|
||||||
config.gesture_bindings[i].arg.v = NULL; // 避免重复释放
|
config.gesture_bindings[i].arg.v = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(config.gesture_bindings);
|
free(config.gesture_bindings);
|
||||||
|
config.gesture_bindings = NULL;
|
||||||
|
config.gesture_bindings_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 exec
|
||||||
|
if (config.exec) {
|
||||||
for (i = 0; i < config.exec_count; i++) {
|
for (i = 0; i < config.exec_count; i++) {
|
||||||
free(config.exec[i]);
|
free(config.exec[i]);
|
||||||
}
|
}
|
||||||
free(config.exec);
|
free(config.exec);
|
||||||
|
config.exec = NULL;
|
||||||
|
config.exec_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 exec_once
|
||||||
|
if (config.exec_once) {
|
||||||
for (i = 0; i < config.exec_once_count; i++) {
|
for (i = 0; i < config.exec_once_count; i++) {
|
||||||
free(config.exec_once[i]);
|
free(config.exec_once[i]);
|
||||||
}
|
}
|
||||||
free(config.exec_once);
|
free(config.exec_once);
|
||||||
|
config.exec_once = NULL;
|
||||||
|
config.exec_once_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 scroller_proportion_preset
|
||||||
|
if (config.scroller_proportion_preset) {
|
||||||
free(config.scroller_proportion_preset);
|
free(config.scroller_proportion_preset);
|
||||||
config.scroller_proportion_preset = NULL;
|
config.scroller_proportion_preset = NULL;
|
||||||
config.scroller_proportion_preset_count = 0;
|
config.scroller_proportion_preset_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 释放 circle_layout
|
||||||
free_circle_layout(&config);
|
free_circle_layout(&config);
|
||||||
|
|
||||||
|
// 释放动画资源
|
||||||
|
free_baked_points();
|
||||||
}
|
}
|
||||||
|
|
||||||
void override_config(void) {
|
void override_config(void) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue