diff options
Diffstat (limited to 'src/package.c')
-rw-r--r-- | src/package.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/package.c b/src/package.c index 3d23306..9496742 100644 --- a/src/package.c +++ b/src/package.c @@ -717,42 +717,57 @@ finish: return r; } -const char *package_get_item(struct package* p, const char *name, int c) { +int package_get_item(struct package* p, const char *name, int c, const char ** fn) { struct package_item *i; char path[PATH_MAX]; assert(p && name); for (i = p->items; i; i = i->next) - if (!strncmp(name, i->name, PACKAGE_ITEMNAMELEN)) - return i->path; + if (!strncmp(name, i->name, PACKAGE_ITEMNAMELEN)) { + if (fn) + *fn = i->path; + + return 1; + } for (;;) { int r; if ((r = read_item(p)) < 0) - return NULL; + return -1; - if (r == 0) + if (!r) break; assert(p->last); - if (!strncmp(name, p->last->name, PACKAGE_ITEMNAMELEN)) - return p->last->path; + if (!strncmp(name, p->last->name, PACKAGE_ITEMNAMELEN)) { + if (fn) + *fn = p->last->path; + + return 1; + } } if (!c) - return NULL; + return 0; snprintf(path, sizeof(path), "%s/%i", p->base, p->count++); if (!(i = item_new(name, path, 1))) { unlink(path); - return NULL; + return -1; } - + append_item(p, i); + + assert(i); + + assert(fn); - return i->path; + if (fn) + *fn = i->path; + + return 1; } int package_add_file(struct package *p, const char *name, const char *fn) { |