[BACK]Return to io.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / io

Annotation of OpenXM_contrib2/asir2000/io/io.c, Revision 1.25

1.4       noro        1: /*
                      2:  * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
                      3:  * All rights reserved.
                      4:  *
                      5:  * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
                      6:  * non-exclusive and royalty-free license to use, copy, modify and
                      7:  * redistribute, solely for non-commercial and non-profit purposes, the
                      8:  * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
                      9:  * conditions of this Agreement. For the avoidance of doubt, you acquire
                     10:  * only a limited right to use the SOFTWARE hereunder, and FLL or any
                     11:  * third party developer retains all rights, including but not limited to
                     12:  * copyrights, in and to the SOFTWARE.
                     13:  *
                     14:  * (1) FLL does not grant you a license in any way for commercial
                     15:  * purposes. You may use the SOFTWARE only for non-commercial and
                     16:  * non-profit purposes only, such as academic, research and internal
                     17:  * business use.
                     18:  * (2) The SOFTWARE is protected by the Copyright Law of Japan and
                     19:  * international copyright treaties. If you make copies of the SOFTWARE,
                     20:  * with or without modification, as permitted hereunder, you shall affix
                     21:  * to all such copies of the SOFTWARE the above copyright notice.
                     22:  * (3) An explicit reference to this SOFTWARE and its copyright owner
                     23:  * shall be made on your publication or presentation in any form of the
                     24:  * results obtained by use of the SOFTWARE.
                     25:  * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
1.5       noro       26:  * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
1.4       noro       27:  * for such modification or the source code of the modified part of the
                     28:  * SOFTWARE.
                     29:  *
                     30:  * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
                     31:  * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
                     32:  * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
                     33:  * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
                     34:  * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
                     35:  * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
                     36:  * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
                     37:  * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
                     38:  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
                     39:  * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
                     40:  * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
                     41:  * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
                     42:  * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
                     43:  * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
                     44:  * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
                     45:  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
                     46:  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
1.25    ! noro       47:  * $OpenXM: OpenXM_contrib2/asir2000/io/io.c,v 1.24 2018/09/09 08:13:42 ohara Exp $
1.4       noro       48: */
1.1       noro       49: #include <stdio.h>
                     50: #include "ca.h"
1.9       noro       51: #include "parse.h"
1.25    ! noro       52: #include "ox.h"
1.19      fujimoto   53: #if defined(VISUAL) || defined(__MINGW32__) || defined(MPI)
1.1       noro       54: #include "wsio.h"
                     55: #endif
                     56:
1.3       noro       57: extern int little_endian,lib_ox_need_conv;
1.1       noro       58: extern int ox_do_copy, ox_do_count, ox_count_length, ox_file_io, ox_need_conv;
                     59: extern char *ox_copy_bptr;
1.21      noro       60: extern int ox_get_pari_result;
1.1       noro       61:
1.25    ! noro       62: void reset_ox_pari();
1.9       noro       63:
1.1       noro       64: void reset_io()
                     65: {
1.23      noro       66:   ox_file_io = 0;
                     67:   if ( ox_get_pari_result ) reset_ox_pari();
1.1       noro       68: }
                     69:
                     70: void endian_init()
                     71: {
1.23      noro       72:   unsigned int et = 0xff;
1.1       noro       73:
1.23      noro       74:   if ( *((char *)&et) )
                     75:     little_endian = 1;
                     76:   else
                     77:     little_endian = 0;
                     78:   ox_need_conv = 1;
1.1       noro       79: }
                     80:
1.9       noro       81: int countobj(Obj p)
1.1       noro       82: {
1.23      noro       83:   ox_count_length = 0;
                     84:   ox_do_count = 1; saveobj(0,p); ox_do_count = 0;
                     85:   return ox_count_length;
1.1       noro       86: }
                     87:
1.9       noro       88: int count_as_cmo(Obj p)
1.2       noro       89: {
1.23      noro       90:   ox_count_length = 0;
                     91:   ox_do_count = 1; write_cmo(0,p); ox_do_count = 0;
                     92:   return ox_count_length;
1.2       noro       93: }
                     94:
1.9       noro       95: int countvl(VL vl)
1.1       noro       96: {
1.23      noro       97:   ox_count_length = 0;
                     98:   ox_do_count = 1; savevl(0,vl); ox_do_count = 0;
                     99:   return ox_count_length;
1.1       noro      100: }
                    101:
1.9       noro      102: void ox_copy_init(char *s)
1.1       noro      103: {
1.23      noro      104:   ox_copy_bptr = s;
1.1       noro      105: }
                    106:
1.19      fujimoto  107: #if !defined(VISUAL) && !defined(__MINGW32__)
1.3       noro      108: /*
                    109:  * library mode functions
                    110:  * byte order is controlled by lib_ox_need_conv.
                    111:  */
1.1       noro      112:
1.9       noro      113: void ox_obj_to_buf_as_cmo(Obj p)
1.2       noro      114: {
1.23      noro      115:   ox_need_conv = lib_ox_need_conv;
                    116:   ox_do_copy = 1; write_cmo(0,p); ox_do_copy = 0;
1.2       noro      117: }
                    118:
1.9       noro      119: void ox_buf_to_obj_as_cmo(Obj *p)
1.2       noro      120: {
1.23      noro      121:   ox_need_conv = lib_ox_need_conv;
                    122:   ox_do_copy = 1; read_cmo(0,p); ox_do_copy = 0;
1.2       noro      123: }
                    124:
1.9       noro      125: void ox_vl_to_buf(VL vl)
1.1       noro      126: {
1.23      noro      127:   ox_do_copy = 1; savevl(0,vl); ox_do_copy = 0;
1.1       noro      128: }
1.8       noro      129: #endif
1.1       noro      130:
1.9       noro      131: int gen_fread (char *ptr,int size,int nitems,FILE *stream)
1.1       noro      132: {
1.23      noro      133:   int n;
1.1       noro      134:
1.23      noro      135:   if ( ox_do_copy ) {
                    136:     n = size*nitems;
                    137:     memcpy(ptr,ox_copy_bptr,n);
                    138:     ox_copy_bptr += n;
                    139:     /* dummy return */
                    140:     return 0;
                    141:   } else {
1.19      fujimoto  142: #if defined(VISUAL) || defined(__MINGW32__)
1.24      ohara     143:     if ( WSIO_fileno((STREAM *)stream) < 0 )
1.23      noro      144:       n = cread(ptr,size,nitems,(STREAM *)stream);
                    145:     else
1.12      noro      146: #elif defined(MPI)
1.23      noro      147:     if ( (char)fileno(stream) < 0 )
                    148:       n = cread(ptr,size,nitems,(STREAM *)stream);
                    149:     else
                    150: #endif
                    151:     n = fread(ptr,size,nitems,stream);
                    152:     if ( !n ) {
                    153:       ExitAsir();
                    154:       /* NOTREACHED */
                    155:       return 0;
                    156:     } else
                    157:       return n;
                    158:   }
1.1       noro      159: }
                    160:
1.9       noro      161: int gen_fwrite (char *ptr,int size,int nitems,FILE *stream)
1.1       noro      162: {
1.23      noro      163:   int n;
1.1       noro      164:
1.23      noro      165:   if ( ox_do_count ) {
                    166:     ox_count_length += size*nitems;
                    167:     /* dummy return  */
                    168:     return 0;
                    169:   } else if ( ox_do_copy ) {
                    170:     n = size*nitems;
                    171:     memcpy(ox_copy_bptr,ptr,n);
                    172:     ox_copy_bptr += n;
                    173:     /* dummy return  */
                    174:     return 0;
                    175:   } else
1.19      fujimoto  176: #if defined(VISUAL) || defined(__MINGW32__)
1.24      ohara     177:   if ( WSIO_fileno((STREAM *)stream) < 0 )
1.23      noro      178:     return cwrite(ptr,size,nitems,(STREAM *)stream);
                    179:   else
1.12      noro      180: #elif defined(MPI)
1.23      noro      181:   if ( (char)fileno(stream) < 0 )
                    182:     return cwrite(ptr,size,nitems,(STREAM *)stream);
                    183:   else
1.1       noro      184: #endif
1.23      noro      185:     return fwrite(ptr,size,nitems,stream);
1.1       noro      186: }
                    187:
1.9       noro      188: void write_char(FILE *f,unsigned char *p)
1.1       noro      189: {
1.23      noro      190:   gen_fwrite(p,sizeof(unsigned char),1,f);
1.1       noro      191: }
                    192:
1.9       noro      193: void write_short(FILE *f,unsigned short *p)
1.1       noro      194: {
1.23      noro      195:   unsigned short t;
1.1       noro      196:
1.23      noro      197:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    198:     t = htons(*p);
                    199:     gen_fwrite((char *)&t,sizeof(unsigned short),1,f);
                    200:   } else
                    201:     gen_fwrite((char *)p,sizeof(unsigned short),1,f);
1.1       noro      202: }
                    203:
1.9       noro      204: void write_int(FILE *f,unsigned int *p)
1.1       noro      205: {
1.23      noro      206:   unsigned int t;
1.1       noro      207:
1.23      noro      208:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    209:     t = htonl(*p);
                    210:     gen_fwrite((char *)&t,sizeof(unsigned int),1,f);
                    211:   } else
                    212:     gen_fwrite((char *)p,sizeof(unsigned int),1,f);
1.1       noro      213: }
                    214:
1.15      noro      215: void write_int64(FILE *f,UL *p)
                    216: {
                    217:   unsigned int t;
                    218:
1.23      noro      219:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    220:     t = htonl(((unsigned int *)p)[1]);
                    221:     gen_fwrite((char *)&t,sizeof(unsigned int),1,f);
                    222:     t = htonl(((unsigned int *)p)[0]);
                    223:     gen_fwrite((char *)&t,sizeof(unsigned int),1,f);
                    224:   } else
                    225:     gen_fwrite((char *)p,sizeof(UL),1,f);
1.15      noro      226: }
                    227:
1.13      ohara     228: #if defined(DES_ENC)
1.1       noro      229: int des_encryption;
                    230: static unsigned char asir_deskey[8] = {0xc7,0xe0,0xfc,0xb5,0xc3,0xad,0x8e,0x3a};
                    231: static unsigned char deskey_string[96];
                    232:
                    233: void init_deskey()
                    234: {
1.23      noro      235:   static int deskey_initialized = 0;
1.1       noro      236:
1.23      noro      237:   if ( !deskey_initialized ) {
                    238:     key_schedule(asir_deskey,deskey_string);
                    239:     deskey_initialized = 1;
                    240:   }
1.1       noro      241: }
1.7       noro      242: #endif
1.1       noro      243:
1.9       noro      244: void write_intarray(FILE *f,unsigned int *p,int l)
1.1       noro      245: {
1.23      noro      246:   int i;
                    247:   unsigned int t;
1.13      ohara     248: #if defined(DES_ENC)
1.23      noro      249:   int l2;
                    250:   unsigned int plain[2],encrypted[2];
1.1       noro      251:
1.23      noro      252:   if ( des_encryption ) {
                    253:     l2 = l>>1;
                    254:     for ( i = 0; i < l2; i++ ) {
                    255:       plain[0] = *p++;
                    256:       plain[1] = *p++;
                    257:       des_enc(plain,deskey_string,encrypted);
                    258:       encrypted[0] = htonl(encrypted[0]);
                    259:       encrypted[1] = htonl(encrypted[1]);
                    260:       gen_fwrite((char *)encrypted,sizeof(unsigned int),2,f);
                    261:     }
                    262:     if ( (l2<<1) < l ) {
                    263:       plain[0] = *p;
                    264:       plain[1] = 0;
                    265:       des_enc(plain,deskey_string,encrypted);
                    266:       encrypted[0] = htonl(encrypted[0]);
                    267:       encrypted[1] = htonl(encrypted[1]);
                    268:       gen_fwrite((char *)encrypted,sizeof(unsigned int),2,f);
                    269:     }
                    270:   } else
                    271: #endif
                    272:   if ( little_endian && (ox_file_io || ox_need_conv) )
                    273:     for ( i = 0; i < l; i++, p++) {
                    274:       t = htonl(*p);
                    275:       gen_fwrite((char *)&t,sizeof(unsigned int),1,f);
                    276:     }
                    277:   else
                    278:     gen_fwrite((char *)p,sizeof(unsigned int),l,f);
1.1       noro      279: }
                    280:
1.14      ohara     281: #if SIZEOF_LONG == 8
1.18      noro      282: /* write l word (1word=4bytes) */
                    283: /* l even : low 32of p[0] | high32 of p[0] | ... */
                    284: /* l odd :  high32 of p[0] | ... */
1.9       noro      285: void write_longarray(FILE *f,unsigned long *p,int l)
1.1       noro      286: {
1.18      noro      287:   int i;
                    288:   unsigned long w;
                    289:   unsigned int hi,lo;
                    290:
                    291:   if ( l%2 ) {
                    292:     w = p[0]; hi = w>>32;
1.23      noro      293:   if ( little_endian && (ox_file_io || ox_need_conv) )
1.20      noro      294:       hi = htonl(hi);
1.18      noro      295:     gen_fwrite((char *)&hi,sizeof(unsigned int),1,f);
                    296:     i = 1;
                    297:   } else
                    298:     i = 0;
                    299:   l = (l+1)/2;
                    300:   for ( ; i < l; i++ ) {
                    301:     w = p[i]; hi = w>>32; lo = w&0xffffffff;
1.23      noro      302:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
1.20      noro      303:       hi = htonl(hi); lo = htonl(lo);
1.23      noro      304:   }
1.18      noro      305:     gen_fwrite((char *)&lo,sizeof(unsigned int),1,f);
                    306:     gen_fwrite((char *)&hi,sizeof(unsigned int),1,f);
                    307:   }
1.1       noro      308: }
                    309: #endif
                    310:
1.22      noro      311: #if defined(_WIN64)
                    312: /* write l word (1word=4bytes) */
                    313: /* l even : low 32of p[0] | high32 of p[0] | ... */
                    314: /* l odd :  high32 of p[0] | ... */
                    315: void write_longarray(FILE *f,unsigned long long *p,int l)
                    316: {
                    317:   int i;
                    318:   unsigned long long w;
                    319:   unsigned int hi,lo;
                    320:
                    321:   if ( l%2 ) {
                    322:     w = p[0]; hi = w>>32;
1.23      noro      323:   if ( little_endian && (ox_file_io || ox_need_conv) )
1.22      noro      324:       hi = htonl(hi);
                    325:     gen_fwrite((char *)&hi,sizeof(unsigned int),1,f);
                    326:     i = 1;
                    327:   } else
                    328:     i = 0;
                    329:   l = (l+1)/2;
                    330:   for ( ; i < l; i++ ) {
                    331:     w = p[i]; hi = w>>32; lo = w&0xffffffff;
1.23      noro      332:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
1.22      noro      333:       hi = htonl(hi); lo = htonl(lo);
1.23      noro      334:   }
1.22      noro      335:     gen_fwrite((char *)&lo,sizeof(unsigned int),1,f);
                    336:     gen_fwrite((char *)&hi,sizeof(unsigned int),1,f);
                    337:   }
                    338: }
                    339: #endif
                    340:
1.9       noro      341: void write_double(FILE *f,double *p)
1.1       noro      342: {
1.23      noro      343:   unsigned int t;
1.1       noro      344:
1.23      noro      345:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    346:     t = htonl(((unsigned int *)p)[1]);
                    347:     gen_fwrite((char *)&t,sizeof(unsigned int),1,f);
                    348:     t = htonl(((unsigned int *)p)[0]);
                    349:     gen_fwrite((char *)&t,sizeof(unsigned int),1,f);
                    350:   } else
                    351:     gen_fwrite((char *)p,sizeof(double),1,f);
1.1       noro      352: }
                    353:
1.9       noro      354: void write_string(FILE *f,unsigned char *p,int l)
1.1       noro      355: {
1.23      noro      356:   gen_fwrite(p,sizeof(unsigned char),l,f);
1.1       noro      357: }
                    358:
1.9       noro      359: void read_char(FILE *f,unsigned char *p)
1.1       noro      360: {
1.23      noro      361:   gen_fread((char *)p,sizeof(unsigned char),1,f);
1.1       noro      362: }
                    363:
1.9       noro      364: void read_short(FILE *f,unsigned short *p)
1.1       noro      365: {
1.23      noro      366:   gen_fread((char *)p,sizeof(unsigned short),1,f);
                    367:   if ( little_endian && (ox_file_io || ox_need_conv) )
                    368:     *p = ntohs(*p);
1.1       noro      369: }
                    370:
1.9       noro      371: void read_int(FILE *f,unsigned int *p)
1.1       noro      372: {
1.23      noro      373:   gen_fread((char *)p,sizeof(unsigned int),1,f);
                    374:   if ( little_endian && (ox_file_io || ox_need_conv) )
                    375:     *p = ntohl(*p);
1.1       noro      376: }
                    377:
1.15      noro      378: void read_int64(FILE *f,UL *p)
                    379: {
1.23      noro      380:   unsigned int t;
1.15      noro      381:
1.23      noro      382:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    383:     gen_fread((char *)&t,sizeof(unsigned int),1,f);
                    384:     ((unsigned int *)p)[1] = ntohl(t);
                    385:     gen_fread((char *)&t,sizeof(unsigned int),1,f);
                    386:     ((unsigned int *)p)[0] = ntohl(t);
                    387:   } else
                    388:     gen_fread((char *)p,sizeof(UL),1,f);
1.15      noro      389: }
                    390:
1.9       noro      391: void read_intarray(FILE *f,unsigned int *p,int l)
1.1       noro      392: {
1.23      noro      393:   int i;
1.13      ohara     394: #if defined(DES_ENC)
1.23      noro      395:   int l2;
                    396:   unsigned int plain[2],encrypted[2];
1.1       noro      397:
1.23      noro      398:   if ( des_encryption ) {
                    399:     l2 = l>>1;
                    400:     for ( i = 0; i < l2; i++ ) {
                    401:       gen_fread((char *)encrypted,sizeof(unsigned int),2,f);
                    402:       encrypted[0] = ntohl(encrypted[0]);
                    403:       encrypted[1] = ntohl(encrypted[1]);
                    404:       des_dec(encrypted,deskey_string,plain);
                    405:       *p++ = plain[0];
                    406:       *p++ = plain[1];
                    407:     }
                    408:     if ( (l2<<1) < l ) {
                    409:       gen_fread((char *)encrypted,sizeof(unsigned int),2,f);
                    410:       encrypted[0] = ntohl(encrypted[0]);
                    411:       encrypted[1] = ntohl(encrypted[1]);
                    412:       des_dec(encrypted,deskey_string,plain);
                    413:       *p = plain[0];
                    414:     }
                    415:   } else
                    416: #endif
                    417:   {
                    418:     gen_fread((char *)p,sizeof(unsigned int),l,f);
                    419:     if ( little_endian && (ox_file_io || ox_need_conv) )
                    420:       for ( i = 0; i < l; i++, p++ )
                    421:         *p = ntohl(*p);
                    422:   }
1.1       noro      423: }
                    424:
1.14      ohara     425: #if SIZEOF_LONG == 8
1.15      noro      426: /* read l word (1word=4bytes) */
1.17      noro      427: /* pad 0 at low 32 of p[0] if l is odd */
                    428: /* low 32 of p[0] | high32 of p[0] | ... */
1.9       noro      429: void read_longarray(FILE *f,unsigned long *p,int l)
1.1       noro      430: {
1.23      noro      431:   int i;
                    432:   unsigned int hi,lo;
1.17      noro      433:     unsigned int *q;
1.1       noro      434:
1.23      noro      435:   q = (unsigned int *)p;
                    436:   if ( l%2 ) {
                    437:     gen_fread((char *)&hi,sizeof(unsigned int),1,f);
                    438:     if ( little_endian && (ox_file_io || ox_need_conv) )
                    439:       hi = ntohl(hi);
                    440:     *p = (((unsigned long)hi)<<32);
                    441:     p++; l--;
                    442:   }
                    443:   for ( i = 0; i < l; i += 2, p++ ) {
                    444:     gen_fread((char *)&lo,sizeof(unsigned int),1,f);
                    445:     gen_fread((char *)&hi,sizeof(unsigned int),1,f);
                    446:       if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    447:         hi = ntohl(hi); lo = ntohl(lo);
                    448:     }
                    449:     *p = (((unsigned long)hi)<<32)|((unsigned long)lo);
                    450:   }
1.1       noro      451: }
                    452: #endif
                    453:
1.22      noro      454: #if defined(_WIN64)
                    455: /* read l word (1word=4bytes) */
                    456: /* pad 0 at low 32 of p[0] if l is odd */
                    457: /* low 32 of p[0] | high32 of p[0] | ... */
                    458: void read_longarray(FILE *f,unsigned long long *p,int l)
                    459: {
1.23      noro      460:   int i;
                    461:   unsigned int hi,lo;
1.22      noro      462:     unsigned int *q;
                    463:
1.23      noro      464:   q = (unsigned int *)p;
                    465:   if ( l%2 ) {
                    466:     gen_fread((char *)&hi,sizeof(unsigned int),1,f);
                    467:     if ( little_endian && (ox_file_io || ox_need_conv) )
                    468:       hi = ntohl(hi);
                    469:     *p = (((unsigned long long)hi)<<32);
                    470:     p++; l--;
                    471:   }
                    472:   for ( i = 0; i < l; i += 2, p++ ) {
                    473:     gen_fread((char *)&lo,sizeof(unsigned int),1,f);
                    474:     gen_fread((char *)&hi,sizeof(unsigned int),1,f);
                    475:       if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    476:         hi = ntohl(hi); lo = ntohl(lo);
                    477:     }
                    478:     *p = (((unsigned long long)hi)<<32)|((unsigned long long)lo);
                    479:   }
1.22      noro      480: }
                    481: #endif
                    482:
1.9       noro      483: void read_string(FILE *f,unsigned char *p,int l)
1.1       noro      484: {
1.23      noro      485:   gen_fread((char *)p,sizeof(unsigned char),l,f);
1.1       noro      486: }
                    487:
1.9       noro      488: void read_double(FILE *f,double *p)
1.1       noro      489: {
1.23      noro      490:   unsigned int t;
1.1       noro      491:
1.23      noro      492:   if ( little_endian && (ox_file_io || ox_need_conv) ) {
                    493:     gen_fread((char *)&t,sizeof(unsigned int),1,f);
                    494:     ((unsigned int *)p)[1] = ntohl(t);
                    495:     gen_fread((char *)&t,sizeof(unsigned int),1,f);
                    496:     ((unsigned int *)p)[0] = ntohl(t);
                    497:   } else
                    498:     gen_fread((char *)p,sizeof(double),1,f);
1.1       noro      499: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>