153 lines
3.4 KiB
C
153 lines
3.4 KiB
C
|
/* 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 ) ;
|
||
|
}
|
||
|
|
||
|
|