diff options
author | kientzle <kientzle@FreeBSD.org> | 2006-02-14 04:00:14 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2006-02-14 04:00:14 +0000 |
commit | ad0af0f7049c1284c09f5390d8ed7323b1d4b073 (patch) | |
tree | d8e16bcd8af13428575b412ca77bbbe3dbc1e3a8 /lib | |
parent | 82537e7f969a1ad40f12e1d524aacbf81f39750f (diff) | |
download | FreeBSD-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')
-rw-r--r-- | lib/libarchive/archive_read_support_format_cpio.c | 6 |
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. */ |