mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
improve how calc compiles on big endian machines
Fixed bug that caused calc to fail to compile filepos2z() in file.c on little endian machines for the Debian apcalc package. Thanks to Martin Buck (m at rtin-buck dor de) for for fix. Removed unused macros from zmath.h: SWAP_B32_IN_HASH(dest, src) SWAP_B16_IN_HASH(dest, src) SWAP_B8_IN_HASH(dest, src) SWAP_B32_IN_FLAG(dest, src) SWAP_B16_IN_FLAG(dest, src) SWAP_B8_IN_FLAG(dest, src) When SWAP_HALF_IN_B32(dest, src), SWAP_B32_IN_FULL(dest, src), SWAP_B16_IN_HALF(dest, src), SWAP_B32_IN_bool(dest, src), or SWAP_B32_IN_LEN(dest, src), SWAP_HALF_IN_FILEPOS(dest, src) is an assignment such as: (*(dest) = *(src)) We now case the dest and src pointers to the proper type before referencing and performing the assignment.
This commit is contained in:
26
CHANGES
26
CHANGES
@@ -1,3 +1,29 @@
|
||||
The following are the changes from calc version 2.15.0.3 to date:
|
||||
|
||||
Fixed bug that caused calc to fail to compile filepos2z() in file.c
|
||||
on little endian machines for the Debian apcalc package. Thanks to
|
||||
Martin Buck (m at rtin-buck dor de) for for fix.
|
||||
|
||||
Removed unused macros from zmath.h:
|
||||
|
||||
SWAP_B32_IN_HASH(dest, src)
|
||||
SWAP_B16_IN_HASH(dest, src)
|
||||
SWAP_B8_IN_HASH(dest, src)
|
||||
SWAP_B32_IN_FLAG(dest, src)
|
||||
SWAP_B16_IN_FLAG(dest, src)
|
||||
SWAP_B8_IN_FLAG(dest, src)
|
||||
|
||||
When SWAP_HALF_IN_B32(dest, src), SWAP_B32_IN_FULL(dest, src),
|
||||
SWAP_B16_IN_HALF(dest, src), SWAP_B32_IN_bool(dest, src),
|
||||
or SWAP_B32_IN_LEN(dest, src), SWAP_HALF_IN_FILEPOS(dest, src)
|
||||
is an assignment such as:
|
||||
|
||||
(*(dest) = *(src))
|
||||
|
||||
We now case the dest and src pointers to the proper type before
|
||||
referencing and performing the assignment.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.15.0.1 to 2.15.0.2:
|
||||
|
||||
Updated BUGS about MSYS2 on Windows compiling of calc.
|
||||
|
2
file.c
2
file.c
@@ -1387,7 +1387,7 @@ filepos2z(FILEPOS pos)
|
||||
ret.len = FILEPOS_BITS/BASEB;
|
||||
ret.v = alloc(ret.len);
|
||||
zclearval(ret);
|
||||
SWAP_HALF_IN_FILEPOS(ret.v, &pos);
|
||||
SWAP_HALF_IN_FILEPOS(ret.v, (HALF *)&pos);
|
||||
ret.sign = 0;
|
||||
ztrim(&ret);
|
||||
|
||||
|
@@ -140,7 +140,7 @@ main(int UNUSED(argc), char **argv)
|
||||
*/
|
||||
#if defined(HAVE_FILEPOS_SCALAR)
|
||||
printf("#define SWAP_HALF_IN_FILEPOS(dest, src) \\\n"
|
||||
"\t(*(dest) = *(src))\n");
|
||||
"\t(*((HALF *)(dest)) = *((HALF *)(src)))\n");
|
||||
#else /* HAVE_FILEPOS_SCALAR */
|
||||
/*
|
||||
* Normally a "(*(dest) = *(src))" would do, but on some
|
||||
|
18
zmath.h
18
zmath.h
@@ -79,7 +79,7 @@ typedef USB64 FULL; /* double unit of number storage */
|
||||
typedef SB64 SFULL; /* signed FULL */
|
||||
|
||||
#define SWAP_HALF_IN_B64(dest, src) SWAP_B32_IN_B64(dest, src)
|
||||
#define SWAP_HALF_IN_B32(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_HALF_IN_B32(dest, src) (*((HALF *)(dest)) = *((HALF *)(src)))
|
||||
#define SWAP_HALF_IN_FULL(dest, src) SWAP_B32_IN_B64(dest, src)
|
||||
#define SWAP_HALF_IN_HASH(dest, src) SWAP_B16_IN_HASH(dest, src)
|
||||
#define SWAP_HALF_IN_FLAG(dest, src) SWAP_B16_IN_FLAG(dest, src)
|
||||
@@ -106,9 +106,9 @@ typedef SB32 SFULL; /* signed FULL */
|
||||
#define SWAP_HALF_IN_FLAG(dest, src) SWAP_B16_IN_FLAG(dest, src)
|
||||
#define SWAP_HALF_IN_bool(dest, src) SWAP_B16_IN_bool(dest, src)
|
||||
#define SWAP_HALF_IN_LEN(dest, src) SWAP_B16_IN_LEN(dest, src)
|
||||
#define SWAP_B32_IN_FULL(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_B32_IN_FULL(dest, src) (*((FULL *)(dest)) = *((FULL *)(src)))
|
||||
#define SWAP_B16_IN_FULL(dest, src) SWAP_B16_IN_B32(dest, src)
|
||||
#define SWAP_B16_IN_HALF(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_B16_IN_HALF(dest, src) (*((HALF *)(dest)) = *((HALF *)(src)))
|
||||
#define SWAP_B8_IN_FULL(dest, src) SWAP_B8_IN_B32(dest, src)
|
||||
#define SWAP_B8_IN_HALF(dest, src) SWAP_B8_IN_B16(dest, src)
|
||||
|
||||
@@ -171,19 +171,11 @@ typedef SB32 LEN; /* calc v2 compatible unit of length storage */
|
||||
typedef uintptr_t LEN; /* unit of length storage */
|
||||
#endif /* MAJOR_VER < 3 */
|
||||
|
||||
#define SWAP_B32_IN_HASH(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_B16_IN_HASH(dest, src) SWAP_B16_IN_B32(dest, src)
|
||||
#define SWAP_B8_IN_HASH(dest, src) SWAP_B8_IN_B32(dest, src)
|
||||
|
||||
#define SWAP_B32_IN_FLAG(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_B16_IN_FLAG(dest, src) SWAP_B16_IN_B32(dest, src)
|
||||
#define SWAP_B8_IN_FLAG(dest, src) SWAP_B8_IN_B32(dest, src)
|
||||
|
||||
#define SWAP_B32_IN_bool(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_B32_IN_bool(dest, src) (*((bool *)(dest)) = *((bool *)(src)))
|
||||
#define SWAP_B16_IN_bool(dest, src) SWAP_B16_IN_B32(dest, src)
|
||||
#define SWAP_B8_IN_bool(dest, src) SWAP_B8_IN_B32(dest, src)
|
||||
|
||||
#define SWAP_B32_IN_LEN(dest, src) (*(dest) = *(src))
|
||||
#define SWAP_B32_IN_LEN(dest, src) (*((LEN *)(dest)) = *((LEN *)(src)))
|
||||
#define SWAP_B16_IN_LEN(dest, src) SWAP_B16_IN_B32(dest, src)
|
||||
#define SWAP_B8_IN_LEN(dest, src) SWAP_B8_IN_B32(dest, src)
|
||||
|
||||
|
Reference in New Issue
Block a user