public FileParameters(BER br, bool IsFile, ushort Bitmap) { Stream si = br.BaseStream; Int64 off = si.Position; IsDirectory = !IsFile; ushort? LongNameOff = null; ushort? ShortNameOff = null; if (0 != (Bitmap & 1U)) Attributes = br.ReadUInt16(); if (0 != (Bitmap & 2U)) ParentDirectoryID = br.ReadUInt32(); if (0 != (Bitmap & 4U)) CreationDate = br.ReadUInt32(); if (0 != (Bitmap & 8U)) ModificationDate = br.ReadUInt32(); if (0 != (Bitmap & 16U)) BackupDate = br.ReadUInt32(); if (0 != (Bitmap & 32U)) FinderInfo = br.ReadBytes(32); if (0 != (Bitmap & 64U)) LongNameOff = br.ReadUInt16(); if (0 != (Bitmap & 128U)) ShortNameOff = br.ReadUInt16(); if (0 != (Bitmap & 256U)) NodeID = br.ReadUInt32(); if (IsFile) { if (0 != (Bitmap & 512U)) DataForkSize = br.ReadUInt32(); if (0 != (Bitmap & 1024U)) ResourceForkSize = br.ReadUInt32(); if (0 != (Bitmap & 2048U)) ExtDataForkSize = br.ReadInt64(); if (0 != (Bitmap & 4096U)) throw new NotSupportedException("Launch limit"); if (0 != (Bitmap & 8192U)) throw new NotSupportedException("UTF-8 name"); if (0 != (Bitmap & 16384U)) ExtResourceForkSize = br.ReadInt64(); if (0 != (Bitmap & 32768U)) UnixPrivs = new FPUnixPrivs(br); } else { if (0 != (Bitmap & 512U)) OffspringCount = br.ReadUInt16(); if (0 != (Bitmap & 1024U)) throw new NotSupportedException("Owner ID"); if (0 != (Bitmap & 2048U)) throw new NotSupportedException("Group ID"); if (0 != (Bitmap & 4096U)) AccessRights = br.ReadUInt32(); if (0 != (Bitmap & 8192U)) throw new NotSupportedException("Unicode Name"); if (0 != (Bitmap & 16384U)) throw new NotSupportedException("?"); if (0 != (Bitmap & 32768U)) UnixPrivs = new FPUnixPrivs(br); } if (LongNameOff.HasValue) { si.Position = off + LongNameOff.Value; LongName = UtAfp.Read1Str(si); } if (ShortNameOff.HasValue) { si.Position = off + ShortNameOff.Value; ShortName = UtAfp.Read1Str(si); } }
public FPSetFileParms WithUNIXPrivileges(FPUnixPrivs UnixPrivs) { Parms.UnixPrivs = UnixPrivs; Bitmap |= (ushort)AfpFileBitmap.UNIXPrivileges; return this; }