home *** CD-ROM | disk | FTP | other *** search
-
- /* i4lock.c (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- Locks the while index file.
-
- Returns
- 0 - Success
- -1 - Error
- -2 - Locked by Another Station
- */
-
- #include "d4all.h"
- #include "u4error.h"
-
- #ifndef UNIX
- #include <io.h>
- #endif
-
- extern INDEX *v4index ;
-
- #ifdef LOG
- extern void logger( char *, char *) ;
- #endif
-
- int i4lock( int index_ref, int do_wait )
- {
- INDEX *index_ptr ;
- int h_size, rc ;
-
- index_ptr = v4index + index_ref ;
- if ( index_ptr->lock ) return( 0) ;
-
- #ifdef LOG
- logger( i4name(index_ref), "Before Index Lock" ) ;
- #endif
- if ( u4lock( index_ptr->file_hand, LOCK_START, 1L, do_wait) == -2 )
- return( -2 ) ;
- #ifdef LOG
- logger( i4name(index_ref), "After Index Lock" ) ;
- #endif
-
- index_ptr->old_version = index_ptr->version ;
-
- lseek( index_ptr->file_hand, (long) 0, 0) ;
- #ifdef CLIPPER
- h_size = (int) ((char *)(v4index+1) - (char *)&v4index->sign) ;
- rc = read( index_ptr->file_hand, (char *)&index_ptr->sign, h_size ) ;
- #else
- h_size = (int) ((char *)(v4index+1) - (char *)&v4index->root) ;
- rc = read( index_ptr->file_hand, (char *)&index_ptr->root, h_size ) ;
- #endif
- if ( rc < 0)
- {
- u4error( E_READ, index_ptr->name, (char *) 0) ;
- return( -1) ;
- }
-
- index_ptr->lock = -1 ;
-
- if ( index_ptr->old_version != index_ptr->version )
- {
- index_ptr->old_version = index_ptr->version ;
- #ifdef CLIPPER
- index_ptr->virtual_eof = 0L ;
- #endif
- if ( i4free( index_ref ) < 0 ) return -1 ;
- }
- return(0);
- }
-
-
-