Hello,
as solution to rhbz #450109 I propose a patch for support of major/minor
devices over 127.
According FreeBSD manpage cpio(5), cpio on FreeBSD uses unsigned short for
c_dev and c_rdev in old_cpio_header structure. This patch does not modify the
structure, but only do appropriate conversion during read.
Greetings
Kamil Dudka
diff -ruN cpio-2.9.90.orig/NEWS cpio-2.9.90/NEWS
--- cpio-2.9.90.orig/NEWS 2008-02-08 10:35:29.000000000 +0100
+++ cpio-2.9.90/NEWS 2008-07-18 10:56:09.000000000 +0200
@@ -7,6 +7,7 @@
Version 2.9.90 (CVS)
* Support MinGW builds (thanks to Robert Millan)
+* Support major/minor device numbers over 127 (rhbz #450109)
Version 2.9 - Sergey Poznyakoff, 2007-06-28
diff -ruN cpio-2.9.90.orig/src/copyin.c cpio-2.9.90/src/copyin.c
--- cpio-2.9.90.orig/src/copyin.c 2008-07-11 13:20:27.000000000 +0200
+++ cpio-2.9.90/src/copyin.c 2008-07-18 10:55:58.000000000 +0200
@@ -1269,15 +1269,15 @@
swab_array ((char *) short_hdr, 13);
}
- file_hdr->c_dev_maj = major (short_hdr->c_dev);
- file_hdr->c_dev_min = minor (short_hdr->c_dev);
+ file_hdr->c_dev_maj = major ((unsigned short)short_hdr->c_dev);
+ file_hdr->c_dev_min = minor ((unsigned short)short_hdr->c_dev);
file_hdr->c_ino = short_hdr->c_ino;
file_hdr->c_mode = short_hdr->c_mode;
file_hdr->c_uid = short_hdr->c_uid;
file_hdr->c_gid = short_hdr->c_gid;
file_hdr->c_nlink = short_hdr->c_nlink;
- file_hdr->c_rdev_maj = major (short_hdr->c_rdev);
- file_hdr->c_rdev_min = minor (short_hdr->c_rdev);
+ file_hdr->c_rdev_maj = major ((unsigned short)short_hdr->c_rdev);
+ file_hdr->c_rdev_min = minor ((unsigned short)short_hdr->c_rdev);
file_hdr->c_mtime = (unsigned long) short_hdr->c_mtimes[0] << 16
| short_hdr->c_mtimes[1];
_______________________________________________
Bug-cpio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-cpio