diff options
Diffstat (limited to 'src/opk.c')
-rw-r--r-- | src/opk.c | 25 |
1 files changed, 16 insertions, 9 deletions
@@ -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; } |