static void ioSuppTempOpen( // OPEN TEMPORARY FILE void ) { auto char fname[_MAX_PATH]; for(;;) { tempFname( fname ); #if defined(__DOS__) { tiny_ret_t rc; rc = TinyCreateNew( fname, 0 ); if( TINY_ERROR( rc ) ) { temphandle = -1; } else { temphandle = TINY_INFO( rc ); __SetIOMode( temphandle, _READ | _WRITE | _BINARY ); } } #else temphandle = open( fname, AMODE, PMODE_RW ); #endif if( temphandle != -1 ) break; if( workFile[5] == 'Z' ) { temphandle = -1; break; } switch( workFile[5] ) { case '9': workFile[5] = 'A'; break; case 'I': workFile[5] = 'J'; /* file-system may be EBCDIC */ break; case 'R': workFile[5] = 'S'; /* file-system may be EBCDIC */ break; default: ++workFile[5]; break; } } #if defined(__UNIX__) /* Under POSIX it's legal to remove a file that's open. The file space will be reclaimed when the handle is closed. This makes sure that the work file always gets removed. */ remove( fname ); tempname = NULL; #else tempname = FNameAdd( fname ); #endif if( temphandle == -1 ) { ioSuppError( ERR_UNABLE_TO_OPEN_WORK_FILE ); } }
static void ioSuppTempOpen( // OPEN TEMPORARY FILE void ) { int mode; auto char fname[ _MAX_PATH ]; mode = O_RDWR | O_CREAT | O_EXCL; #ifdef __UNIX__ #ifndef O_TEMP #define O_TEMP 0 /* Not a standard flag */ #endif // Unix files are always binary mode |= O_TEMP; #else mode |= O_BINARY; #endif for(;;) { tempFname( fname ); #if defined(__DOS__) { tiny_ret_t rc; rc = TinyCreateNew( fname, 0 ); if( TINY_ERROR( rc ) ) { temphandle = -1; } else { temphandle = TINY_INFO( rc ); __SetIOMode( temphandle, _READ | _WRITE | _BINARY ); } } #else temphandle = open( fname, mode, S_IRUSR | S_IWUSR ); #endif if( temphandle != -1 ) break; if( workFile[5] == 'Z' ) { temphandle = -1; break; } switch( workFile[5] ) { case '9': workFile[5] = 'A'; break; case 'I': workFile[5] = 'J'; /* file-system may be EBCDIC */ break; case 'R': workFile[5] = 'S'; /* file-system may be EBCDIC */ break; default: ++workFile[5]; break; } } #if defined(__UNIX__) /* Under POSIX it's legal to remove a file that's open. The file space will be reclaimed when the handle is closed. This makes sure that the work file always gets removed. */ remove( fname ); tempname = NULL; #else tempname = FNameAdd( fname ); #endif if( temphandle == -1 ) { ioSuppError( ERR_UNABLE_TO_OPEN_WORK_FILE ); } }
static void ioSuppWriteError( // SIGNAL ERROR ON WRITE void ) { ioSuppError( ERR_WORK_FILE_WRITE_ERROR ); }
static void ioSuppReadError( // SIGNAL ERROR ON READ void ) { ioSuppError( ERR_WORK_FILE_READ_ERROR ); }