I am looking at ipkg, the Itsy Package Manager. It's dpkg+apt for embedded systems. You can get the full source from http://www.handhelds.org/pub/packages/ipkg/.
Code:
typedef struct pkg pkg_t;
struct pkg
{
char *name;
unsigned long epoch;
char *version;
char *revision;
char *familiar_revision;
pkg_src_t *src;
pkg_dest_t *dest;
char *architecture;
char *section;
char *maintainer;
char *description;
pkg_state_want_t state_want;
pkg_state_flag_t state_flag;
pkg_state_status_t state_status;
char **depends_str;
int depends_count;
char **pre_depends_str;
int pre_depends_count;
char **recommends_str;
int recommends_count;
char **suggests_str;
int suggests_count;
compound_depend_t * depends;
/* Abhaya: new conflicts */
char **conflicts_str;
compound_depend_t * conflicts;
int conflicts_count;
char **replaces_str;
int replaces_count;
abstract_pkg_t ** replaces;
char **provides_str;
int provides_count;
abstract_pkg_t ** provides;
abstract_pkg_t *parent;
pkg_t *old_pkg; /* during upgrade, points from installee to previously installed */
char *filename;
char *local_filename;
char *url;
char *tmp_unpack_dir;
char *md5sum;
char *size;
char *installed_size;
char *priority;
char *source;
conffile_list_t conffiles;
time_t installed_time;
/* As pointer for lazy evaluation */
str_list_t *installed_files;
/* XXX: CLEANUP: I'd like to perhaps come up with a better
mechanism to avoid the problem here, (which is that the
installed_files list was being freed from an inner loop while
still being used within an outer loop. */
int installed_files_ref_cnt;
int essential;
int arch_priority;
/* Adding this flag, to "force" ipkg to choose a "provided_by_hand" package, if there are multiple choice */
int provided_by_hand;
/* Check whether this pkg is being removed or installed */
int is_processing;
};
Code:
int buildDepends(hash_table_t * hash, pkg_t * pkg)
{
int count;
register int i;
compound_depend_t * depends;
if(!(count = pkg->pre_depends_count + pkg->depends_count + pkg->recommends_count + pkg->suggests_count))
return 0;
if (0 && pkg->pre_depends_count)
fprintf(stderr, "pkg=%s pre_depends_count=%d depends_count=%d\n",
pkg->name, pkg->pre_depends_count, pkg->depends_count);
depends = pkg->depends = malloc(sizeof(compound_depend_t) * count);
if (depends == NULL) {
fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
return -1;
}
...
Bookmarks