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 ) ;
 | 
						|
}
 | 
						|
 | 
						|
 |