tuse fcntl F_SETLK instead of flock, for sun's. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f84eebeb8147a4527cea0ed4839c7c8becfaf8df
 (DIR) parent b4223cd6f27153b6c27a88cae3955274416d8749
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue,  4 Jan 2005 22:18:40 +0000
       
       use fcntl F_SETLK instead of flock, for sun's.
       
       Diffstat:
         M src/lib9/create.c                   |       9 ++++++++-
       
       1 file changed, 8 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/lib9/create.c b/src/lib9/create.c
       t@@ -2,6 +2,8 @@
        #include <u.h>
        #define NOPLAN9DEFINES
        #include <sys/file.h>
       +#include <unistd.h>
       +#include <fcntl.h>
        #include <libc.h>
        #include <sys/stat.h>
        #ifndef O_DIRECT
       t@@ -12,6 +14,7 @@ int
        p9create(char *path, int mode, ulong perm)
        {
                int fd, cexec, umode, rclose, lock, rdwr;
       +        struct flock fl;
        
                rdwr = mode&3;
                lock = mode&OLOCK;
       t@@ -49,7 +52,11 @@ p9create(char *path, int mode, ulong perm)
        out:
                if(fd >= 0){
                        if(lock){
       -                        if(flock(fd, (rdwr==OREAD) ? LOCK_SH : LOCK_EX) < 0){
       +                        fl.l_type = (rdwr==OREAD) ? F_RDLCK : F_WRLCK;
       +                        fl.l_whence = SEEK_SET;
       +                        fl.l_start = 0;
       +                        fl.l_len = 0;
       +                        if(fcntl(fd, F_SETLK, &fl) < 0){
                                        close(fd);
                                        return -1;
                                }