コード例 #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());
        }
コード例 #2
0
        private void writeOldBinaryEntry(CpioArchiveEntry entry, bool swapHalfWord) //throws IOException
        {
            long inode  = entry.getInode();
            long device = entry.getDevice();

            if (CpioConstants.CPIO_TRAILER.equals(entry.getName()))
            {
                inode = device = 0;
            }
            else
            {
                if (inode == 0 && device == 0)
                {
                    inode  = nextArtificalDeviceAndInode & 0xFFFF;
                    device = (nextArtificalDeviceAndInode++ >> 16) & 0xFFFF;
                }
                else
                {
                    nextArtificalDeviceAndInode =
                        java.lang.Math.max(nextArtificalDeviceAndInode,
                                           inode + 0x10000 * device) + 1;
                }
            }

            writeBinaryLong(device, 2, swapHalfWord);
            writeBinaryLong(inode, 2, swapHalfWord);
            writeBinaryLong(entry.getMode(), 2, swapHalfWord);
            writeBinaryLong(entry.getUID(), 2, swapHalfWord);
            writeBinaryLong(entry.getGID(), 2, swapHalfWord);
            writeBinaryLong(entry.getNumberOfLinks(), 2, swapHalfWord);
            writeBinaryLong(entry.getRemoteDevice(), 2, swapHalfWord);
            writeBinaryLong(entry.getTime(), 4, swapHalfWord);
            writeBinaryLong(entry.getName().length() + 1, 2, swapHalfWord);
            writeBinaryLong(entry.getSize(), 4, swapHalfWord);
            writeCString(entry.getName());
            pad(entry.getHeaderPadCount());
        }
コード例 #3
0
        private void writeOldAsciiEntry(CpioArchiveEntry entry)
        //throws IOException
        {
            long inode  = entry.getInode();
            long device = entry.getDevice();

            if (CpioConstants.CPIO_TRAILER.equals(entry.getName()))
            {
                inode = device = 0;
            }
            else
            {
                if (inode == 0 && device == 0)
                {
                    inode  = nextArtificalDeviceAndInode & 0777777;
                    device = (nextArtificalDeviceAndInode++ >> 18) & 0777777;
                }
                else
                {
                    nextArtificalDeviceAndInode =
                        java.lang.Math.max(nextArtificalDeviceAndInode,
                                           inode + 01000000 * device) + 1;
                }
            }

            writeAsciiLong(device, 6, 8);
            writeAsciiLong(inode, 6, 8);
            writeAsciiLong(entry.getMode(), 6, 8);
            writeAsciiLong(entry.getUID(), 6, 8);
            writeAsciiLong(entry.getGID(), 6, 8);
            writeAsciiLong(entry.getNumberOfLinks(), 6, 8);
            writeAsciiLong(entry.getRemoteDevice(), 6, 8);
            writeAsciiLong(entry.getTime(), 11, 8);
            writeAsciiLong(entry.getName().length() + 1, 6, 8);
            writeAsciiLong(entry.getSize(), 11, 8);
            writeCString(entry.getName());
        }