chiark / gitweb /
found old non-after-fstatting version lying about, for historical interest only branch-2001-05-11-withlockex-old
authorianmdlvl <ianmdlvl>
Wed, 9 Jul 2003 18:17:11 +0000 (18:17 +0000)
committerianmdlvl <ianmdlvl>
Wed, 9 Jul 2003 18:17:11 +0000 (18:17 +0000)
cprogs/with-lock-ex.c

index 1850d1f..fce533c 100644 (file)
@@ -39,7 +39,6 @@ static void fail(const char *why) {
 
 int main(int argc, char **argv) {
   int fd, mode, um;
-  struct stat stab, fstab;
   long cloexec;
   struct flock fl;
   const char *p;
@@ -58,32 +57,17 @@ int main(int argc, char **argv) {
   cmd= argv[2];
   um= umask(0777); if (um==-1) fail("find umask");
   if (umask(um)==-1) fail("reset umask");
-
-  for (;;) {
   
-    fd= open(argv[1],O_RDWR|O_CREAT,0666&~(um|((um&0222)<<1)));
-    if (fd<0) fail(argv[1]);
+  fd= open(argv[1],O_RDWR|O_CREAT,0666&~(um|((um&0222)<<1))); if (fd<0) fail(argv[1]);
   
-    for (;;) {
-      fl.l_type= F_WRLCK;
-      fl.l_whence= SEEK_SET;
-      fl.l_start= 0;
-      fl.l_len= 1;
-      if (fcntl(fd, mode=='w' ? F_SETLKW : F_SETLK, &fl) != -1) break;
-      if (mode=='q' &&
-         (errno == EAGAIN || errno == EWOULDBLOCK || errno == EBUSY))
-       exit(0);
-      if (errno != EINTR) fail("could not acquire lock");
-    }
-
-    if (fstat(fd, &fstab)) fail("could not fstat lock fd");
-    if (stat(argv[1], &stab)) {
-      if (errno != ENOENT) fail("could not stat lockfile");
-    } else {
-      if (stab.st_dev == fstab.st_dev &&
-         stab.st_ino == fstab.st_ino) break;
-    }
-    close(fd);
+  for (;;) {
+    fl.l_type= F_WRLCK;
+    fl.l_whence= SEEK_SET;
+    fl.l_start= 0;
+    fl.l_len= 1;
+    if (fcntl(fd, mode=='w' ? F_SETLKW : F_SETLK, &fl) != -1) break;
+    if (mode=='q' && (errno == EAGAIN || errno == EWOULDBLOCK || errno == EBUSY)) exit(0);
+    if (errno != EINTR) fail("could not acquire lock");
   }
 
   cloexec= fcntl(fd, F_GETFD); if (cloexec==-1) fail("fcntl F_GETFD");