+ datalockinit = 1;
+ }
+
+ return lkopen(file, access, mode, datalocking, exclusive);
+}
+
+/*
+ * Internal routine to switch between different locking types.
+ */
+
+static int
+lkopen (char *file, int access, mode_t mode, enum locktype ltype,
+ int exclusive)
+{
+ switch (ltype) {
+
+ case FCNTL_LOCKING:
+ return lkopen_fcntl(file, access, mode, exclusive);
+
+ case DOT_LOCKING:
+ return lkopen_dot(file, access, mode, exclusive);
+
+#ifdef HAVE_FLOCK
+ case FLOCK_LOCKING:
+ return lkopen_flock(file, access, mode, exclusive);
+#endif /* HAVE_FLOCK */
+
+#ifdef HAVE_LOCKF
+ case LOCKF_LOCKING:
+ return lkopen_lockf(file, access, mode, exclusive);
+#endif /* HAVE_FLOCK */
+
+ default:
+ adios(NULL, "Internal locking error: unsupported lock type used!");
+ }
+
+ return -1;