libopkg: fix pkg_set_ptr() to properly set NULL pointers
[oweals/opkg-lede.git] / libopkg / pkg.h
index 0931e6e25644ae9643d032c598c55f5e7ad51d89..d9cab552826b3d3f2328f91cffab0d3bca676f6e 100644 (file)
@@ -60,6 +60,7 @@ enum pkg_state_flag {
        SF_MARKED = 64,         /* temporary mark */
        SF_FILELIST_CHANGED = 128,      /* needs filelist written */
        SF_USER = 256,
+       SF_NEED_DETAIL = 512,
        SF_LAST_STATE_FLAG
 };
 typedef enum pkg_state_flag pkg_state_flag_t;
@@ -89,13 +90,18 @@ enum pkg_fields {
        PKG_LOCAL_FILENAME,
        PKG_VERSION,
        PKG_REVISION,
-       PKG_ARCHITECTURE,
        PKG_DESCRIPTION,
        PKG_MD5SUM,
        PKG_SHA256SUM,
        PKG_SIZE,
        PKG_INSTALLED_SIZE,
        PKG_INSTALLED_TIME,
+       PKG_TMP_UNPACK_DIR,
+       PKG_REPLACES,
+       PKG_PROVIDES,
+       PKG_DEPENDS,
+       PKG_CONFLICTS,
+       PKG_CONFFILES,
 };
 
 struct abstract_pkg {
@@ -138,36 +144,12 @@ struct pkg {
        char *name;
        pkg_src_t *src;
        pkg_dest_t *dest;
-       pkg_state_want_t state_want;
-       pkg_state_flag_t state_flag;
-       pkg_state_status_t state_status;
-       char **depends_str;
-       unsigned int depends_count;
-       char **pre_depends_str;
-       unsigned int pre_depends_count;
-       char **recommends_str;
-       unsigned int recommends_count;
-       char **suggests_str;
-       unsigned int suggests_count;
-       struct active_list list;        /* Used for installing|upgrading */
-       compound_depend_t *depends;
-
-       char **conflicts_str;
-       compound_depend_t *conflicts;
-       unsigned int conflicts_count;
-
-       char **replaces_str;
-       unsigned int replaces_count;
-       abstract_pkg_t **replaces;
-
-       char **provides_str;
-       unsigned int provides_count;
-       abstract_pkg_t **provides;
+       pkg_state_want_t state_want:3;
+       pkg_state_flag_t state_flag:11;
+       pkg_state_status_t state_status:4;
 
        abstract_pkg_t *parent;
 
-       char *tmp_unpack_dir;
-       conffile_list_t conffiles;
        /* As pointer for lazy evaluation */
        str_list_t *installed_files;
        /* XXX: CLEANUP: I'd like to perhaps come up with a better
@@ -175,7 +157,6 @@ struct pkg {
           installed_files list was being freed from an inner loop while
           still being used within an outer loop. */
        int installed_files_ref_cnt;
-       int arch_priority;
 
        int essential:1;
 /* Adding this flag, to "force" opkg to choose a "provided_by_hand" package, if there are multiple choice */
@@ -186,6 +167,8 @@ struct pkg {
        int auto_installed:1;
        int is_upgrade:1;
 
+       int arch_index:3;
+
        struct blob_buf blob;
 };
 
@@ -215,14 +198,26 @@ static inline char *pkg_get_string(const pkg_t *pkg, int id)
 
 static inline void * pkg_set_ptr(pkg_t *pkg, int id, void *ptr)
 {
-       return pkg_set_raw(pkg, id, ptr, sizeof(ptr));
+       void **res = pkg_set_raw(pkg, id, &ptr, sizeof(ptr));
+       return res ? *res : NULL;
 }
 
 static inline void * pkg_get_ptr(const pkg_t *pkg, int id)
 {
-       return pkg_get_raw(pkg, id);
+       void **ptr = pkg_get_raw(pkg, id);
+       return ptr ? *ptr : NULL;
 }
 
+char *pkg_set_architecture(pkg_t *pkg, const char *architecture, ssize_t len);
+char *pkg_get_architecture(const pkg_t *pkg);
+int pkg_get_arch_priority(const pkg_t *pkg);
+
+char *pkg_get_md5(const pkg_t *pkg);
+char *pkg_set_md5(pkg_t *pkg, const char *cksum);
+
+char *pkg_get_sha256(const pkg_t *pkg);
+char *pkg_set_sha256(pkg_t *pkg, const char *cksum);
+
 abstract_pkg_t *abstract_pkg_new(void);
 
 /*