Bulletin number: 375 Products affected: D7205A D7214A D7214B D7214C Description: iserver changes for large mem model Component: iserver Date: Tue Nov 19 14:23:40 GMT 1991 ----- The following changes need to be made to the iserver (1.42F), if you want to rebuild it using the Large Memory Model with MIcrosoft C. Module: pack.h Change: Change the file descriptor packing/unpacking macros PUT_FD and GET_FD to remove the minor optimisations which were made for 16 bit descriptors in the smaller memory models. #ifdef MSC #define PUT_FD(x) {BYTE *c; c=(BYTE *)&x; *OutBuf++ = *c++; *Outbuf++ = *c; *OutBuf++ = 0; *OutBuf++ = 0; OutCount += 4;} /*FOR LARGE MODEL - #define PUT_FD(x) PUT_INT32(x)*/ #else #define PUT_FD(x) PUT_INT32(x) #endif =========================================================================== Module: hostc.c Change: change SpGetenv(). getenv() masks off the upper 16 bits by default. This doesn't matter except in large model where pointers are 32 bits. PUBLIC VOID SpGetenv() { BUFFER_DECLARATIONS; BYTE *Name; /* ADD FOR LARGE MODEL - BYTE *getenv(); */ DEBUG(( "SP.GETENV" )); INIT_BUFFERS; Name = &DataBuffer[0]; GET_SLICE( Size, Name ); *(Name+Size)=0; DEBUG(( "\"%s\"", Name )); if( *Name == 0 ) { PUT_BYTE( SP_ERROR ); } else { if( ( Name=(BYTE *)getenv( Name ) ) == NULL ) /*FOR LARGE MODEL - if( ( Name=getenv( Name ) ) == NULL )*/ { PUT_BYTE( SP_ERROR ); } else { DEBUG(( "\"%s\"", Name )); PUT_BYTE( SP_SUCCESS ); Size = strlen( Name ); PUT_SLICE( Size, Name ); } } REPLY; } =========================================================================== Module : filec.c Change : change SpError(), problem in expansion of macro in large model. PUBLIC VOID SpError() { BUFFER_DECLARATIONS; FILE *Fd; INT32 Errno; BYTE String[128]; DEBUG(( "SP.ERROR" )); INIT_BUFFERS; GET_FD( Fd ); DEBUG(( "fd %0X", (int)Fd )); switch( (int)Fd ) { case 0 : Fd = stdin; break; case 1 : Fd = stdout; break; case 2 : Fd = stderr; break; } if( ferror(Fd) ) { PUT_BYTE( SP_SUCCESS ); Errno = errno; DEBUG(( "errno %d", Errno )); PUT_INT32( Errno ); #ifdef SUN String[0] = 0; #else strcpy( &String[0], strerror(errno)); #endif DEBUG(( "error \"%s\"", &String[0])); Size = strlen(&String[0]); PUT_SLICE( Size, String[0] ); /* FOR LARGE MODEL - PUT_SLICE( Size, &String[0] );*/ REPLY; } else { PUT_BYTE( SP_ERROR ); REPLY; } } ===========================================================================