From 16943e0187ef978fa1ba59768d22fe21d02df7b6 Mon Sep 17 00:00:00 2001 From: ianmdlvl Date: Wed, 9 Jul 2003 18:17:11 +0000 Subject: [PATCH] found old non-after-fstatting version lying about, for historical interest only --- cprogs/with-lock-ex.c | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/cprogs/with-lock-ex.c b/cprogs/with-lock-ex.c index 1850d1f..fce533c 100644 --- a/cprogs/with-lock-ex.c +++ b/cprogs/with-lock-ex.c @@ -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"); -- 2.30.2