00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PAR1FILEFORMAT_H__
00021 #define __PAR1FILEFORMAT_H__
00022
00023 #ifdef WIN32
00024 #pragma pack(push, 1)
00025 #define PACKED
00026 #else
00027 #define PACKED __attribute__ ((packed))
00028 #endif
00029
00030 #ifdef _MSC_VER
00031 #pragma warning(disable:4200)
00032 #endif
00033
00034 struct PAR1MAGIC {u8 magic[8];}PACKED;
00035
00036 struct PAR1FILEHEADER
00037 {
00038 PAR1MAGIC magic;
00039 leu32 fileversion;
00040 leu32 programversion;
00041 MD5Hash controlhash;
00042 MD5Hash sethash;
00043 leu64 volumenumber;
00044 leu64 numberoffiles;
00045 leu64 filelistoffset;
00046 leu64 filelistsize;
00047 leu64 dataoffset;
00048 leu64 datasize;
00049 }PACKED;
00050
00051 struct PAR1FILEENTRY
00052 {
00053 leu64 entrysize;
00054 leu64 status;
00055 leu64 filesize;
00056 MD5Hash hashfull;
00057 MD5Hash hash16k;
00058 leu16 name[];
00059 }PACKED;
00060
00061 enum FILEENTRYSTATUS
00062 {
00063 INPARITYVOLUME = 1,
00064 CHECKED = 2,
00065 };
00066
00067 #ifdef _MSC_VER
00068 #pragma warning(default:4200)
00069 #endif
00070
00071 #ifdef WIN32
00072 #pragma pack(pop)
00073 #endif
00074 #undef PACKED
00075
00076
00077
00078 inline bool operator == (const PAR1MAGIC &left, const PAR1MAGIC &right)
00079 {
00080 return (0==memcmp(&left, &right, sizeof(left)));
00081 }
00082
00083 inline bool operator != (const PAR1MAGIC &left, const PAR1MAGIC &right)
00084 {
00085 return !operator==(left, right);
00086 }
00087
00088 extern PAR1MAGIC par1_magic;
00089
00090 #endif //__PAR1FILEFORMAT_H__