コード例 #1
0
        private CpioArchiveEntry readOldBinaryEntry(bool swapHalfWord)
        //        throws IOException
        {
            CpioArchiveEntry ret = new CpioArchiveEntry(CpioConstants.FORMAT_OLD_BINARY);

            ret.setDevice(readBinaryLong(2, swapHalfWord));
            ret.setInode(readBinaryLong(2, swapHalfWord));
            long mode = readBinaryLong(2, swapHalfWord);

            if (mode != 0)
            {
                ret.setMode(mode);
            }
            ret.setUID(readBinaryLong(2, swapHalfWord));
            ret.setGID(readBinaryLong(2, swapHalfWord));
            ret.setNumberOfLinks(readBinaryLong(2, swapHalfWord));
            ret.setRemoteDevice(readBinaryLong(2, swapHalfWord));
            ret.setTime(readBinaryLong(4, swapHalfWord));
            long namesize = readBinaryLong(2, swapHalfWord);

            ret.setSize(readBinaryLong(4, swapHalfWord));
            String name = readCString((int)namesize);

            ret.setName(name);
            if (mode == 0 && !name.equals(CpioConstants.CPIO_TRAILER))
            {
                throw new java.io.IOException("Mode 0 only allowed in the trailer. Found entry: " + name + "Occured at byte: " + getBytesRead());
            }
            skip(ret.getHeaderPadCount());

            return(ret);
        }
コード例 #2
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());
        }
コード例 #3
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());
        }