campo-sirio/cb5/f4temp.c
alex a0f5e0898b This commit was generated by cvs2svn to compensate for changes in r975,
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
1995-02-06 15:33:45 +00:00

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