]> git.cameronkatri.com Git - pw-darwin.git/commitdiff
Use fcntl(2)-style locks instead of less-portable flock(2)-style locks.
authorDag-Erling Smørgrav <des@FreeBSD.org>
Fri, 3 Aug 2007 06:32:45 +0000 (06:32 +0000)
committerDag-Erling Smørgrav <des@FreeBSD.org>
Fri, 3 Aug 2007 06:32:45 +0000 (06:32 +0000)
Approved by: re (kensmith)

libutil/flopen.c

index 23742f7ceec75f850d44cfa8f408a9e7fa0151ab..f285ac571b8645e58c58957e1a32884f2860eaea 100644 (file)
@@ -43,6 +43,7 @@ flopen(const char *path, int flags, ...)
 {
        int fd, operation, serrno, trunc;
        struct stat sb, fsb;
+       struct flock lock;
        mode_t mode;
 
 #ifdef O_EXLOCK
@@ -58,9 +59,11 @@ flopen(const char *path, int flags, ...)
                va_end(ap);
        }
 
-       operation = LOCK_EX;
-       if (flags & O_NONBLOCK)
-               operation |= LOCK_NB;
+       lock.l_type = (flags & O_RDONLY) ? F_RDLCK : F_WRLCK;
+       lock.l_start = 0;
+       lock.l_whence = SEEK_SET;
+       lock.l_len = 0;
+       operation = (flags & O_NONBLOCK) ? F_SETLK : F_SETLKW;
 
        trunc = (flags & O_TRUNC);
        flags &= ~O_TRUNC;
@@ -69,7 +72,7 @@ flopen(const char *path, int flags, ...)
                if ((fd = open(path, flags, mode)) == -1)
                        /* non-existent or no access */
                        return (-1);
-               if (flock(fd, operation) == -1) {
+               if (fcntl(fd, operation, &lock) == -1) {
                        /* unsupported or interrupted */
                        serrno = errno;
                        close(fd);