which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			153 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* f4temp.c (c)Copyright Sequiter Software Inc., 1990-1994.  All rights reserved. */
 | |
| 
 | |
| #include "d4all.h"
 | |
| #ifndef S4UNIX
 | |
| #ifdef __TURBOC__
 | |
| #pragma hdrstop
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifdef S4TEMP
 | |
| #include "t4test.h"
 | |
| #endif
 | |
| 
 | |
| #include <time.h>
 | |
| 
 | |
| #ifndef S4UNIX
 | |
| #ifndef __IBMC__
 | |
| #ifndef __TURBOC__
 | |
| #include <sys\locking.h>
 | |
| #define S4LOCKING
 | |
| #endif
 | |
| #ifdef __ZTC__
 | |
| extern int  errno ;
 | |
| #endif
 | |
| #ifdef _MSC_VER
 | |
| #include <sys\types.h>
 | |
| #include <sys\locking.h>
 | |
| #endif
 | |
| #ifdef __TURBOC__
 | |
| /*      extern int cdecl errno ; */
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #include <sys\stat.h>
 | |
| #include <share.h>
 | |
| #endif
 | |
| 
 | |
| #include <fcntl.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| #ifdef S4ERRNO
 | |
| extern int errno ;
 | |
| #endif
 | |
| 
 | |
| int S4FUNCTION file4temp( FILE4 *file, CODE4 *code_base, char *buf, int auto_remove )
 | |
| {
 | |
|   int i, save_flag, rc, old_excl ;
 | |
| #ifndef S4OPTIMIZE_OFF
 | |
|   int old_opt_wr, tf_do_buffer ;
 | |
|   unsigned long tf_hash_init ;
 | |
|   char tf_type, tf_buffer_writes, tf_write_buffer ;
 | |
| #endif
 | |
|   long tf_len ;
 | |
|   LINK4 tf_link ;
 | |
|   time_t t ;
 | |
|   char name[20], *name_ptr ;
 | |
| 
 | |
| #ifdef S4DEBUG
 | |
|   if ( file == 0 || code_base == 0  )
 | |
|     e4severe( e4parm, E4_F4TEMP ) ;
 | |
| #endif
 | |
| 
 | |
| #ifndef S4OPTIMIZE_OFF
 | |
|   if ( auto_remove && code_base->opt.num_buffers != 0 )
 | |
|   {
 | |
|     if ( code_base->opt.force_current == 0 )
 | |
|     {
 | |
|       memset( (void *)file, 0, sizeof( FILE4 ) ) ;
 | |
|       file->is_temp = 1 ;
 | |
|       file->code_base = code_base ;
 | |
|       file->file_created = 0 ;
 | |
|       file->is_exclusive = 1 ;
 | |
|       old_opt_wr = code_base->optimize_write ;
 | |
|       code_base->optimize_write = 1 ;
 | |
|       file4optimize( file, 1, OPT4OTHER ) ;
 | |
|       code_base->optimize_write = old_opt_wr ;
 | |
|       if ( buf != 0 )
 | |
|         file->name = buf ;
 | |
|       return 0 ;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       tf_hash_init = file->hash_init ;
 | |
|       tf_len = file->len ;
 | |
|       tf_type = file->type ;
 | |
|       tf_buffer_writes = file->buffer_writes ;
 | |
|       tf_do_buffer = file->do_buffer ;
 | |
|       tf_write_buffer = file->write_buffer ;
 | |
|       memcpy( (void *)&tf_link, (void *)&file->link, sizeof( LINK4 ) ) ;
 | |
|     }
 | |
|   }
 | |
| #endif
 | |
| 
 | |
|   name_ptr = buf ;
 | |
|   if ( name_ptr == 0 )
 | |
|     name_ptr = name ;
 | |
| 
 | |
|   for ( i = 0 ; i < 100 ; i++ )
 | |
|   {
 | |
|     u4delay_sec() ;
 | |
|     time( &t ) ;
 | |
|     t %= 10000L ;
 | |
| 
 | |
|     strcpy( name_ptr, "TEMP" ) ;
 | |
|     c4ltoa45( t, name_ptr + 4, -4 ) ;
 | |
|     strcpy( name_ptr + 8, ".TMP" ) ;
 | |
| 
 | |
|     save_flag = code_base->create_error ;
 | |
|     code_base->create_error = 0 ;
 | |
| 
 | |
|     old_excl = code_base->exclusive ;
 | |
|     code_base->exclusive = 1 ; /* all temporary files are for exclusive access only */
 | |
|     rc = file4create( file, code_base, name_ptr, (int)(buf == 0) ) ;
 | |
|     code_base->exclusive = old_excl ;
 | |
| 
 | |
|     code_base->create_error = save_flag ;
 | |
|     if ( rc < 0 )
 | |
|       return -1 ;
 | |
|     if ( rc == 0 )
 | |
|     {
 | |
|       if ( auto_remove )
 | |
|         file->is_temp = 1 ;
 | |
| #ifndef S4OPTIMIZE_OFF
 | |
|       if ( auto_remove && code_base->opt.num_buffers != 0 )
 | |
|       {
 | |
|         if ( code_base->opt.force_current == 1 )
 | |
|         {
 | |
|           file->hash_init = tf_hash_init ;
 | |
|           file->len = tf_len ;
 | |
|           file->type = tf_type ;
 | |
|           file->buffer_writes = tf_buffer_writes ;
 | |
|           file->do_buffer = tf_do_buffer ;
 | |
|           file->write_buffer = tf_write_buffer ;
 | |
|           memcpy( (void *)&file->link, (void *)&tf_link, sizeof( LINK4 ) ) ;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           old_opt_wr = code_base->optimize_write ;
 | |
|           code_base->optimize_write = 1 ;
 | |
|           file4optimize( file, 1, OPT4OTHER ) ;
 | |
|           code_base->optimize_write = old_opt_wr ;
 | |
|         }
 | |
|       }
 | |
| #endif
 | |
|       return  0 ;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return e4( code_base, e4create, E4_CREATE_TEM ) ;
 | |
| }
 | |
| 
 | |
| 
 |