--- ./src/sysfiles.h.orig 2008-09-02 10:50:38.000000000 -0600
+++ ./src/sysfiles.h 2011-08-04 13:57:32.717487674 -0600
@@ -46,7 +46,7 @@
extern Int SyFindOrLinkGapRootFile (
Char * filename,
Int4 crc_gap,
- Char * result,
+ union StringOrInitInfo * result,
Int len );
--- ./src/sysfiles.c.orig 2008-12-14 14:25:54.000000000 -0700
+++ ./src/sysfiles.c 2011-08-04 14:07:06.846239128 -0600
@@ -191,7 +191,7 @@
Int SyFindOrLinkGapRootFile (
Char * filename,
Int4 crc_gap,
- Char * result,
+ union StringOrInitInfo * result,
Int len )
{
UInt4 crc_dyn = 0;
@@ -215,19 +215,19 @@
#endif
/* find the GAP file */
- result[0] = '\0';
+ result->string[0] = '\0';
tmp = SyFindGapRootFile(filename);
if ( tmp ) {
- SyStrncat( result, tmp, len );
+ SyStrncat( result->string, tmp, len );
name[0] = '\0';
SyStrncat( name, tmp, 255 );
}
- if ( result[0] ) {
- if ( SyIsReadableFile(result) == 0 ) {
+ if ( result->string[0] ) {
+ if ( SyIsReadableFile(result->string) == 0 ) {
found_gap = 1;
}
else {
- result[0] = '\0';
+ result->string[0] = '\0';
}
}
if ( ! SyUseModule ) {
@@ -389,11 +389,11 @@
if (found_dyn)
syUnloadLastModule ();
#endif
- *(StructInitInfo**)result = info_sta;
+ result->info = info_sta;
return 2;
}
if ( found_gap && found_dyn ) {
- *(StructInitInfo**)result = info_dyn;
+ result->info = info_dyn;
return 1;
}
if ( found_gap ) {
@@ -404,11 +404,11 @@
if (found_dyn)
syUnloadLastModule ();
#endif
- *(StructInitInfo**)result = info_sta;
+ result->info = info_sta;
return 2;
}
if ( found_dyn ) {
- *(StructInitInfo**)result = info_dyn;
+ result->info = info_dyn;
return 1;
}
return 0;
--- ./src/gap.c.orig 2007-10-04 09:05:16.000000000 -0600
+++ ./src/gap.c 2011-08-04 14:09:27.815182164 -0600
@@ -1650,7 +1650,7 @@
StructInitInfo * info;
Int4 crc1;
Int4 crc2;
- Char result[256];
+ union StringOrInitInfo result;
Int res;
@@ -1670,7 +1670,7 @@
/* check if have a statically or dynamically loadable module */
crc1 = INT_INTOBJ(crc);
- res = SyFindOrLinkGapRootFile(CSTR_STRING(filename), crc1, result, 256);
+ res = SyFindOrLinkGapRootFile(CSTR_STRING(filename), crc1, &result, 256);
/* not found */
if ( res == 0 ) {
@@ -1685,7 +1685,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' dynamically\n",
(Int)CSTR_STRING(filename), 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
UpdateCopyFopyInfo();
res = res || info->initLibrary(info);
@@ -1703,7 +1703,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' statically\n",
(Int)CSTR_STRING(filename), 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
UpdateCopyFopyInfo();
res = res || info->initLibrary(info);
@@ -1721,15 +1721,15 @@
/* compute the crc value of the original and compare */
if ( SyCheckCompletionCrcComp ) {
- crc2 = SyGAPCRC(result);
+ crc2 = SyGAPCRC(result.string);
if ( crc1 != crc2 ) {
return INTOBJ_INT(4);
}
}
- /*CCC filename = NEW_STRING( SyStrlen(result) );
+ /*CCC filename = NEW_STRING( SyStrlen(result.string) );
SyStrncat( CSTR_STRING(filename), result, SyStrlen(result) );CCC*/
- len = SyStrlen(result);
- C_NEW_STRING(filename, len, result);
+ len = SyStrlen(result.string);
+ C_NEW_STRING(filename, len, result.string);
CompThenFuncs = NEW_PLIST( T_PLIST, COMP_THEN_OFFSET );
SET_LEN_PLIST( CompThenFuncs, COMP_THEN_OFFSET );
--- ./src/system.h.orig 2007-10-06 16:53:20.000000000 -0600
+++ ./src/system.h 2011-08-04 14:04:52.971092306 -0600
@@ -1105,6 +1105,10 @@
typedef StructInitInfo* (*InitInfoFunc)(void);
+union StringOrInitInfo {
+ Char string[256];
+ StructInitInfo * info;
+};
/****************************************************************************
**
--- ./src/saveload.c.orig 2002-06-16 06:37:20.000000000 -0600
+++ ./src/saveload.c 2011-08-04 13:41:46.547763965 -0600
@@ -37,6 +37,11 @@
#include "saveload.h" /* saving and loading */
#undef INCLUDE_DECLARATION_PART
+union double_bytes {
+ Double d;
+ UInt1 bytes[sizeof(Double)];
+};
+
/***************************************************************************
**
@@ -438,19 +443,19 @@
void SaveDouble( Double d)
{
UInt i;
- UInt1 buf[sizeof(Double)];
- *(Double *)buf = d;
+ union double_bytes buf;
+ buf.d = d;
for (i = 0; i < sizeof(Double); i++)
- SAVE_BYTE(buf[i]);
+ SAVE_BYTE(buf.bytes[i]);
}
Double LoadDouble( void)
{
UInt i;
- UInt1 buf[sizeof(Double)];
+ union double_bytes buf;
for (i = 0; i < sizeof(Double); i++)
- buf[i] = LOAD_BYTE();
- return *(Double *)buf;
+ buf.bytes[i] = LOAD_BYTE();
+ return buf.d;
}
/***************************************************************************
--- ./src/streams.c.orig 2008-09-02 10:52:34.000000000 -0600
+++ ./src/streams.c 2011-08-04 14:10:55.735229846 -0600
@@ -316,13 +316,13 @@
Int READ_GAP_ROOT ( Char * filename )
{
- Char result[256];
+ union StringOrInitInfo result;
Int res;
UInt type;
StructInitInfo * info;
/* try to find the file */
- res = SyFindOrLinkGapRootFile( filename, 0L, result, 256 );
+ res = SyFindOrLinkGapRootFile( filename, 0L, &result, 256 );
/* not found */
if ( res == 0 ) {
@@ -335,7 +335,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' dynamically\n",
(Int)filename, 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
if (!SyRestoring) {
UpdateCopyFopyInfo();
@@ -356,7 +356,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' statically\n",
(Int)filename, 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
if (!SyRestoring) {
UpdateCopyFopyInfo();
@@ -388,7 +388,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' as GAP file\n",
(Int)filename, 0L );
}
- if ( OpenInput(result) ) {
+ if ( OpenInput(result.string) ) {
SySetBuffering(Input->file);
while ( 1 ) {
ClearError();