On Sun, Apr 21, 2002 at 08:29:36AM -0700, Martin Pool wrote: >> # rsync -azv \ >> rsync://sunsite.dk/ftp//mirrors/mysql/Downloads/Contrib/MyAccess.mda . > Works fine for me using rsync's upstream HEAD and 2.5.5 release. So > it seems like it must be either something in BSD's patches, or > something about your compiler, or possibly something else. > > Could you please try building from upstream source and let me know?
The attached patch works around the bug so that it does not show up in -stable or -current. It's a workaround for GCC bugs in FreeBSD, made by [EMAIL PROTECTED] some weeks ago. Sorry I didn't see this before now. Rsync folks: For FreeBSD, I think this is the temporary fix for the port until GCC is fixed. I don't know if you want to include it in any way. BTW: http://rsync.samba.org/cvs.html (from the download page on rsync.samba.org) seems to be lost. Luckily, I had what I needed in ~/.cvspass. Oliver: may I commit this and revert your changes on the issue? Greg/Kris: MFC of this file in src/lib/libz/infcodes.c may save a lot of users for some trouble. The bug rsync suffers from in its home-rolled zlib 1.1.4 is also reproducable in -stable, I don't see why this isn't going to apply to other programs that uses zlib. Cheers, -- Anders.
--- zlib/infcodes.c.orig Tue Mar 12 02:14:58 2002 +++ zlib/infcodes.c Sun Apr 21 18:14:34 2002 @@ -197,8 +197,15 @@ c->mode = COPY; case COPY: /* o: copying bytes in window, waiting for space */ f = q - c->sub.copy.dist; - while (f < s->window) /* modulo window size-"while" instead */ - f += s->end - s->window; /* of "if" handles invalid distances */ + { + /* Work-around for a FreeBSD gcc bug. */ +#ifdef __FreeBSD__ + volatile inflate_blocks_statef *s1 = s; +#endif + + while (f < s1->window) /* modulo window size-"while" instead */ + f += s1->end - s1->window; /* of "if" handles invalid distances */ + } while (c->len) { NEEDOUT