コード例 #1
0
        private void writeNewEntry(CpioArchiveEntry entry) //throws IOException
        {
            long inode  = entry.getInode();
            long devMin = entry.getDeviceMin();

            if (CpioConstants.CPIO_TRAILER.equals(entry.getName()))
            {
                inode = devMin = 0;
            }
            else
            {
                if (inode == 0 && devMin == 0)
                {
                    inode  = nextArtificalDeviceAndInode & 0xFFFFFFFF;
                    devMin = (nextArtificalDeviceAndInode++ >> 32) & 0xFFFFFFFF;
                }
                else
                {
                    nextArtificalDeviceAndInode =
                        java.lang.Math.max(nextArtificalDeviceAndInode,
                                           inode + 0x100000000L * devMin) + 1;
                }
            }

            writeAsciiLong(inode, 8, 16);
            writeAsciiLong(entry.getMode(), 8, 16);
            writeAsciiLong(entry.getUID(), 8, 16);
            writeAsciiLong(entry.getGID(), 8, 16);
            writeAsciiLong(entry.getNumberOfLinks(), 8, 16);
            writeAsciiLong(entry.getTime(), 8, 16);
            writeAsciiLong(entry.getSize(), 8, 16);
            writeAsciiLong(entry.getDeviceMaj(), 8, 16);
            writeAsciiLong(devMin, 8, 16);
            writeAsciiLong(entry.getRemoteDeviceMaj(), 8, 16);
            writeAsciiLong(entry.getRemoteDeviceMin(), 8, 16);
            writeAsciiLong(entry.getName().length() + 1, 8, 16);
            writeAsciiLong(entry.getChksum(), 8, 16);
            writeCString(entry.getName());
            pad(entry.getHeaderPadCount());
        }