summaryrefslogtreecommitdiffstats
path: root/src/opk.c
diff options
context:
space:
mode:
authorPatrick McDermott <patrick.mcdermott@libiquity.com>2023-04-18 16:41:42 (EDT)
committer Patrick McDermott <patrick.mcdermott@libiquity.com>2023-04-18 19:47:12 (EDT)
commitb65c075d13990383f30b27aeafacdd4575fafdee (patch)
treec338c3db137405b98bf74091d9c9965d5c92d7cf /src/opk.c
parent25ce512c39f578def257f81e10e22b06123a069d (diff)
ustar: Use linked list instead of varargs in seek
Also indicate when all sought member files are found.
Diffstat (limited to 'src/opk.c')
-rw-r--r--src/opk.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/opk.c b/src/opk.c
index ce24e55..82aaca3 100644
--- a/src/opk.c
+++ b/src/opk.c
@@ -59,7 +59,8 @@ _opkg_opk_opk_file_read(void *user_data, char **buffer, size_t *size)
struct opkg_opk_opk *
opkg_opk_opk_init_outer(const char *file_name)
{
- struct opkg_opk_opk *opk;
+ struct opkg_opk_opk *opk;
+ struct opkg_opk_ustar_seek_name seek_name;
opk = malloc(sizeof(*opk));
if (opk == NULL) {
@@ -89,8 +90,10 @@ opkg_opk_opk_init_outer(const char *file_name)
}
/* Check package version. */
- if (opkg_opk_ustar_seek(opk->outer_ustar, 1, "debian-binary") !=
- OPKG_OPK_OK) {
+ seek_name.name = "debian-binary";
+ seek_name.next = NULL;
+ if (opkg_opk_ustar_seek(opk->outer_ustar, &seek_name) == OPKG_OPK_ERROR)
+ {
fputs("Error: Failed to find \"debian-binary\" in archive\n",
stderr);
goto error3;
@@ -125,7 +128,8 @@ opkg_opk_opk_init_outer(const char *file_name)
int
opkg_opk_opk_init_inner(struct opkg_opk_opk *opk, const char *member)
{
- int ret;
+ int ret;
+ struct opkg_opk_ustar_seek_name seek_name;
/* Finish reading previous inner archive, if any. */
while ((ret = opkg_opk_ustar_read(opk->outer_ustar, NULL, NULL)) ==
@@ -136,8 +140,11 @@ opkg_opk_opk_init_inner(struct opkg_opk_opk *opk, const char *member)
}
/* Find requested inner archive. */
- if (opkg_opk_ustar_seek(opk->outer_ustar, 1, member) !=
- OPKG_OPK_OK) {
+ seek_name.name = member;
+ seek_name.found = 0;
+ seek_name.next = NULL;
+ if (opkg_opk_ustar_seek(opk->outer_ustar, &seek_name) == OPKG_OPK_ERROR)
+ {
fprintf(stderr, "Error: Failed to find \"%s\" in archive\n",
member);
return OPKG_OPK_ERROR;
@@ -164,7 +171,8 @@ opkg_opk_opk_init_inner(struct opkg_opk_opk *opk, const char *member)
}
int
-opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
+opkg_opk_opk_read_control(struct opkg_opk_opk *opk,
+ struct opkg_opk_ustar_seek_name *names)
{
char *buffer;
size_t size;
@@ -174,8 +182,7 @@ opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
puts("");
}
- if (opkg_opk_ustar_seek(opk->inner_ustar, 2, "control", "./control") !=
- OPKG_OPK_OK) {
+ if (opkg_opk_ustar_seek(opk->inner_ustar, names) == OPKG_OPK_ERROR) {
fputs("Error: Failed to find control file\n", stderr);
return OPKG_OPK_ERROR;
}