--- 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 */ } +