From deecdb9aa40e64b62ad594a97cc5d941a27a576e Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Mon, 17 Apr 2023 11:10:10 -0400 Subject: ustar, main: Show size of member files Also fix integer type (maximum file size is 8^12-1 = 68719476735). --- diff --git a/src/main.c b/src/main.c index d400934..8daefc6 100644 --- a/src/main.c +++ b/src/main.c @@ -152,7 +152,7 @@ _opkg_opk_main_list_members(struct opkg_opk_ustar *ustar) int ret; while ((ret = opkg_opk_ustar_list(ustar, &member)) == OPKG_OPK_OK) { - puts(member.name); + printf("%11d %s\n", member.size, member.name); } if (ret == OPKG_OPK_ERROR) { fputs("Error: Failed to list data files\n", stderr); diff --git a/src/ustar.c b/src/ustar.c index d728cf5..a4395f4 100644 --- a/src/ustar.c +++ b/src/ustar.c @@ -50,7 +50,7 @@ struct _opkg_opk_ustar_header { struct opkg_opk_ustar { struct opkg_opk_gzip *gzip; - int32_t data_size_remaining; + int64_t data_size_remaining; unsigned char read_record[OPKG_OPK_USTAR_RECORD_SIZE]; }; @@ -118,6 +118,7 @@ opkg_opk_ustar_list(struct opkg_opk_ustar *ustar, memcpy(member->name, header.name, sizeof(header.name)); member->name[sizeof(header.name)] = '\0'; } + member->size = ustar->data_size_remaining; while (ustar->data_size_remaining > 0) { if (opkg_opk_ustar_read(ustar, NULL, NULL) == OPKG_OPK_ERROR) { diff --git a/src/ustar.h b/src/ustar.h index de782b8..4015639 100644 --- a/src/ustar.h +++ b/src/ustar.h @@ -20,6 +20,8 @@ #ifndef OPKG_OPK_USTAR_H_ #define OPKG_OPK_USTAR_H_ +#include + #define OPKG_OPK_USTAR_RECORD_SIZE 512 #define OPKG_OPK_USTAR_NAME_MAX_LEN 257 /* prefix[155] + '/' + name[100] + '\0' */ @@ -27,7 +29,8 @@ struct opkg_opk_ustar; struct opkg_opk_ustar_member { - char name[OPKG_OPK_USTAR_NAME_MAX_LEN]; + char name[OPKG_OPK_USTAR_NAME_MAX_LEN]; + int64_t size; }; struct opkg_opk_ustar * -- cgit v0.9.1