]> git.saurik.com Git - apple/libc.git/blobdiff - gen/FreeBSD/lockf.c.patch
Libc-498.tar.gz
[apple/libc.git] / gen / FreeBSD / lockf.c.patch
diff --git a/gen/FreeBSD/lockf.c.patch b/gen/FreeBSD/lockf.c.patch
new file mode 100644 (file)
index 0000000..4d31bc7
--- /dev/null
@@ -0,0 +1,51 @@
+--- lockf.c.orig       2006-09-16 19:12:39.000000000 -0700
++++ lockf.c    2006-09-16 20:35:36.000000000 -0700
+@@ -38,6 +38,13 @@
+ #include <sys/cdefs.h>
+ __FBSDID("$FreeBSD: src/lib/libc/gen/lockf.c,v 1.8 2002/02/01 00:57:29 obrien 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>
+ #include <fcntl.h>
+@@ -53,6 +60,7 @@
+       struct flock fl;
+       int cmd;
++
+       fl.l_start = 0;
+       fl.l_len = size;
+       fl.l_whence = SEEK_CUR;
+@@ -72,8 +80,13 @@
+               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 +98,10 @@
+               /* 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 */
+ }
++