X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Flockutil.c;h=325ac4a80a3cc8e6938fd116455e45b830dc6464;hb=7e75317bed8eecabcb57e59b16093a32238738e2;hp=bebe318bf99f54d5f19c46210a8e0db01a24fbf8;hpb=e583a127856d4f363ff2ba7b4321bcc8c048edba;p=idzebra-moved-to-github.git diff --git a/index/lockutil.c b/index/lockutil.c index bebe318..325ac4a 100644 --- a/index/lockutil.c +++ b/index/lockutil.c @@ -1,44 +1,9 @@ /* - * Copyright (C) 1994-1997, Index Data I/S + * Copyright (C) 1994-2002, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * - * $Log: lockutil.c,v $ - * Revision 1.10 1997-09-29 09:08:36 adam - * Revised locking system to be thread safe for the server. - * - * Revision 1.9 1997/09/25 14:54:43 adam - * WIN32 files lock support. - * - * Revision 1.8 1997/09/17 12:19:15 adam - * Zebra version corresponds to YAZ version 1.4. - * Changed Zebra server so that it doesn't depend on global common_resource. - * - * Revision 1.7 1997/09/09 13:38:08 adam - * Partial port to WIN95/NT. - * - * Revision 1.6 1996/10/29 14:08:14 adam - * Uses resource lockDir instead of lockPath. - * - * Revision 1.5 1996/03/26 16:01:13 adam - * New setting lockPath: directory of various lock files. - * - * Revision 1.4 1995/12/13 08:46:10 adam - * Locking uses F_WRLCK and F_RDLCK again! - * - * Revision 1.3 1995/12/12 16:00:57 adam - * System call sync(2) used after update/commit. - * Locking (based on fcntl) uses F_EXLCK and F_SHLCK instead of F_WRLCK - * and F_RDLCK. - * - * Revision 1.2 1995/12/11 11:43:29 adam - * Locking based on fcntl instead of flock. - * Setting commitEnable removed. Command line option -n can be used to - * prevent commit if commit setting is defined in the configuration file. - * - * Revision 1.1 1995/12/07 17:38:47 adam - * Work locking mechanisms for concurrent updates/commit. - * + * $Id: lockutil.c,v 1.13 2002-02-20 17:30:01 adam Exp $ */ #include #include @@ -46,7 +11,7 @@ #include #include #include -#ifdef WINDOWS +#ifdef WIN32 #include #include #else @@ -62,10 +27,10 @@ struct zebra_lock_info { ZebraLockHandle zebra_lock_create (const char *name, int excl_flag) { - ZebraLockHandle h = xmalloc (sizeof(*h)); + ZebraLockHandle h = (ZebraLockHandle) xmalloc (sizeof(*h)); h->excl_flag = excl_flag; h->fd = -1; -#ifdef WINDOWS +#ifdef WIN32 if (!h->excl_flag) h->fd = open (name, O_BINARY|O_RDONLY); if (h->fd == -1) @@ -103,9 +68,7 @@ void zebra_lock_prefix (Res res, char *path) strcat (path, "/"); } -#ifdef WINDOWS - -#else +#ifndef WIN32 static int unixLock (int fd, int type, int cmd) { struct flock area; @@ -116,9 +79,27 @@ static int unixLock (int fd, int type, int cmd) } #endif +int zebra_lock_w (ZebraLockHandle h) +{ +#ifdef WIN32 + return _locking (h->fd, _LK_LOCK, 1); +#else + return unixLock (h->fd, F_WRLCK, F_SETLKW); +#endif +} + +int zebra_lock_r (ZebraLockHandle h) +{ +#ifdef WIN32 + return _locking (h->fd, _LK_LOCK, 1); +#else + return unixLock (h->fd, F_RDLCK, F_SETLKW); +#endif +} + int zebra_lock (ZebraLockHandle h) { -#ifdef WINDOWS +#ifdef WIN32 return _locking (h->fd, _LK_LOCK, 1); #else return unixLock (h->fd, h->excl_flag ? F_WRLCK : F_RDLCK, F_SETLKW); @@ -127,7 +108,7 @@ int zebra_lock (ZebraLockHandle h) int zebra_lock_nb (ZebraLockHandle h) { -#ifdef WINDOWS +#ifdef WIN32 return _locking (h->fd, _LK_NBLCK, 1); #else return unixLock (h->fd, h->excl_flag ? F_WRLCK : F_RDLCK, F_SETLK); @@ -136,7 +117,7 @@ int zebra_lock_nb (ZebraLockHandle h) int zebra_unlock (ZebraLockHandle h) { -#ifdef WINDOWS +#ifdef WIN32 return _locking (h->fd, _LK_UNLCK, 1); #else return unixLock (h->fd, F_UNLCK, F_SETLKW);