diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2001-07-19 12:15:13 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2001-07-19 12:15:13 +0000 |
commit | 81108e7653583508bfc541748845183c56e0e378 (patch) | |
tree | ccfe4b6c710253dd5944960868487b2c54c6ec7d | |
parent | c3fbec73fb45997918bef927cea519866e1e1c9d (diff) | |
download | busybox-w32-81108e7653583508bfc541748845183c56e0e378.tar.gz busybox-w32-81108e7653583508bfc541748845183c56e0e378.tar.bz2 busybox-w32-81108e7653583508bfc541748845183c56e0e378.zip |
Cleanup (most) memory leaks
-rw-r--r-- | archival/dpkg.c | 89 | ||||
-rw-r--r-- | dpkg.c | 89 |
2 files changed, 114 insertions, 64 deletions
diff --git a/archival/dpkg.c b/archival/dpkg.c index f207b23ac..48c392894 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c | |||
@@ -161,6 +161,7 @@ int search_name_hashtable(const char *key) | |||
161 | { | 161 | { |
162 | unsigned int probe_address = 0; | 162 | unsigned int probe_address = 0; |
163 | unsigned int probe_decrement = 0; | 163 | unsigned int probe_decrement = 0; |
164 | // char *temp; | ||
164 | 165 | ||
165 | make_hash(key, &probe_address, &probe_decrement, NAME_HASH_PRIME); | 166 | make_hash(key, &probe_address, &probe_decrement, NAME_HASH_PRIME); |
166 | while(name_hashtable[probe_address] != NULL) { | 167 | while(name_hashtable[probe_address] != NULL) { |
@@ -174,7 +175,6 @@ int search_name_hashtable(const char *key) | |||
174 | } | 175 | } |
175 | } | 176 | } |
176 | name_hashtable[probe_address] = xstrdup(key); | 177 | name_hashtable[probe_address] = xstrdup(key); |
177 | |||
178 | return(probe_address); | 178 | return(probe_address); |
179 | } | 179 | } |
180 | 180 | ||
@@ -212,6 +212,7 @@ int version_compare_part(const char *version1, const char *version2) | |||
212 | int tmp_int; | 212 | int tmp_int; |
213 | int ver_num1; | 213 | int ver_num1; |
214 | int ver_num2; | 214 | int ver_num2; |
215 | int ret; | ||
215 | 216 | ||
216 | if (version1 == NULL) { | 217 | if (version1 == NULL) { |
217 | version1 = xstrdup(""); | 218 | version1 = xstrdup(""); |
@@ -234,7 +235,8 @@ int version_compare_part(const char *version1, const char *version2) | |||
234 | free(name1_char); | 235 | free(name1_char); |
235 | free(name2_char); | 236 | free(name2_char); |
236 | if (tmp_int != 0) { | 237 | if (tmp_int != 0) { |
237 | return(tmp_int); | 238 | ret = tmp_int; |
239 | goto cleanup_version_compare_part; | ||
238 | } | 240 | } |
239 | 241 | ||
240 | /* Compare digits */ | 242 | /* Compare digits */ |
@@ -249,13 +251,17 @@ int version_compare_part(const char *version1, const char *version2) | |||
249 | free(name1_char); | 251 | free(name1_char); |
250 | free(name2_char); | 252 | free(name2_char); |
251 | if (ver_num1 < ver_num2) { | 253 | if (ver_num1 < ver_num2) { |
252 | return(-1); | 254 | ret = -1; |
255 | goto cleanup_version_compare_part; | ||
253 | } | 256 | } |
254 | else if (ver_num1 > ver_num2) { | 257 | else if (ver_num1 > ver_num2) { |
255 | return(1); | 258 | ret = 1; |
259 | goto cleanup_version_compare_part; | ||
256 | } | 260 | } |
257 | } | 261 | } |
258 | return(0); | 262 | ret = 0; |
263 | cleanup_version_compare_part: | ||
264 | return(ret); | ||
259 | } | 265 | } |
260 | 266 | ||
261 | /* if ver1 < ver2 return -1, | 267 | /* if ver1 < ver2 return -1, |
@@ -499,54 +505,61 @@ unsigned int fill_package_struct(char *control_buffer) | |||
499 | { | 505 | { |
500 | common_node_t *new_node = (common_node_t *) xcalloc(1, sizeof(common_node_t)); | 506 | common_node_t *new_node = (common_node_t *) xcalloc(1, sizeof(common_node_t)); |
501 | 507 | ||
502 | char *field_name = xmalloc(sizeof(char *)); | 508 | char **field_name = xmalloc(sizeof(char *)); |
503 | char *field_value = xmalloc(sizeof(char *)); | 509 | char **field_value = xmalloc(sizeof(char *)); |
504 | int field_start = 0; | 510 | int field_start = 0; |
505 | int num = -1; | 511 | int num = -1; |
506 | int buffer_length = strlen(control_buffer); | 512 | int buffer_length = strlen(control_buffer); |
507 | 513 | ||
508 | new_node->version = search_name_hashtable("unknown"); | 514 | new_node->version = search_name_hashtable("unknown"); |
509 | while (field_start < buffer_length) { | 515 | while (field_start < buffer_length) { |
510 | field_start += read_package_field(&control_buffer[field_start], &field_name, &field_value); | 516 | field_start += read_package_field(&control_buffer[field_start], field_name, field_value); |
511 | 517 | ||
512 | if (field_name == NULL) { | 518 | if (*field_name == NULL) { |
513 | goto fill_package_struct_cleanup; // Oh no, the dreaded goto statement !! | 519 | goto fill_package_struct_cleanup; // Oh no, the dreaded goto statement !! |
514 | } | 520 | } |
515 | 521 | ||
516 | if (strcmp(field_name, "Package") == 0) { | 522 | if (strcmp(*field_name, "Package") == 0) { |
517 | new_node->name = search_name_hashtable(field_value); | 523 | new_node->name = search_name_hashtable(*field_value); |
518 | } | 524 | } |
519 | else if (strcmp(field_name, "Version") == 0) { | 525 | else if (strcmp(*field_name, "Version") == 0) { |
520 | new_node->version = search_name_hashtable(field_value); | 526 | new_node->version = search_name_hashtable(*field_value); |
521 | } | 527 | } |
522 | else if (strcmp(field_name, "Pre-Depends") == 0) { | 528 | else if (strcmp(*field_name, "Pre-Depends") == 0) { |
523 | add_split_dependencies(new_node, field_value, EDGE_PRE_DEPENDS); | 529 | add_split_dependencies(new_node, *field_value, EDGE_PRE_DEPENDS); |
524 | } | 530 | } |
525 | else if (strcmp(field_name, "Depends") == 0) { | 531 | else if (strcmp(*field_name, "Depends") == 0) { |
526 | add_split_dependencies(new_node, field_value, EDGE_DEPENDS); | 532 | add_split_dependencies(new_node, *field_value, EDGE_DEPENDS); |
527 | } | 533 | } |
528 | else if (strcmp(field_name, "Replaces") == 0) { | 534 | else if (strcmp(*field_name, "Replaces") == 0) { |
529 | add_split_dependencies(new_node, field_value, EDGE_REPLACES); | 535 | add_split_dependencies(new_node, *field_value, EDGE_REPLACES); |
530 | } | 536 | } |
531 | else if (strcmp(field_name, "Provides") == 0) { | 537 | else if (strcmp(*field_name, "Provides") == 0) { |
532 | add_split_dependencies(new_node, field_value, EDGE_PROVIDES); | 538 | add_split_dependencies(new_node, *field_value, EDGE_PROVIDES); |
533 | } | 539 | } |
534 | else if (strcmp(field_name, "Conflicts") == 0) { | 540 | else if (strcmp(*field_name, "Conflicts") == 0) { |
535 | add_split_dependencies(new_node, field_value, EDGE_CONFLICTS); | 541 | add_split_dependencies(new_node, *field_value, EDGE_CONFLICTS); |
536 | } | 542 | } |
537 | else if (strcmp(field_name, "Suggests") == 0) { | 543 | else if (strcmp(*field_name, "Suggests") == 0) { |
538 | add_split_dependencies(new_node, field_value, EDGE_SUGGESTS); | 544 | add_split_dependencies(new_node, *field_value, EDGE_SUGGESTS); |
539 | } | 545 | } |
540 | else if (strcmp(field_name, "Recommends") == 0) { | 546 | else if (strcmp(*field_name, "Recommends") == 0) { |
541 | add_split_dependencies(new_node, field_value, EDGE_RECOMMENDS); | 547 | add_split_dependencies(new_node, *field_value, EDGE_RECOMMENDS); |
542 | } | 548 | } |
543 | else if (strcmp(field_name, "Enhances") == 0) { | 549 | else if (strcmp(*field_name, "Enhances") == 0) { |
544 | add_split_dependencies(new_node, field_value, EDGE_ENHANCES); | 550 | add_split_dependencies(new_node, *field_value, EDGE_ENHANCES); |
545 | } | 551 | } |
546 | fill_package_struct_cleanup: | 552 | fill_package_struct_cleanup: |
547 | free(field_name); | 553 | if (*field_name) { |
548 | free(field_value); | 554 | free(*field_name); |
555 | } | ||
556 | if (*field_value) { | ||
557 | free(*field_value); | ||
558 | } | ||
549 | } | 559 | } |
560 | free(field_name); | ||
561 | free(field_value); | ||
562 | |||
550 | if (new_node->version == search_name_hashtable("unknown")) { | 563 | if (new_node->version == search_name_hashtable("unknown")) { |
551 | free_package(new_node); | 564 | free_package(new_node); |
552 | return(-1); | 565 | return(-1); |
@@ -615,6 +628,7 @@ void set_status(const unsigned int status_node_num, const char *new_value, const | |||
615 | new_status = (char *) xmalloc(want_len + flag_len + status_len + 3); | 628 | new_status = (char *) xmalloc(want_len + flag_len + status_len + 3); |
616 | sprintf(new_status, "%s %s %s", name_hashtable[want], name_hashtable[flag], name_hashtable[status]); | 629 | sprintf(new_status, "%s %s %s", name_hashtable[want], name_hashtable[flag], name_hashtable[status]); |
617 | status_hashtable[status_node_num]->status = search_name_hashtable(new_status); | 630 | status_hashtable[status_node_num]->status = search_name_hashtable(new_status); |
631 | free(new_status); | ||
618 | return; | 632 | return; |
619 | } | 633 | } |
620 | 634 | ||
@@ -819,7 +833,6 @@ void write_status_file(deb_file_t **deb_file) | |||
819 | } | 833 | } |
820 | else if (strcmp("config-files", name_hashtable[state_status]) == 0) { | 834 | else if (strcmp("config-files", name_hashtable[state_status]) == 0) { |
821 | /* only change the status line */ | 835 | /* only change the status line */ |
822 | // buffer_length = strlen(control_buffer); | ||
823 | while (1) { | 836 | while (1) { |
824 | char *field_name; | 837 | char *field_name; |
825 | char *field_value; | 838 | char *field_value; |
@@ -1003,6 +1016,7 @@ int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count) | |||
1003 | } | 1016 | } |
1004 | i++; | 1017 | i++; |
1005 | } | 1018 | } |
1019 | free(conflicts); | ||
1006 | return(TRUE); | 1020 | return(TRUE); |
1007 | } | 1021 | } |
1008 | 1022 | ||
@@ -1091,8 +1105,10 @@ int run_package_script(const char *package_name, const char *script_type) | |||
1091 | 1105 | ||
1092 | /* If the file doesnt exist is isnt a fatal */ | 1106 | /* If the file doesnt exist is isnt a fatal */ |
1093 | if (lstat(script_path, &path_stat) < 0) { | 1107 | if (lstat(script_path, &path_stat) < 0) { |
1108 | free(script_path); | ||
1094 | return(EXIT_SUCCESS); | 1109 | return(EXIT_SUCCESS); |
1095 | } else { | 1110 | } else { |
1111 | free(script_path); | ||
1096 | return(system(script_path)); | 1112 | return(system(script_path)); |
1097 | } | 1113 | } |
1098 | } | 1114 | } |
@@ -1236,6 +1252,8 @@ void unpack_package(deb_file_t *deb_file) | |||
1236 | /* change status */ | 1252 | /* change status */ |
1237 | set_status(status_num, "install", 1); | 1253 | set_status(status_num, "install", 1); |
1238 | set_status(status_num, "unpacked", 3); | 1254 | set_status(status_num, "unpacked", 3); |
1255 | |||
1256 | free(info_prefix); | ||
1239 | } | 1257 | } |
1240 | 1258 | ||
1241 | void configure_package(deb_file_t *deb_file) | 1259 | void configure_package(deb_file_t *deb_file) |
@@ -1399,6 +1417,13 @@ extern int dpkg_main(int argc, char **argv) | |||
1399 | 1417 | ||
1400 | write_status_file(deb_file); | 1418 | write_status_file(deb_file); |
1401 | 1419 | ||
1420 | for (i = 0; i < deb_count; i++) { | ||
1421 | free(deb_file[i]->control_file); | ||
1422 | free(deb_file[i]->filename); | ||
1423 | free(deb_file[i]); | ||
1424 | } | ||
1425 | free(deb_file); | ||
1426 | |||
1402 | for (i = 0; i < NAME_HASH_PRIME; i++) { | 1427 | for (i = 0; i < NAME_HASH_PRIME; i++) { |
1403 | if (name_hashtable[i] != NULL) { | 1428 | if (name_hashtable[i] != NULL) { |
1404 | free(name_hashtable[i]); | 1429 | free(name_hashtable[i]); |
@@ -161,6 +161,7 @@ int search_name_hashtable(const char *key) | |||
161 | { | 161 | { |
162 | unsigned int probe_address = 0; | 162 | unsigned int probe_address = 0; |
163 | unsigned int probe_decrement = 0; | 163 | unsigned int probe_decrement = 0; |
164 | // char *temp; | ||
164 | 165 | ||
165 | make_hash(key, &probe_address, &probe_decrement, NAME_HASH_PRIME); | 166 | make_hash(key, &probe_address, &probe_decrement, NAME_HASH_PRIME); |
166 | while(name_hashtable[probe_address] != NULL) { | 167 | while(name_hashtable[probe_address] != NULL) { |
@@ -174,7 +175,6 @@ int search_name_hashtable(const char *key) | |||
174 | } | 175 | } |
175 | } | 176 | } |
176 | name_hashtable[probe_address] = xstrdup(key); | 177 | name_hashtable[probe_address] = xstrdup(key); |
177 | |||
178 | return(probe_address); | 178 | return(probe_address); |
179 | } | 179 | } |
180 | 180 | ||
@@ -212,6 +212,7 @@ int version_compare_part(const char *version1, const char *version2) | |||
212 | int tmp_int; | 212 | int tmp_int; |
213 | int ver_num1; | 213 | int ver_num1; |
214 | int ver_num2; | 214 | int ver_num2; |
215 | int ret; | ||
215 | 216 | ||
216 | if (version1 == NULL) { | 217 | if (version1 == NULL) { |
217 | version1 = xstrdup(""); | 218 | version1 = xstrdup(""); |
@@ -234,7 +235,8 @@ int version_compare_part(const char *version1, const char *version2) | |||
234 | free(name1_char); | 235 | free(name1_char); |
235 | free(name2_char); | 236 | free(name2_char); |
236 | if (tmp_int != 0) { | 237 | if (tmp_int != 0) { |
237 | return(tmp_int); | 238 | ret = tmp_int; |
239 | goto cleanup_version_compare_part; | ||
238 | } | 240 | } |
239 | 241 | ||
240 | /* Compare digits */ | 242 | /* Compare digits */ |
@@ -249,13 +251,17 @@ int version_compare_part(const char *version1, const char *version2) | |||
249 | free(name1_char); | 251 | free(name1_char); |
250 | free(name2_char); | 252 | free(name2_char); |
251 | if (ver_num1 < ver_num2) { | 253 | if (ver_num1 < ver_num2) { |
252 | return(-1); | 254 | ret = -1; |
255 | goto cleanup_version_compare_part; | ||
253 | } | 256 | } |
254 | else if (ver_num1 > ver_num2) { | 257 | else if (ver_num1 > ver_num2) { |
255 | return(1); | 258 | ret = 1; |
259 | goto cleanup_version_compare_part; | ||
256 | } | 260 | } |
257 | } | 261 | } |
258 | return(0); | 262 | ret = 0; |
263 | cleanup_version_compare_part: | ||
264 | return(ret); | ||
259 | } | 265 | } |
260 | 266 | ||
261 | /* if ver1 < ver2 return -1, | 267 | /* if ver1 < ver2 return -1, |
@@ -499,54 +505,61 @@ unsigned int fill_package_struct(char *control_buffer) | |||
499 | { | 505 | { |
500 | common_node_t *new_node = (common_node_t *) xcalloc(1, sizeof(common_node_t)); | 506 | common_node_t *new_node = (common_node_t *) xcalloc(1, sizeof(common_node_t)); |
501 | 507 | ||
502 | char *field_name = xmalloc(sizeof(char *)); | 508 | char **field_name = xmalloc(sizeof(char *)); |
503 | char *field_value = xmalloc(sizeof(char *)); | 509 | char **field_value = xmalloc(sizeof(char *)); |
504 | int field_start = 0; | 510 | int field_start = 0; |
505 | int num = -1; | 511 | int num = -1; |
506 | int buffer_length = strlen(control_buffer); | 512 | int buffer_length = strlen(control_buffer); |
507 | 513 | ||
508 | new_node->version = search_name_hashtable("unknown"); | 514 | new_node->version = search_name_hashtable("unknown"); |
509 | while (field_start < buffer_length) { | 515 | while (field_start < buffer_length) { |
510 | field_start += read_package_field(&control_buffer[field_start], &field_name, &field_value); | 516 | field_start += read_package_field(&control_buffer[field_start], field_name, field_value); |
511 | 517 | ||
512 | if (field_name == NULL) { | 518 | if (*field_name == NULL) { |
513 | goto fill_package_struct_cleanup; // Oh no, the dreaded goto statement !! | 519 | goto fill_package_struct_cleanup; // Oh no, the dreaded goto statement !! |
514 | } | 520 | } |
515 | 521 | ||
516 | if (strcmp(field_name, "Package") == 0) { | 522 | if (strcmp(*field_name, "Package") == 0) { |
517 | new_node->name = search_name_hashtable(field_value); | 523 | new_node->name = search_name_hashtable(*field_value); |
518 | } | 524 | } |
519 | else if (strcmp(field_name, "Version") == 0) { | 525 | else if (strcmp(*field_name, "Version") == 0) { |
520 | new_node->version = search_name_hashtable(field_value); | 526 | new_node->version = search_name_hashtable(*field_value); |
521 | } | 527 | } |
522 | else if (strcmp(field_name, "Pre-Depends") == 0) { | 528 | else if (strcmp(*field_name, "Pre-Depends") == 0) { |
523 | add_split_dependencies(new_node, field_value, EDGE_PRE_DEPENDS); | 529 | add_split_dependencies(new_node, *field_value, EDGE_PRE_DEPENDS); |
524 | } | 530 | } |
525 | else if (strcmp(field_name, "Depends") == 0) { | 531 | else if (strcmp(*field_name, "Depends") == 0) { |
526 | add_split_dependencies(new_node, field_value, EDGE_DEPENDS); | 532 | add_split_dependencies(new_node, *field_value, EDGE_DEPENDS); |
527 | } | 533 | } |
528 | else if (strcmp(field_name, "Replaces") == 0) { | 534 | else if (strcmp(*field_name, "Replaces") == 0) { |
529 | add_split_dependencies(new_node, field_value, EDGE_REPLACES); | 535 | add_split_dependencies(new_node, *field_value, EDGE_REPLACES); |
530 | } | 536 | } |
531 | else if (strcmp(field_name, "Provides") == 0) { | 537 | else if (strcmp(*field_name, "Provides") == 0) { |
532 | add_split_dependencies(new_node, field_value, EDGE_PROVIDES); | 538 | add_split_dependencies(new_node, *field_value, EDGE_PROVIDES); |
533 | } | 539 | } |
534 | else if (strcmp(field_name, "Conflicts") == 0) { | 540 | else if (strcmp(*field_name, "Conflicts") == 0) { |
535 | add_split_dependencies(new_node, field_value, EDGE_CONFLICTS); | 541 | add_split_dependencies(new_node, *field_value, EDGE_CONFLICTS); |
536 | } | 542 | } |
537 | else if (strcmp(field_name, "Suggests") == 0) { | 543 | else if (strcmp(*field_name, "Suggests") == 0) { |
538 | add_split_dependencies(new_node, field_value, EDGE_SUGGESTS); | 544 | add_split_dependencies(new_node, *field_value, EDGE_SUGGESTS); |
539 | } | 545 | } |
540 | else if (strcmp(field_name, "Recommends") == 0) { | 546 | else if (strcmp(*field_name, "Recommends") == 0) { |
541 | add_split_dependencies(new_node, field_value, EDGE_RECOMMENDS); | 547 | add_split_dependencies(new_node, *field_value, EDGE_RECOMMENDS); |
542 | } | 548 | } |
543 | else if (strcmp(field_name, "Enhances") == 0) { | 549 | else if (strcmp(*field_name, "Enhances") == 0) { |
544 | add_split_dependencies(new_node, field_value, EDGE_ENHANCES); | 550 | add_split_dependencies(new_node, *field_value, EDGE_ENHANCES); |
545 | } | 551 | } |
546 | fill_package_struct_cleanup: | 552 | fill_package_struct_cleanup: |
547 | free(field_name); | 553 | if (*field_name) { |
548 | free(field_value); | 554 | free(*field_name); |
555 | } | ||
556 | if (*field_value) { | ||
557 | free(*field_value); | ||
558 | } | ||
549 | } | 559 | } |
560 | free(field_name); | ||
561 | free(field_value); | ||
562 | |||
550 | if (new_node->version == search_name_hashtable("unknown")) { | 563 | if (new_node->version == search_name_hashtable("unknown")) { |
551 | free_package(new_node); | 564 | free_package(new_node); |
552 | return(-1); | 565 | return(-1); |
@@ -615,6 +628,7 @@ void set_status(const unsigned int status_node_num, const char *new_value, const | |||
615 | new_status = (char *) xmalloc(want_len + flag_len + status_len + 3); | 628 | new_status = (char *) xmalloc(want_len + flag_len + status_len + 3); |
616 | sprintf(new_status, "%s %s %s", name_hashtable[want], name_hashtable[flag], name_hashtable[status]); | 629 | sprintf(new_status, "%s %s %s", name_hashtable[want], name_hashtable[flag], name_hashtable[status]); |
617 | status_hashtable[status_node_num]->status = search_name_hashtable(new_status); | 630 | status_hashtable[status_node_num]->status = search_name_hashtable(new_status); |
631 | free(new_status); | ||
618 | return; | 632 | return; |
619 | } | 633 | } |
620 | 634 | ||
@@ -819,7 +833,6 @@ void write_status_file(deb_file_t **deb_file) | |||
819 | } | 833 | } |
820 | else if (strcmp("config-files", name_hashtable[state_status]) == 0) { | 834 | else if (strcmp("config-files", name_hashtable[state_status]) == 0) { |
821 | /* only change the status line */ | 835 | /* only change the status line */ |
822 | // buffer_length = strlen(control_buffer); | ||
823 | while (1) { | 836 | while (1) { |
824 | char *field_name; | 837 | char *field_name; |
825 | char *field_value; | 838 | char *field_value; |
@@ -1003,6 +1016,7 @@ int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count) | |||
1003 | } | 1016 | } |
1004 | i++; | 1017 | i++; |
1005 | } | 1018 | } |
1019 | free(conflicts); | ||
1006 | return(TRUE); | 1020 | return(TRUE); |
1007 | } | 1021 | } |
1008 | 1022 | ||
@@ -1091,8 +1105,10 @@ int run_package_script(const char *package_name, const char *script_type) | |||
1091 | 1105 | ||
1092 | /* If the file doesnt exist is isnt a fatal */ | 1106 | /* If the file doesnt exist is isnt a fatal */ |
1093 | if (lstat(script_path, &path_stat) < 0) { | 1107 | if (lstat(script_path, &path_stat) < 0) { |
1108 | free(script_path); | ||
1094 | return(EXIT_SUCCESS); | 1109 | return(EXIT_SUCCESS); |
1095 | } else { | 1110 | } else { |
1111 | free(script_path); | ||
1096 | return(system(script_path)); | 1112 | return(system(script_path)); |
1097 | } | 1113 | } |
1098 | } | 1114 | } |
@@ -1236,6 +1252,8 @@ void unpack_package(deb_file_t *deb_file) | |||
1236 | /* change status */ | 1252 | /* change status */ |
1237 | set_status(status_num, "install", 1); | 1253 | set_status(status_num, "install", 1); |
1238 | set_status(status_num, "unpacked", 3); | 1254 | set_status(status_num, "unpacked", 3); |
1255 | |||
1256 | free(info_prefix); | ||
1239 | } | 1257 | } |
1240 | 1258 | ||
1241 | void configure_package(deb_file_t *deb_file) | 1259 | void configure_package(deb_file_t *deb_file) |
@@ -1399,6 +1417,13 @@ extern int dpkg_main(int argc, char **argv) | |||
1399 | 1417 | ||
1400 | write_status_file(deb_file); | 1418 | write_status_file(deb_file); |
1401 | 1419 | ||
1420 | for (i = 0; i < deb_count; i++) { | ||
1421 | free(deb_file[i]->control_file); | ||
1422 | free(deb_file[i]->filename); | ||
1423 | free(deb_file[i]); | ||
1424 | } | ||
1425 | free(deb_file); | ||
1426 | |||
1402 | for (i = 0; i < NAME_HASH_PRIME; i++) { | 1427 | for (i = 0; i < NAME_HASH_PRIME; i++) { |
1403 | if (name_hashtable[i] != NULL) { | 1428 | if (name_hashtable[i] != NULL) { |
1404 | free(name_hashtable[i]); | 1429 | free(name_hashtable[i]); |