|
From: <and...@us...> - 2006-04-09 20:37:04
|
Revision: 1245 Author: andreradke Date: 2006-04-09 13:36:52 -0700 (Sun, 09 Apr 2006) ViewCVS: http://svn.sourceforge.net/frontierkernel/?rev=1245&view=rev Log Message: ----------- Define SWAP_BYTE_ORDER in byteorder.h to signal whether any byte-swapping is required on the target platform. Clean up db.c and strings.c to use the new SWAP_BYTE_ORDER instead of WIN95VERSION to selectively enable byte-swapping code. Modified Paths: -------------- Frontier/trunk/Common/headers/byteorder.h Frontier/trunk/Common/source/db.c Frontier/trunk/Common/source/strings.c Modified: Frontier/trunk/Common/headers/byteorder.h =================================================================== --- Frontier/trunk/Common/headers/byteorder.h 2006-04-09 19:27:54 UTC (rev 1244) +++ Frontier/trunk/Common/headers/byteorder.h 2006-04-09 20:36:52 UTC (rev 1245) @@ -38,6 +38,9 @@ #if defined(__LITTLE_ENDIAN__) && ((__LITTLE_ENDIAN__ == 1) || !defined (__BIG_ENDIAN__)) + + #define SWAP_BYTE_ORDER 1 + #define conditionallongswap(x) dolongswap(x) #define conditionalshortswap(x) doshortswap(x) #define conditionalenumswap(x) doshortswap(x) @@ -49,7 +52,11 @@ #define disktomemlong(x) longswap(x) #define memtodiskshort(x) shortswap(x) #define memtodisklong(x) longswap(x) + #elif defined(__BIG_ENDIAN__) && ((__BIG_ENDIAN__ == 1) || !defined (__LITTLE_ENDIAN__)) + + #undef SWAP_BYTE_ORDER + #define conditionallongswap(x) x #define conditionalshortswap(x) x #define conditionalenumswap(x) x @@ -61,8 +68,11 @@ #define disktomemlong(x) #define memtodiskshort(x) #define memtodisklong(x) + #else + #error "Couldn't determine byte order of target architecture, update osincludes.h" + #endif Modified: Frontier/trunk/Common/source/db.c =================================================================== --- Frontier/trunk/Common/source/db.c 2006-04-09 19:27:54 UTC (rev 1244) +++ Frontier/trunk/Common/source/db.c 2006-04-09 20:36:52 UTC (rev 1245) @@ -303,34 +303,34 @@ if (!dbseek (adr)) return (false); -#ifdef WIN32 +#ifdef SWAP_BYTE_ORDER if (ctbytes == sizeof (long)) { - longswap (*((long *)pdata)); + memtodisklong (*((long *)pdata)); } if (ctbytes == sizeof(short)) { - shortswap (*((short*)pdata)); + memtodiskshort (*((short*)pdata)); } #endif res = filewrite ((hdlfilenum)((**databasedata).fnumdatabase), ctbytes, pdata); -#ifdef WIN32 +#ifdef SWAP_BYTE_ORDER if (ctbytes == sizeof (long)) { - longswap (*((long *)pdata)); + disktomemlong (*((long *)pdata)); } if (ctbytes == sizeof(short)) { - shortswap (*((short*)pdata)); + disktomemshort (*((short*)pdata)); } #endif return (res); - } /*dbwrite*/ + } /*dbwriteswap*/ static boolean dbreadswap (dbaddress adr, long ctbytes, ptrvoid pdata) { @@ -341,22 +341,22 @@ res = fileread ((hdlfilenum)((**databasedata).fnumdatabase), ctbytes, pdata); -#ifdef WIN32 +#ifdef SWAP_BYTE_ORDER if (ctbytes == sizeof (long)) { - longswap (*((long *)pdata)); + disktomemlong (*((long *)pdata)); } else { if (ctbytes == sizeof(short)) { - shortswap (*((short*)pdata)); + disktomemshort (*((short*)pdata)); } } #endif return (res); - } /*dbread*/ + } /*dbreadswap*/ boolean dbgeteof (long *eof) { @@ -401,20 +401,20 @@ clearbytes (&diskrec.u.growthspace, sizeof (diskrec.u.growthspace)); /*in-memory structure only*/ #endif - #ifdef WIN32 + #ifdef SWAP_BYTE_ORDER { short i; - longswap (diskrec.availlist); - longswap (diskrec.u.extensions.availlistblock); - shortswap (diskrec.flags); + memtodisklong (diskrec.availlist); + memtodisklong (diskrec.u.extensions.availlistblock); + memtodiskshort (diskrec.flags); for (i = 0; i < ctviews; i++) { - longswap (diskrec.views[i]); + memtodisklong (diskrec.views[i]); } - // longswap (diskrec.fnumdatabase); - longswap (diskrec.headerLength); - shortswap (diskrec.longversionMajor); - shortswap (diskrec.longversionMinor); + // memtodisklong (diskrec.fnumdatabase); + memtodisklong (diskrec.headerLength); + memtodiskshort (diskrec.longversionMajor); + memtodiskshort (diskrec.longversionMinor); } #endif @@ -449,10 +449,8 @@ if (!dbread (adr, sizeheader, &header)) return (false); -#ifdef WIN32 - longswap(header.variance); - longswap(header.sizefreeword.size); -#endif + disktomemlong (header.variance); + disktomemlong (header.sizefreeword.size); *flfree = (header.sizefreeword.size & 0x80000000L) == 0x80000000L ? true : false; @@ -471,9 +469,7 @@ if (!dbread (adr, sizetrailer, &trailer)) return (false); -#ifdef WIN32 - longswap(trailer.sizefreeword.size); -#endif + disktomemlong (trailer.sizefreeword.size); *flfree = (trailer.sizefreeword.size & 0x80000000L) == 0x80000000L ? true : false; @@ -494,10 +490,8 @@ header.variance = variance; -#ifdef WIN32 - longswap(header.variance); - longswap(header.sizefreeword.size); -#endif + memtodisklong (header.variance); + memtodisklong (header.sizefreeword.size); return (dbwrite (adr, sizeheader, &header)); } /*dbwriteheader*/ @@ -512,9 +506,7 @@ if (flfree) trailer.sizefreeword.size |= 0x80000000L; -#ifdef WIN32 - longswap(trailer.sizefreeword.size); -#endif + memtodisklong (trailer.sizefreeword.size); return (dbwrite (adr, sizetrailer, &trailer)); } /*dbwritetrailer*/ @@ -854,15 +846,15 @@ } #endif - #ifdef WIN32 + #ifdef SWAP_BYTE_ORDER /*switch byte order*/ { long ix; long ct = databytes / sizeof (tyavailnodeshadow); register tyavailnodeshadow* p = (tyavailnodeshadow *) *h; for (ix = 0; ix < ct; ix++) { - longswap (p[ix].adr); - longswap (p[ix].size); + memtodisklong (p[ix].adr); + memtodisklong (p[ix].size); } } #endif @@ -928,15 +920,15 @@ if (!dbrefhandle (adrblock, (Handle*) &h)) return (false); -#ifdef WIN32 +#ifdef SWAP_BYTE_ORDER /*switch byte order*/ { long ix; long ct = gethandlesize ((Handle) h) / sizeof (tyavailnodeshadow); register tyavailnodeshadow* p = *h; for (ix = 0; ix < ct; ix++) { - longswap (p[ix].adr); - longswap (p[ix].size); + disktomemlong (p[ix].adr); + disktomemlong (p[ix].size); } } #endif @@ -2520,20 +2512,20 @@ if (!dbread ((dbaddress) 0, sizeof (tydatabaserecord), &diskrec)) goto error; - #ifdef WIN32 + #ifdef SWAP_BYTE_ORDER { short i; - longswap (diskrec.availlist); - longswap (diskrec.u.extensions.availlistblock); - shortswap (diskrec.flags); + disktomemlong (diskrec.availlist); + disktomemlong (diskrec.u.extensions.availlistblock); + disktomemshort (diskrec.flags); for (i = 0; i < ctviews; i++) { - longswap (diskrec.views[i]); + disktomemlong (diskrec.views[i]); } -// longswap (diskrec.fnumdatabase); - longswap (diskrec.headerLength); - shortswap (diskrec.longversionMajor); - shortswap (diskrec.longversionMinor); +// disktomemlong (diskrec.fnumdatabase); + disktomemlong (diskrec.headerLength); + disktomemshort (diskrec.longversionMajor); + disktomemshort (diskrec.longversionMinor); } #endif Modified: Frontier/trunk/Common/source/strings.c =================================================================== --- Frontier/trunk/Common/source/strings.c 2006-04-09 19:27:54 UTC (rev 1244) +++ Frontier/trunk/Common/source/strings.c 2006-04-09 20:36:52 UTC (rev 1245) @@ -1862,9 +1862,7 @@ setstringlength (bs, sizeof (OSType)); - #ifdef WIN95VERSION - longswap (type); - #endif + disktomemlong (type); moveleft (&type, stringbaseaddress (bs), longsizeof (OSType)); @@ -1896,9 +1894,7 @@ moveleft (stringbaseaddress (bs), type, (long) len); -#ifdef WIN95VERSION - longswap (*type); -#endif + disktomemlong (*type); return (fl); } /*stringtoostype*/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |