On Fri, Aug 28, 2009 at 09:26:11PM -0400, Zachary Uram wrote: > Magnificent. You should write a book on debugging C in Linux! I'd buy > it. Rubbish. It was nothing, really. It was C, nothing really to do with Linux, more to do with POSIX. Consider this patch (edited down from the whole thing) ... Wed Jun 10 05:37:48 EST 2009 tanner at real-time.com * osx-netrek-server-port.patch * Second night of porting netrek-server to osx * First night of work switch netrek-server from autotools to cmake First night of work porting code base to osx diff -rN -u old-netrek-server/Vanilla/ntserv/planet.c new-netrek-server/Vanilla/ntserv/planet.c --- old-netrek-server/Vanilla/ntserv/planet.c 2009-08-29 12:54:48.000000000 +1000 +++ new-netrek-server/Vanilla/ntserv/planet.c 2009-08-29 12:54:48.000000000 +1000 @@ -126,7 +126,7 @@ void pl_reset(void) { int i, j, k, which, sanity; - MCOPY(pl_virgin(), planets, pl_virgin_size()); + memcpy(pl_virgin(), planets, pl_virgin_size()); for (i = 0; i < MAXPLANETS; i++) { planets[i].pl_armies = top_armies; } See how Bob was changing MCOPY to memcpy? Ask yourself why. He had to do it in hundreds of places, probably late at night. MCOPY was the macro defined by an include file: #define MCOPY(b1,b2,l) memcpy(b2,b1,l) or #define MCOPY(b1,b2,l) bcopy(b1,b2,l) depending on whether the system being used provided memcpy or bcopy. Notice how the argument order differs between memcpy and bcopy. Now, bcopy was in 4.3 BSD, but was marked deprecated in POSIX.1-2001, then removed in POSIX.1-2008. The replacement was memcpy. Further, both Mac OS X and Linux now comply with POSIX.1-2001 or POSIX.1-2008 in that they provide memcpy. We have no need to support compiling the code on 4.3 BSD. Nobody using that. So Bob was changing the code to be cleaner, simpler, easier to maintain, and make it work on Mac OS X as well as Linux. The trivial mistake he made was not to change the order of the arguments. It's nothing. It's a trivial mistake. I'm sour at myself for not noticing it earlier, but the amount of code still being ported from bcopy to memcpy these days is very small. memcpy has been around for over a decade in the standard. I had no excuse. Sorry. -- James Cameron http://quozl.linux.org.au/