home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c160 / 1.ddi / SOURCE / I4LOCK.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-22  |  1.7 KB  |  72 lines

  1.  
  2. /*  i4lock.c   (c)Copyright Sequiter Software Inc., 1987-1990.  All rights reserved.
  3.  
  4.     Locks the while index file.
  5.  
  6.     Returns
  7.        0 -  Success
  8.       -1 -  Error
  9.       -2 -  Locked by Another Station
  10. */
  11.  
  12. #include "d4all.h"
  13. #include "u4error.h"
  14.  
  15. #ifndef UNIX
  16. #include <io.h>
  17. #endif
  18.  
  19. extern  INDEX  *v4index ;
  20.  
  21. #ifdef LOG
  22.    extern void logger( char *, char *) ;
  23. #endif
  24.  
  25. int i4lock( int index_ref, int do_wait )
  26. {
  27.    INDEX  *index_ptr ;
  28.    int     h_size, rc ;
  29.  
  30.    index_ptr =  v4index + index_ref ;
  31.    if ( index_ptr->lock )  return( 0) ;
  32.  
  33.    #ifdef LOG
  34.       logger( i4name(index_ref), "Before Index Lock" ) ;
  35.    #endif
  36.    if ( u4lock( index_ptr->file_hand, LOCK_START, 1L, do_wait) == -2 ) 
  37.     return( -2 )  ;
  38.    #ifdef LOG
  39.       logger( i4name(index_ref), "After Index Lock" ) ;
  40.    #endif
  41.  
  42.    index_ptr->old_version =  index_ptr->version ;
  43.  
  44.    lseek( index_ptr->file_hand, (long) 0, 0) ;
  45.    #ifdef CLIPPER
  46.       h_size =  (int) ((char *)(v4index+1) - (char *)&v4index->sign) ;
  47.       rc =  read( index_ptr->file_hand, (char *)&index_ptr->sign, h_size ) ;
  48.    #else
  49.       h_size =  (int) ((char *)(v4index+1) - (char *)&v4index->root) ;
  50.       rc =  read( index_ptr->file_hand, (char *)&index_ptr->root, h_size ) ;
  51.    #endif
  52.    if ( rc < 0)
  53.    {
  54.       u4error( E_READ, index_ptr->name, (char *) 0) ;
  55.       return( -1) ;
  56.    }
  57.  
  58.    index_ptr->lock     =  -1 ;
  59.  
  60.    if ( index_ptr->old_version != index_ptr->version )
  61.    {
  62.       index_ptr->old_version =  index_ptr->version ;
  63.       #ifdef CLIPPER
  64.          index_ptr->virtual_eof =  0L ;
  65.       #endif
  66.       if ( i4free( index_ref ) < 0 )  return -1 ;
  67.    }
  68.    return(0);
  69. }
  70.  
  71.  
  72.