]> arthur.barton.de Git - netatalk.git/blob - libatalk/util/locking.c
7fdb5d8106b124e3907f1887acc86ac595c265e1
[netatalk.git] / libatalk / util / locking.c
1 /*
2    $Id: locking.c,v 1.2 2009-10-14 01:38:29 didg Exp $
3    Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9  
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 */
15
16 #include <unistd.h>
17 #include <fcntl.h>
18 #include <atalk/util.h>
19
20 /*
21  * Function: lock_reg
22  *
23  * Purpose: lock a file with fctnl
24  *
25  * Arguments:
26  *
27  * fd         (r) File descriptor
28  * cmd        (r) cmd to fcntl, only F_SETLK is usable here
29  * type       (r) F_RDLCK, F_WRLCK, F_UNLCK
30  * offset     (r) byte offset relative to l_whence
31  * whence     (r) SEEK_SET, SEEK_CUR, SEEK_END
32  * len        (r) no. of bytes (0 means to EOF)
33  *
34  * Returns: fcntl return value
35  *
36  * Effects:
37  *
38  * Function called by macros {read|write|un]_lock to ease locking.
39  */
40 int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len)
41 {
42     struct flock lock;
43
44     lock.l_type = type;
45     lock.l_start = offset;
46     lock.l_whence = whence;
47     lock.l_len = len;
48
49     return (fcntl(fd, cmd, &lock));
50 }