summaryrefslogtreecommitdiffstats
path: root/src/ustar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ustar.c')
-rw-r--r--src/ustar.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/ustar.c b/src/ustar.c
index 669596e..8a0a43c 100644
--- a/src/ustar.c
+++ b/src/ustar.c
@@ -178,7 +178,8 @@ opkg_opk_ustar_list(struct opkg_opk_ustar *ustar,
return OPKG_OPK_ERROR;
}
- /* Set name, mode, size, mtime, type, linkname, uname, and gname. */
+ /* Set name, mode, size, mtime, type, linkname, uname, gname, devmajor,
+ * and devminor. */
if (ustar->header.prefix[0] != '\0') {
sprintf((*member)->name, "%s/%s",
ustar->header.prefix, ustar->header.name);
@@ -237,6 +238,18 @@ opkg_opk_ustar_list(struct opkg_opk_ustar *ustar,
sizeof((*member)->uname));
strncpy((*member)->gname, ustar->header.gname,
sizeof((*member)->gname));
+ (*member)->devmajor = strtol(ustar->header.devmajor, &end,
+ OPKG_OPK_USTAR_NUM_BASE_);
+ if (*end != '\0') {
+ free(*member);
+ return OPKG_OPK_ERROR;
+ }
+ (*member)->devminor = strtol(ustar->header.devminor, &end,
+ OPKG_OPK_USTAR_NUM_BASE_);
+ if (*end != '\0') {
+ free(*member);
+ return OPKG_OPK_ERROR;
+ }
return OPKG_OPK_OK; /* Possibly more members in archive */
}