function old new delta
get_header_cpio 968 990 +22
cpio_main 533 526 -7
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
#endif
archive_handle = init_handle();
#endif
archive_handle = init_handle();
- archive_handle->src_fd = STDIN_FILENO;
+ /* archive_handle->src_fd = STDIN_FILENO; - done by init_handle */
archive_handle->seek = seek_by_read;
archive_handle->ah_flags = ARCHIVE_EXTRACT_NEWER;
archive_handle->seek = seek_by_read;
archive_handle->ah_flags = ARCHIVE_EXTRACT_NEWER;
file_header->name = xzalloc(namesize + 1);
/* Read in filename */
xread(archive_handle->src_fd, file_header->name, namesize);
file_header->name = xzalloc(namesize + 1);
/* Read in filename */
xread(archive_handle->src_fd, file_header->name, namesize);
+ if (file_header->name[0] == '/') {
+ /* Testcase: echo /etc/hosts | cpio -pvd /tmp
+ * Without this code, it tries to unpack /etc/hosts
+ * into "/etc/hosts", not "etc/hosts".
+ */
+ char *p = file_header->name;
+ do p++; while (*p == '/');
+ overlapping_strcpy(file_header->name, p);
+ }
archive_handle->offset += namesize;
/* Update offset amount and skip padding before file contents */
archive_handle->offset += namesize;
/* Update offset amount and skip padding before file contents */
-rw-r--r-- 2 $user $group 0 x
-rw-r--r-- 2 $user $group 0 y
" \
-rw-r--r-- 2 $user $group 0 x
-rw-r--r-- 2 $user $group 0 y
" \
testing "cpio lists hardlinks" \
"$ECHO -ne '$hexdump' | bzcat | cpio -t 2>&1; echo \$?" \
"\
testing "cpio lists hardlinks" \
"$ECHO -ne '$hexdump' | bzcat | cpio -t 2>&1; echo \$?" \
"\
cpio.testdir
cpio.testdir/x
cpio.testdir/y
cpio.testdir
cpio.testdir/x
cpio.testdir/y
-rw-r--r-- 2 $user $group 0 empty
-rw-r--r-- 2 $user $group 0 empty1
-rw-r--r-- 2 $user $group 2 nonempty
-rw-r--r-- 2 $user $group 0 empty
-rw-r--r-- 2 $user $group 0 empty1
-rw-r--r-- 2 $user $group 2 nonempty