summaryrefslogtreecommitdiffstats
path: root/src/package.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2003-09-07 23:11:37 +0000
committerLennart Poettering <lennart@poettering.net>2003-09-07 23:11:37 +0000
commit17fac7f2c92df794b88648a95bea6796621dbe83 (patch)
treef50baaf521f683a24e3de98141643863fab74af1 /src/package.c
parent411862e81940e9eaea542ae1c4a04cca5e5b88a3 (diff)
Many fixes, primarily documentation
git-svn-id: file:///home/lennart/svn/public/syrep/trunk@32 07ea20a6-d2c5-0310-9e02-9ef735347d72
Diffstat (limited to 'src/package.c')
-rw-r--r--src/package.c37
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) {