home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / UNIX / Utilities / vmount-0.6a-I / src / mtab_lock.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-14  |  732 b   |  46 lines

  1. /*
  2.  * Name: mtab_lock.c
  3.  * Description: Locking of mtab files
  4.  * Author: Christian Starkjohann <cs@hal.kph.tuwien.ac.at>
  5.  * Date: 1997-04-30
  6.  * Copyright: GNU-GPL
  7.  * Tabsize: 4
  8.  */
  9.  
  10. #include <libc.h>
  11. #include <errno.h>
  12. #include <mntent.h>
  13. #include "my_defines.h"
  14.  
  15. extern int    errno;
  16.  
  17. #define    MOUNTED_LOCK    (MOUNTED ".lock")
  18.  
  19. static int    lock = -1;
  20.  
  21. int        lock_mtab(void)
  22. {
  23. int        i;
  24.  
  25.     if(lock < 0){
  26.         i = 0;
  27.         while((lock = open(MOUNTED_LOCK, O_WRONLY|O_CREAT|O_EXCL, 0)) < 0){
  28.             if(errno != EEXIST){
  29.                 return 0;
  30.             }
  31.             usleep(20000);    /* sleep for 100ms */
  32.             if(i++ > 150)
  33.                 return 1;    /* wait for a maximum of about 3s */
  34.         }
  35.     }
  36.     return 1;
  37. }
  38.  
  39. void    unlock_mtab(void)
  40. {
  41.     if(lock >= -1){
  42.         close(lock);
  43.     }
  44.     unlink(MOUNTED_LOCK);
  45. }
  46.