XRogue: fix md_htonl() and md_ntohl().

xcrypt requires them.  The implementations in state.c used htonl() and
ntohl(), which aren't available on Windows.  So the Advanced Rogue 7
versions were copied over.

This implementation could be problematic on other systems where
sizeof(long) == 8.  Maybe someday I can convert everything to C99 and
use stdint.h.
This commit is contained in:
John "Elwin" Edwards 2015-08-13 17:17:40 -04:00
parent b2ebcf72c9
commit 13f4a96d93
2 changed files with 31 additions and 9 deletions

View file

@ -3327,18 +3327,38 @@ md_killchar()
return(killchar());
}
long
md_ntohl(netlong)
long netlong;
int md_endian = 0x01020304;
unsigned long int
md_ntohl(unsigned long int x)
{
return( ntohl(netlong) );
#ifdef _WIN32
if ( *((char *)&md_endian) == 0x01 )
return(x);
else
return( ((x & 0x000000ffU) << 24) |
((x & 0x0000ff00U) << 8) |
((x & 0x00ff0000U) >> 8) |
((x & 0xff000000U) >> 24) );
#else
return( ntohl(x) );
#endif
}
long
md_htonl(netlong)
long netlong;
unsigned long int
md_htonl(unsigned long int x)
{
return(htonl(netlong));
#ifdef _WIN32
if ( *((char *)&md_endian) == 0x01 )
return(x);
else
return( ((x & 0x000000ffU) << 24) |
((x & 0x0000ff00U) << 8) |
((x & 0x00ff0000U) >> 8) |
((x & 0xff000000U) >> 24) );
#else
return( htonl(x) );
#endif
}
void
@ -3493,4 +3513,3 @@ md_unlink(char *file)
return(unlink(file));
#endif
}

View file

@ -54,6 +54,9 @@
#define _PASSWORD_EFMT1 '_'
unsigned long int md_htonl(unsigned long int x);
unsigned long int md_ntohl(unsigned long int x);
static unsigned char IP[64] = {
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,