]> git.saurik.com Git - apple/libc.git/blobdiff - gen/FreeBSD/lockf.c
Libc-1439.100.3.tar.gz
[apple/libc.git] / gen / FreeBSD / lockf.c
index 375b2ce4d50e0c85c4d9c09c8d0a357d93748ca8..bc8de896ccd2cc108f25b0afa2f528cc65e40b1c 100644 (file)
@@ -1,3 +1,4 @@
+/*     $NetBSD: lockf.c,v 1.3 2008/04/28 20:22:59 martin Exp $ */
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
  * All rights reserved.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*     $NetBSD: lockf.c,v 1.1 1997/12/20 20:23:18 kleink Exp $ */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/gen/lockf.c,v 1.8 2002/02/01 00:57:29 obrien Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/gen/lockf.c,v 1.10 2009/03/04 01:01:26 delphij Exp $");
+
+#ifdef VARIANT_CANCELABLE
+int __fcntl(int, int, void *);
+#else /* !VARIANT_CANCELABLE */
+int __fcntl_nocancel(int, int, void *);
+#endif /* VARIANT_CANCELABLE */
+
 
 #include "namespace.h"
 #include <errno.h>
@@ -45,10 +45,7 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/lockf.c,v 1.8 2002/02/01 00:57:29 obrien Ex
 #include "un-namespace.h"
 
 int
-lockf(filedes, function, size)
-       int filedes;
-       int function;
-       off_t size;
+lockf(int filedes, int function, off_t size)
 {
        struct flock fl;
        int cmd;
@@ -72,8 +69,13 @@ lockf(filedes, function, size)
                break;
        case F_TEST:
                fl.l_type = F_WRLCK;
-               if (_fcntl(filedes, F_GETLK, &fl) == -1)
+#ifdef VARIANT_CANCELABLE
+               if (__fcntl(filedes, F_GETLK, &fl) == -1)
                        return (-1);
+#else /* !VARIANT_CANCELABLE */
+               if (__fcntl_nocancel(filedes, F_GETLK, &fl) == -1)
+                       return (-1);
+#endif /* VARIANT_CANCELABLE */
                if (fl.l_type == F_UNLCK || fl.l_pid == getpid())
                        return (0);
                errno = EAGAIN;
@@ -85,5 +87,10 @@ lockf(filedes, function, size)
                /* NOTREACHED */
        }
 
-       return (_fcntl(filedes, cmd, &fl));
+#ifdef VARIANT_CANCELABLE
+       return (__fcntl(filedes, cmd, &fl));
+#else /* !VARIANT_CANCELABLE */
+       return (__fcntl_nocancel(filedes, cmd, &fl));
+#endif /* VARIANT_CANCELABLE */
 }
+