On 2015/06/27 03:54, Mikolaj Kucharski wrote:
> 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.
I don't really understand the point in adding a patch that breaks things
in the same way as 0.6.13. Surely it's better to just update so at least
we're using the same code other people use?
> 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#
>