*** cpio-2.4.2/copyout.c.orig	Wed Jan 10 17:10:45 1996
--- cpio-2.4.2/copyout.c	Tue May 25 07:01:20 1999
***************
*** 44,49 ****
--- 44,51 ----
       struct new_cpio_header *file_hdr;
       int out_des;
  {
+   /* This is a GCC or libc 6 bug workaround... */
+   int libc6_fix_dev, libc6_fix_rdev;	/* can't be where it should be -- see below */
    if (archive_format == arf_newascii || archive_format == arf_crcascii)
      {
        char ascii_header[112];
***************
*** 108,122 ****
        int dev = 0, rdev = 0;
  #endif
  
        if ((file_hdr->c_ino >> 16) != 0)
  	error (0, 0, "%s: truncating inode number", file_hdr->c_name);
  
        sprintf (ascii_header,
  	       "%06o%06o%06lo%06lo%06lo%06lo%06lo%06o%011lo%06lo%011lo",
! 	       file_hdr->c_magic & 0xFFFF, dev & 0xFFFF,
  	       file_hdr->c_ino & 0xFFFF, file_hdr->c_mode & 0xFFFF,
  	       file_hdr->c_uid & 0xFFFF, file_hdr->c_gid & 0xFFFF,
! 	       file_hdr->c_nlink & 0xFFFF, rdev & 0xFFFF,
  	       file_hdr->c_mtime, file_hdr->c_namesize & 0xFFFF,
  	       file_hdr->c_filesize);
        tape_buffered_write (ascii_header, out_des, 76L);
--- 110,135 ----
        int dev = 0, rdev = 0;
  #endif
  
+       /* This is a GCC or libc 6 bug workaround...	ifndef __MSDOS__,
+ 	 GCC dev_t is of 'unsigned long long int' type, which is making sprintf
+ 	 bug out with confused output as a result below.  To fix this without
+ 	 rewriting libc 6.0, libc6_fix_dev and libc6_fix_rdev is used here: */
+ 
+       /* Can't have this declaration here - is getting parse error before `int'
+       int libc6_fix_dev, libc6_fix_rdev; */
+ 
+       libc6_fix_dev = dev & 0xFFFF;
+       libc6_fix_rdev = rdev & 0xFFFF;
+ 
        if ((file_hdr->c_ino >> 16) != 0)
  	error (0, 0, "%s: truncating inode number", file_hdr->c_name);
  
        sprintf (ascii_header,
  	       "%06o%06o%06lo%06lo%06lo%06lo%06lo%06o%011lo%06lo%011lo",
! 	       file_hdr->c_magic & 0xFFFF, libc6_fix_dev & 0xFFFF,
  	       file_hdr->c_ino & 0xFFFF, file_hdr->c_mode & 0xFFFF,
  	       file_hdr->c_uid & 0xFFFF, file_hdr->c_gid & 0xFFFF,
! 	       file_hdr->c_nlink & 0xFFFF, libc6_fix_rdev & 0xFFFF,
  	       file_hdr->c_mtime, file_hdr->c_namesize & 0xFFFF,
  	       file_hdr->c_filesize);
        tape_buffered_write (ascii_header, out_des, 76L);
