Hi, On Tue, May 05, 2015 at 09:09:53PM +0100, Stuart Henderson wrote: > On 2015/05/04 02:59, heigo wrote: > > par2cmdline doesn't work on 5.7/amd64, just exits with the message: > > "Main packet not found." > > > > Works fine on the same machine under 5.5. > > Tried 5.6 also, same result as 5.7. > > > > h. > > > > Is this any better? It does not pass all self-tests but might be > worth committing if it's an improvement over what we have currently. > ...
I can conform that par2 0.4 stopped working between 5.5 and 5.6 and for me it constantly gives: Main packet not found. I've tested your update to 0.6.12 Stuart, and it is better, as it properly loads all packets from par2 files, but that version is not able to repair broken collections. I've narrowed down which patch fixes breakage for 5.5 -> 5.6 change (main packet not found error) unfortunately par2 0.4 with below changes also is not able to repair collections like 0.6.13 (I've also tested). Giving that 0.6.13 doesn't fix all the problems, I would prefer for now to keep changes to minimum and push below update. Tested on current amd64. So currently, below patch and latest 0.6.13 can verify collections, but are not able to repair them :/ Index: Makefile =================================================================== RCS file: /cvs/ports/archivers/par2cmdline/Makefile,v retrieving revision 1.10 diff -u -p -u -r1.10 Makefile --- Makefile 19 Apr 2015 17:52:47 -0000 1.10 +++ Makefile 27 Jun 2015 02:34:43 -0000 @@ -2,7 +2,7 @@ COMMENT= command line implementation of the PAR v2.0 specification DISTNAME= par2cmdline-0.4 -REVISION= 2 +REVISION= 3 CATEGORIES= archivers MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=parchive/} Index: patches/patch-letype_h =================================================================== RCS file: patches/patch-letype_h diff -N patches/patch-letype_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-letype_h 27 Jun 2015 02:34:43 -0000 @@ -0,0 +1,151 @@ +$OpenBSD$ + +- upstream github commit 4a4179f1e42bc11bbcc9d24554690d3bc5c31b38 + +--- letype.h.orig Mon May 26 19:01:17 2003 ++++ letype.h Sat Jun 27 03:02:25 2015 +@@ -28,44 +28,15 @@ typedef u64 leu64; + + #else + +-class leu16 ++struct leu16 + { +-public: +- leu16(void); +- +- leu16(const leu16 &other); +- leu16& operator=(const leu16 &other); +- +- leu16(const u16 &other); + leu16& operator=(const u16 &other); + + operator u16(void) const; + +-protected: + u16 value; + }; + +-inline leu16::leu16(void) +-{ +-} +- +-inline leu16::leu16(const leu16 &other) +-: value(other.value) +-{ +-} +- +-inline leu16& leu16::operator =(const leu16 &other) +-{ +- value = other.value; +- return *this; +-} +- +-inline leu16::leu16(const u16 &other) +-{ +- ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); +- ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); +-} +- + inline leu16& leu16::operator=(const u16 &other) + { + ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); +@@ -81,46 +52,15 @@ inline leu16::operator u16(void) const + } + + +-class leu32 ++struct leu32 + { +-public: +- leu32(void); +- +- leu32(const leu32 &other); +- leu32& operator=(const leu32 &other); +- +- leu32(const u32 &other); + leu32& operator=(const u32 &other); + + operator u32(void) const; + +-protected: + u32 value; + }; + +-inline leu32::leu32(void) +-{ +-} +- +-inline leu32::leu32(const leu32 &other) +-: value(other.value) +-{ +-} +- +-inline leu32& leu32::operator =(const leu32 &other) +-{ +- value = other.value; +- return *this; +-} +- +-inline leu32::leu32(const u32 &other) +-{ +- ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); +- ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); +- ((unsigned char*)&value)[2] = (unsigned char)((other >> 16) & 0xff); +- ((unsigned char*)&value)[3] = (unsigned char)((other >> 24) & 0xff); +-} +- + inline leu32& leu32::operator=(const u32 &other) + { + ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); +@@ -140,49 +80,14 @@ inline leu32::operator u32(void) const + } + + +-class leu64 ++struct leu64 + { +-public: +- leu64(void); +- +- leu64(const leu64 &other); +- leu64& operator=(const leu64 &other); +- +- leu64(const u64 &other); + leu64& operator=(const u64 &other); + + operator u64(void) const; + +-protected: + u64 value; + }; +- +-inline leu64::leu64(void) +-{ +-} +- +-inline leu64::leu64(const leu64 &other) +-: value(other.value) +-{ +-} +- +-inline leu64& leu64::operator =(const leu64 &other) +-{ +- value = other.value; +- return *this; +-} +- +-inline leu64::leu64(const u64 &other) +-{ +- ((unsigned char*)&value)[0] = (unsigned char)((other >> 0) & 0xff); +- ((unsigned char*)&value)[1] = (unsigned char)((other >> 8) & 0xff); +- ((unsigned char*)&value)[2] = (unsigned char)((other >> 16) & 0xff); +- ((unsigned char*)&value)[3] = (unsigned char)((other >> 24) & 0xff); +- ((unsigned char*)&value)[4] = (unsigned char)((other >> 32) & 0xff); +- ((unsigned char*)&value)[5] = (unsigned char)((other >> 40) & 0xff); +- ((unsigned char*)&value)[6] = (unsigned char)((other >> 48) & 0xff); +- ((unsigned char*)&value)[7] = (unsigned char)((other >> 56) & 0xff); +-} + + inline leu64& leu64::operator=(const u64 &other) + { Index: patches/patch-md5_h =================================================================== RCS file: patches/patch-md5_h diff -N patches/patch-md5_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-md5_h 27 Jun 2015 02:34:43 -0000 @@ -0,0 +1,73 @@ +$OpenBSD$ + +- upstream github commit 4a4179f1e42bc11bbcc9d24554690d3bc5c31b38 + +--- md5.h.orig Sat Aug 2 00:41:04 2003 ++++ md5.h Sat Jun 27 03:02:25 2015 +@@ -20,6 +20,13 @@ + #ifndef __MD5_H__ + #define __MD5_H__ + ++#ifdef WIN32 ++#pragma pack(push, 1) ++#define PACKED ++#else ++#define PACKED __attribute__ ((packed)) ++#endif ++ + // This file defines the MD5Hash and MD5Context objects which are used + // to compute and manipulate the MD5 Hash values for a block of data. + +@@ -35,12 +42,11 @@ + + // MD5 Hash value + +-class MD5Hash +-{ +-public: +- // Constructor does not initialise the value +- MD5Hash(void) {}; ++struct MD5Hash; ++ostream& operator<<(ostream &s, const MD5Hash &hash); + ++struct MD5Hash ++{ + // Comparison operators + bool operator==(const MD5Hash &other) const; + bool operator!=(const MD5Hash &other) const; +@@ -54,13 +60,8 @@ class MD5Hash (public) + friend ostream& operator<<(ostream &s, const MD5Hash &hash); + string print(void) const; + +- // Copy and assignment +- MD5Hash(const MD5Hash &other); +- MD5Hash& operator=(const MD5Hash &other); +- +-public: + u8 hash[16]; // 16 byte MD5 Hash value +-}; ++} PACKED; + + // Intermediate computation state + +@@ -144,16 +145,9 @@ inline bool MD5Hash::operator<=(const MD5Hash &other) + return !other.operator<(*this); + } + +-inline MD5Hash::MD5Hash(const MD5Hash &other) +-{ +- memcpy(&hash, &other.hash, sizeof(hash)); +-} +- +-inline MD5Hash& MD5Hash::operator=(const MD5Hash &other) +-{ +- memcpy(&hash, &other.hash, sizeof(hash)); +- +- return *this; +-} ++#ifdef WIN32 ++#pragma pack(pop) ++#endif ++#undef PACKED + + #endif // __MD5_H__ -- best regards q#