Beispiel #1
0
        private void SetVolumeDescriptor(string systemId, string volumeId, uint volumeSpaceSize, uint pathTableSize,
                                         uint typeLPathTable, uint typeMPathTable, DirectoryRecordWrapper rootDir, DateTime creationDate, DateTime modificationDate, sbyte timeZone)
        {
            byte[] lSystemId;
            byte[] lVolumeId;

            if (VolumeDescriptorType == VolumeType.Primary)
            {
                lSystemId = IsoAlgorithm.StringToByteArray(systemId, IsoAlgorithm.SystemIdLength);
                lVolumeId = IsoAlgorithm.StringToByteArray(volumeId, IsoAlgorithm.VolumeIdLength);
            }
            else if (VolumeDescriptorType == VolumeType.Suplementary)
            {
                lSystemId = IsoAlgorithm.AsciiToUnicode(systemId, IsoAlgorithm.SystemIdLength);
                lVolumeId = IsoAlgorithm.AsciiToUnicode(volumeId, IsoAlgorithm.VolumeIdLength);
            }
            else
            {
                if (m_volumeDescriptor == null)
                {
                    m_volumeDescriptor = new VolumeDescriptor();
                }
                m_volumeDescriptor.VolumeDescType = (byte)m_volumeDescriptorType;
                return;
            }

            ulong lVolumeSpaceSize = IsoAlgorithm.BothEndian(volumeSpaceSize);
            ulong lPathTableSize   = IsoAlgorithm.BothEndian(pathTableSize);

            // typeLPathTable remains unchanged, but typeMPathTable has to change byte order.
            uint        lTypeMPathTable = IsoAlgorithm.ChangeEndian(typeMPathTable);
            DateWrapper lCreationDate   = new DateWrapper(creationDate, timeZone);

            DateWrapper lModificationDate = new DateWrapper(modificationDate, timeZone);

            DateWrapper bufferDate = new DateWrapper(IsoAlgorithm.NoDate);

            SetVolumeDescriptor(lSystemId, lVolumeId, lVolumeSpaceSize, lPathTableSize, typeLPathTable, lTypeMPathTable,
                                rootDir.Record, lCreationDate.AsciiDateRecord, lModificationDate.AsciiDateRecord,
                                bufferDate.AsciiDateRecord, bufferDate.AsciiDateRecord);
        }
Beispiel #2
0
        private void SetDirectoryRecord(UInt32 extentLocation, UInt32 dataLength, DateTime date, sbyte timeZone, bool isDirectory, string name)
        {
            m_date = new DateWrapper(date);
            byte fileFlags = (isDirectory) ? (byte)2 : (byte)0;

            byte[] fileIdentifier;
            if (name == ".")
            {
                fileIdentifier = new byte[1] {
                    0
                };
            }
            else if (name == "..")
            {
                fileIdentifier = new byte[1] {
                    1
                };
            }
            else
            {
                if (isDirectory)
                {
                    fileIdentifier = IsoAlgorithm.StringToByteArray(name);
                }
                else
                {
                    fileIdentifier = IsoAlgorithm.StringToByteArray(name + ";1");
                }
            }

            this.SetDirectoryRecord(
                IsoAlgorithm.BothEndian(extentLocation),
                IsoAlgorithm.BothEndian(dataLength),
                m_date.BinaryDateRecord,
                timeZone,
                fileFlags,
                fileIdentifier
                );
        }