X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Flockutil.c;fp=index%2Flockutil.c;h=0000000000000000000000000000000000000000;hb=23c386f2b4511acfdb389adc7f48f15d284c639c;hp=4c7cbf7848e738c0f3a0f76bb866450d9fa50cd2;hpb=a93ffbc5bd917ade607d1d6960b1ecb26f621ec2;p=idzebra-moved-to-github.git diff --git a/index/lockutil.c b/index/lockutil.c deleted file mode 100644 index 4c7cbf7..0000000 --- a/index/lockutil.c +++ /dev/null @@ -1,186 +0,0 @@ -/* $Id: lockutil.c,v 1.21 2005-06-14 20:28:54 adam Exp $ - Copyright (C) 1995-2005 - Index Data ApS - -This file is part of the Zebra server. - -Zebra is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. - -Zebra is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with Zebra; see the file LICENSE.zebra. If not, write to the -Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. -*/ - - -#include -#include -#include -#include -#include -#include -#ifdef WIN32 -#include -#include -#endif -#if HAVE_UNISTD_H -#include -#endif - -#include "index.h" - -struct zebra_lock_info { - int fd; - int excl_flag; -}; - -char *zebra_mk_fname (const char *dir, const char *name) -{ - int dlen = dir ? strlen(dir) : 0; - char *fname = xmalloc (dlen + strlen(name) + 3); - -#ifdef WIN32 - if (dlen) - { - int last_one = dir[dlen-1]; - - if (!strchr ("/\\:", last_one)) - sprintf (fname, "%s\\%s", dir, name); - else - sprintf (fname, "%s%s", dir, name); - } - else - sprintf (fname, "%s", name); -#else - if (dlen) - { - int last_one = dir[dlen-1]; - - if (!strchr ("/", last_one)) - sprintf (fname, "%s/%s", dir, name); - else - sprintf (fname, "%s%s", dir, name); - } - else - sprintf (fname, "%s", name); -#endif - return fname; -} - -ZebraLockHandle zebra_lock_create (const char *dir, - const char *name, int excl_flag) -{ - char *fname = zebra_mk_fname(dir, name); - ZebraLockHandle h = (ZebraLockHandle) xmalloc (sizeof(*h)); - - h->excl_flag = excl_flag; - h->fd = -1; - - -#ifdef WIN32 - if (!h->excl_flag) - h->fd = open (name, O_BINARY|O_RDONLY); - if (h->fd == -1) - h->fd = open (fname, ((h->excl_flag > 1) ? O_EXCL : 0)| - (O_BINARY|O_CREAT|O_RDWR), 0666); -#else - h->fd= open (fname, ((h->excl_flag > 1) ? O_EXCL : 0)| - (O_BINARY|O_CREAT|O_RDWR), 0666); -#endif - if (h->fd == -1) - { - if (h->excl_flag <= 1) - yaz_log (YLOG_WARN|YLOG_ERRNO, "open %s", fname); - xfree (h); - h = 0; - } - xfree (fname); - return h; -} - -void zebra_lock_destroy (ZebraLockHandle h) -{ - if (!h) - return; - if (h->fd != -1) - close (h->fd); - xfree (h); -} - -void zebra_lock_prefix (Res res, char *path) -{ - const char *lock_dir = res_get_def (res, "lockDir", ""); - - strcpy (path, lock_dir); - if (*path && path[strlen(path)-1] != '/') - strcat (path, "/"); -} - -#ifndef WIN32 -static int unixLock (int fd, int type, int cmd) -{ - struct flock area; - area.l_type = type; - area.l_whence = SEEK_SET; - area.l_len = area.l_start = 0L; - return fcntl (fd, cmd, &area); -} -#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 WIN32 - return _locking (h->fd, _LK_LOCK, 1); -#else - return unixLock (h->fd, h->excl_flag ? F_WRLCK : F_RDLCK, F_SETLKW); -#endif -} - -int zebra_lock_nb (ZebraLockHandle h) -{ -#ifdef WIN32 - return _locking (h->fd, _LK_NBLCK, 1); -#else - return unixLock (h->fd, h->excl_flag ? F_WRLCK : F_RDLCK, F_SETLK); -#endif -} - -int zebra_unlock (ZebraLockHandle h) -{ -#ifdef WIN32 - return _locking (h->fd, _LK_UNLCK, 1); -#else - return unixLock (h->fd, F_UNLCK, F_SETLKW); -#endif -} - -int zebra_lock_fd (ZebraLockHandle h) -{ - return h->fd; -}