-/* pkg.c - the itsy package management system
+/* pkg.c - the opkg package management system
Carl D. Worth
General Public License for more details.
*/
-#include "opkg.h"
+#include "includes.h"
#include <ctype.h>
#include <string.h>
#include <errno.h>
return 0;
}
+void compound_depend_deinit (compound_depend_t *depends)
+{
+ int i;
+ for (i = 0; i < depends->possibility_count; i++)
+ {
+ depend_t *d;
+ d = depends->possibilities[i];
+ free (d->version);
+ free (d);
+ }
+ free (depends->possibilities);
+}
+
void pkg_deinit(pkg_t *pkg)
{
+ int i;
+
free(pkg->name);
pkg->name = NULL;
pkg->epoch = 0;
pkg->state_want = SW_UNKNOWN;
pkg->state_flag = SF_OK;
pkg->state_status = SS_NOT_INSTALLED;
+
+ //for (i = 0; i < pkg->replaces_count; i++)
+ free (pkg->replaces);
+ pkg->replaces = NULL;
+
+ for (i = 0; i < pkg->depends_count; i++)
+ free (pkg->depends_str[i]);
free(pkg->depends_str);
pkg->depends_str = NULL;
+
+ for (i = 0; i < pkg->provides_count; i++)
+ free (pkg->provides_str[i]);
free(pkg->provides_str);
pkg->provides_str = NULL;
- pkg->depends_count = 0;
- /* XXX: CLEANUP: MEMORY_LEAK: how to free up pkg->depends ? */
+
+ for (i = 0; i < pkg->conflicts_count; i++)
+ free (pkg->conflicts_str[i]);
+ free(pkg->conflicts_str);
+ pkg->conflicts_str = NULL;
+
+ for (i = 0; i < pkg->replaces_count; i++)
+ free (pkg->replaces_str[i]);
+ free(pkg->replaces_str);
+ pkg->replaces_str = NULL;
+
+ for (i = 0; i < pkg->recommends_count; i++)
+ free (pkg->recommends_str[i]);
+ free(pkg->recommends_str);
+ pkg->recommends_str = NULL;
+
+ for (i = 0; i < pkg->suggests_count; i++)
+ free (pkg->suggests_str[i]);
+ free(pkg->suggests_str);
+ pkg->suggests_str = NULL;
+
+ if (pkg->depends)
+ {
+ int count = pkg->pre_depends_count + pkg->depends_count + pkg->recommends_count + pkg->suggests_count;
+ int x;
+
+ for (x = 0; x < count; x++)
+ compound_depend_deinit (&pkg->depends[x]);
+ free (pkg->depends);
+ }
+
+ if (pkg->conflicts)
+ {
+ int x;
+ for (x = 0; x < pkg->conflicts_count; x++)
+ compound_depend_deinit (&pkg->conflicts[x]);
+ free (pkg->conflicts);
+ }
+
+ free (pkg->provides);
+
pkg->pre_depends_count = 0;
free(pkg->pre_depends_str);
pkg->pre_depends_str = NULL;
pkg->provides_count = 0;
- /* XXX: CLEANUP: MEMORY_LEAK: how to free up pkg->provides ? */
- /* XXX: CLEANUP: MEMORY_LEAK: how to free up pkg->suggests ? */
free(pkg->filename);
pkg->filename = NULL;
free(pkg->local_filename);
pkg->installed_files_ref_cnt = 1;
pkg_free_installed_files(pkg);
pkg->essential = 0;
+ free (pkg->tags);
+ pkg->tags = NULL;
}
int pkg_init_from_file(pkg_t *pkg, const char *filename)
strncat(buff ,line, strlen(line));
free(line);
+ line = pkg_formatted_field(pkg, "Tags");
+ strncat(buff ,line, strlen(line));
+ free(line);
+
return buff;
}
}
}
break;
+ case 't':
+ case 'T':
+ if (strcasecmp(field, "Tags") == 0) {
+ /* Tags */
+ if (pkg->tags) {
+ temp = (char *)realloc(temp,strlen(pkg->tags)+8);
+ if ( temp == NULL ){
+ fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
+ return NULL;
+ }
+ temp[0]='\0';
+ snprintf(temp, (strlen(pkg->tags)+8), "Tags: %s\n", pkg->tags);
+ }
+ }
+ break;
case 'v':
case 'V': {
/* Version */
return 0;
}
-int pkg_name_version_and_architecture_compare(void *p1, void *p2)
+int pkg_name_version_and_architecture_compare(const void *p1, const void *p2)
{
- const pkg_t *a = *(const pkg_t **)p1;
- const pkg_t *b = *(const pkg_t **)p2;
+ const pkg_t *a = *(const pkg_t**) p1;
+ const pkg_t *b = *(const pkg_t**) p2;
int namecmp;
int vercmp;
if (!a->name || !b->name) {
return 0;
}
-int abstract_pkg_name_compare(void *p1, void *p2)
+int abstract_pkg_name_compare(const void *p1, const void *p2)
{
const abstract_pkg_t *a = *(const abstract_pkg_t **)p1;
const abstract_pkg_t *b = *(const abstract_pkg_t **)p2;
}
str_list_deinit(pkg->installed_files);
+ free (pkg->installed_files);
}
pkg->installed_files = NULL;
opkg_message(conf, OPKG_NOTICE, "pkg_write_filelist pkg=%s returned %d\n", pkg->name, err);
}
}
+ pkg_vec_free (installed_pkgs);
return 0;
}