=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/oxf.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -p -r1.18 -r1.19 --- OpenXM/src/ox_toolkit/oxf.c 2003/09/15 09:31:42 1.18 +++ OpenXM/src/ox_toolkit/oxf.c 2005/03/03 04:40:51 1.19 @@ -1,5 +1,5 @@ /* -*- mode: C; coding: euc-japan -*- */ -/* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.17 2003/06/02 10:25:57 ohara Exp $ */ +/* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.18 2003/09/15 09:31:42 ohara Exp $ */ /* This module includes functions for sending/receiveng CMO's. @@ -15,6 +15,7 @@ #include #include #include +#include #if defined(__sun__) #include @@ -22,6 +23,12 @@ #include #endif +#if defined(__sun__) +#include +#else +#include +#endif + #include "mysocket.h" #include "ox_toolkit.h" @@ -32,8 +39,25 @@ static int send_int32_nbo(OXFILE *oxfp, int int32); static int receive_int32_lbo(OXFILE *oxfp); static int receive_int32_nbo(OXFILE *oxfp); +static int send_int64_nbo_le(OXFILE *oxfp, double int64); +static int send_int64_lbo(OXFILE *oxfp, double int64); +static int receive_int64_nbo_le(OXFILE *oxfp); +static int receive_int64_lbo(OXFILE *oxfp); + static void pipe_send_info(int fd, char *hostname, int port, char *password); +/* translating double of little endian byte order to one of big endian. */ +double htonll_le(double n) +{ + int i; + double r; + char *sp = (char *)&n, *dp = (char *)&r + sizeof(double)-1; + for(i=0; iwbuf = NULL; oxfp->wbuf_size = 0; oxfp->wbuf_count = 0; + oxfp->send_double = send_int64_lbo; + oxfp->receive_double = receive_int64_lbo; return oxfp; /* oxfp->fp = fdopen(fd, "a+"); */ /* return (oxfp->fp != NULL)? oxfp: NULL; */ @@ -189,12 +244,18 @@ void oxf_close(OXFILE *oxfp) void oxf_setopt(OXFILE *oxfp, int mode) { - if (mode == OXF_SETOPT_LBO) { - oxfp->send_int32 = send_int32_lbo; - oxfp->receive_int32 = receive_int32_lbo; - }else if (mode == OXF_SETOPT_NBO) { - oxfp->send_int32 = send_int32_nbo; - oxfp->receive_int32 = receive_int32_nbo; + int m = 1; + if (mode == OXF_SETOPT_NBO && *(char *)&m) { + /* Little endian architecture. */ + oxfp->send_int32 = send_int32_nbo; + oxfp->receive_int32 = receive_int32_nbo; + oxfp->send_double = send_int64_nbo_le; + oxfp->receive_double = receive_int64_nbo_le; + }else { + oxfp->send_int32 = send_int32_lbo; + oxfp->receive_int32 = receive_int32_lbo; + oxfp->send_double = send_int64_lbo; + oxfp->receive_double = receive_int64_lbo; } }