Преглед на файлове

Add new pkg_array_free function

Use it to free the arrays after use, so that we do not leak.
Guillem Jover преди 17 години
родител
ревизия
b53a6a7e66
променени са 4 файла, в които са добавени 15 реда и са изтрити 0 реда
  1. 8 0
      src/pkg-array.c
  2. 1 0
      src/pkg-array.h
  3. 4 0
      src/query.c
  4. 2 0
      src/select.c

+ 8 - 0
src/pkg-array.c

@@ -66,3 +66,11 @@ pkg_array_sort(struct pkg_array *a, pkg_sorter_func *pkg_sort)
 	qsort(a->pkgs, a->n_pkgs, sizeof(a->pkgs[0]), pkg_sort);
 	qsort(a->pkgs, a->n_pkgs, sizeof(a->pkgs[0]), pkg_sort);
 }
 }
 
 
+void
+pkg_array_free(struct pkg_array *a)
+{
+	a->n_pkgs = 0;
+	free(a->pkgs);
+	a->pkgs = NULL;
+}
+

+ 1 - 0
src/pkg-array.h

@@ -35,6 +35,7 @@ struct pkg_array {
 
 
 void pkg_array_init_from_db(struct pkg_array *a);
 void pkg_array_init_from_db(struct pkg_array *a);
 void pkg_array_sort(struct pkg_array *a, pkg_sorter_func *pkg_sort);
 void pkg_array_sort(struct pkg_array *a, pkg_sorter_func *pkg_sort);
+void pkg_array_free(struct pkg_array *a);
 
 
 DPKG_END_DECLS
 DPKG_END_DECLS
 
 

+ 4 - 0
src/query.c

@@ -181,6 +181,8 @@ void listpackages(const char *const *argv) {
 
 
   if (ferror(stdout)) werr("stdout");
   if (ferror(stdout)) werr("stdout");
   if (ferror(stderr)) werr("stderr");  
   if (ferror(stderr)) werr("stderr");  
+
+  pkg_array_free(&array);
   modstatdb_shutdown();
   modstatdb_shutdown();
 }
 }
 
 
@@ -427,6 +429,8 @@ void showpackages(const char *const *argv) {
 
 
   if (ferror(stdout)) werr("stdout");
   if (ferror(stdout)) werr("stdout");
   if (ferror(stderr)) werr("stderr");  
   if (ferror(stderr)) werr("stderr");  
+
+  pkg_array_free(&array);
   freeformat(fmt);
   freeformat(fmt);
   modstatdb_shutdown();
   modstatdb_shutdown();
 }
 }

+ 2 - 0
src/select.c

@@ -78,6 +78,8 @@ void getselections(const char *const *argv) {
   }
   }
   if (ferror(stdout)) werr("stdout");
   if (ferror(stdout)) werr("stdout");
   if (ferror(stderr)) werr("stderr");
   if (ferror(stderr)) werr("stderr");
+
+  pkg_array_free(&array);
 }
 }
 
 
 void setselections(const char *const *argv) {
 void setselections(const char *const *argv) {