summaryrefslogtreecommitdiffstats
path: root/lib/libarchive
diff options
context:
space:
mode:
authorkientzle <kientzle@FreeBSD.org>2006-02-14 04:00:14 +0000
committerkientzle <kientzle@FreeBSD.org>2006-02-14 04:00:14 +0000
commitad0af0f7049c1284c09f5390d8ed7323b1d4b073 (patch)
treed8e16bcd8af13428575b412ca77bbbe3dbc1e3a8 /lib/libarchive
parent82537e7f969a1ad40f12e1d524aacbf81f39750f (diff)
downloadFreeBSD-src-ad0af0f7049c1284c09f5390d8ed7323b1d4b073.zip
FreeBSD-src-ad0af0f7049c1284c09f5390d8ed7323b1d4b073.tar.gz
Extract device number information from SVR4 CPIO archives.
Without this, you cannot properly restore device node entries from such archives. Thanks to: Steve 'dillo Okay for reporting this oversight.
Diffstat (limited to 'lib/libarchive')
-rw-r--r--lib/libarchive/archive_read_support_format_cpio.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/libarchive/archive_read_support_format_cpio.c b/lib/libarchive/archive_read_support_format_cpio.c
index 65b4316..946a74e 100644
--- a/lib/libarchive/archive_read_support_format_cpio.c
+++ b/lib/libarchive/archive_read_support_format_cpio.c
@@ -336,11 +336,17 @@ header_newc(struct archive *a, struct cpio *cpio, struct stat *st,
/* TODO: Abort here? */
}
+ st->st_dev = makedev(
+ atol16(header->c_devmajor, sizeof(header->c_devmajor)),
+ atol16(header->c_devminor, sizeof(header->c_devminor)));
st->st_ino = atol16(header->c_ino, sizeof(header->c_ino));
st->st_mode = atol16(header->c_mode, sizeof(header->c_mode));
st->st_uid = atol16(header->c_uid, sizeof(header->c_uid));
st->st_gid = atol16(header->c_gid, sizeof(header->c_gid));
st->st_nlink = atol16(header->c_nlink, sizeof(header->c_nlink));
+ st->st_rdev = makedev(
+ atol16(header->c_rdevmajor, sizeof(header->c_rdevmajor)),
+ atol16(header->c_rdevminor, sizeof(header->c_rdevminor)));
st->st_mtime = atol16(header->c_mtime, sizeof(header->c_mtime));
*namelength = atol16(header->c_namesize, sizeof(header->c_namesize));
/* Pad name to 2 more than a multiple of 4. */
OpenPOWER on IntegriCloud