* cygwin.din: Export flock.
* flock.c: New file.
* include/sys/file.h: Include sys/cdefs.h.
Add function prototype for flock().
Add some comments from BSD's header for further clarity.
(L_SET, L_CURR, L_INCR, L_XTND): Redefine as the macros
SEEK_SET, SEEK_CUR, SEEK_CUR, & SEEK_END respectively.
(LOCK_SH,LOCK_EX,LOCK_NB,LOCK_UN): New macros for flock().
* include/cygwin/version.h: Bump API minor number.
+2003-11-29 Nicholas Wourms <nwourms@netscape.net>
+
+ * Makefile.in: (DLL_OFILES): Add flock.o.
+ * cygwin.din: Export flock.
+ * flock.c: New file.
+ * include/sys/file.h: Include sys/cdefs.h.
+ Add function prototype for flock().
+ Add some comments from BSD's header for further clarity.
+ (L_SET, L_CURR, L_INCR, L_XTND): Redefine as the macros
+ SEEK_SET, SEEK_CUR, SEEK_CUR, & SEEK_END respectively.
+ (LOCK_SH,LOCK_EX,LOCK_NB,LOCK_UN): New macros for flock().
+ * include/cygwin/version.h: Bump API minor number.
+
2003-11-28 Christopher Faylor <cgf@redhat.com>
* sigproc.cc (no_signals_available): Fix so that non-zero exit state is
fhandler_random.o fhandler_raw.o fhandler_registry.o fhandler_serial.o \
fhandler_socket.o fhandler_tape.o fhandler_termios.o \
fhandler_tty.o fhandler_virtual.o fhandler_windows.o \
- fhandler_zero.o fnmatch.o fork.o getopt.o glob.o grp.o heap.o init.o \
- ioctl.o ipc.o iruserok.o localtime.o malloc_wrapper.o miscfuncs.o \
+ fhandler_zero.o flock.o fnmatch.o fork.o getopt.o glob.o grp.o heap.o \
+ init.o ioctl.o ipc.o iruserok.o localtime.o malloc_wrapper.o miscfuncs.o \
mmap.o msg.o net.o netdb.o ntea.o passwd.o path.o pinfo.o pipe.o \
poll.o pthread.o regcomp.o regerror.o regexec.o regfree.o registry.o \
resource.o scandir.o sched.o sec_acl.o sec_helper.o security.o \
_finitef = finitef NOSIGFE
fiprintf SIGFE
_fiprintf = fiprintf SIGFE
+flock SIGFE
floor NOSIGFE
_floor = floor NOSIGFE
floorf NOSIGFE
--- /dev/null
+/* One of many ways to emulate flock() on top of real (good) POSIX locks.
+ *
+ * This flock() emulation is based upon source taken from the Red Hat
+ * implementation used in their imap-2002d SRPM.
+ *
+ * $RH: flock.c,v 1.2 2000/08/23 17:07:00 nalin Exp $
+ */
+/* flock.c
+
+ Copyright 2003 Red Hat, Inc.
+
+ This file is part of Cygwin.
+
+ This software is a copyrighted work licensed under the terms of the
+ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+ details. */
+
+#include <sys/file.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int
+flock (int fd, int operation)
+{
+ int i, cmd;
+ struct flock l = { 0, 0, 0, 0, 0 };
+ if (operation & LOCK_NB)
+ {
+ cmd = F_SETLK;
+ }
+ else
+ {
+ cmd = F_SETLKW;
+ }
+ l.l_whence = SEEK_SET;
+ switch (operation & (~LOCK_NB))
+ {
+ case LOCK_EX:
+ l.l_type = F_WRLCK;
+ i = fcntl (fd, cmd, &l);
+ if (i == -1)
+ {
+ if ((errno == EAGAIN) || (errno == EACCES))
+ {
+ errno = EWOULDBLOCK;
+ }
+ }
+ break;
+ case LOCK_SH:
+ l.l_type = F_RDLCK;
+ i = fcntl (fd, cmd, &l);
+ if (i == -1)
+ {
+ if ((errno == EAGAIN) || (errno == EACCES))
+ {
+ errno = EWOULDBLOCK;
+ }
+ }
+ break;
+ case LOCK_UN:
+ l.l_type = F_UNLCK;
+ i = fcntl (fd, cmd, &l);
+ if (i == -1)
+ {
+ if ((errno == EAGAIN) || (errno == EACCES))
+ {
+ errno = EWOULDBLOCK;
+ }
+ }
+ break;
+ default:
+ i = -1;
+ errno = EINVAL;
+ break;
+ }
+ return i;
+}
+
+#ifdef FLOCK_EMULATE_IS_MAIN
+int
+main (int argc, char **argv)
+{
+ int fd = open (argv[1], O_WRONLY);
+ flock (fd, LOCK_EX);
+ return 0;
+}
+#endif
103: Export getprogname, setprogname.
104: Export msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop.
105: Export sigwait.
+ 106: Export flock.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 105
+#define CYGWIN_VERSION_API_MINOR 106
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
-
+/*
+ * 2003-11-27 Nicholas Wourms <nwourms@netscape.net>:
+ *
+ * Include sys/cdefs.h. Add function prototype for flock().
+ * Add some comments from BSD's header for further clarity.
+ * (L_SET, L_CURR, L_INCR, L_XTND): Redefine as the macros
+ * SEEK_SET, SEEK_CUR, SEEK_CUR, & SEEK_END respectively.
+ * (LOCK_SH,LOCK_EX,LOCK_NB,LOCK_UN): New macros for flock().
+*/
#ifndef _FILE_H_
#define _FILE_H_
+#include <sys/cdefs.h>
#include <fcntl.h>
-#define L_SET 0
-#define L_CURR 1
-#define L_INCR 1
-#define L_XTND 2
+/* Whence values for lseek(); renamed by POSIX 1003.1 */
+#define L_SET SEEK_SET
+#define L_CURR SEEK_CUR
+#define L_INCR SEEK_CUR
+#define L_XTND SEEK_END
+
+/* Operations for flock() function */
+#define LOCK_SH 1 /* Shared lock. */
+#define LOCK_EX 2 /* Exclusive lock. */
+#define LOCK_NB 4 /* Don't block when locking. */
+#define LOCK_UN 8 /* Unlock. */
+/* Operations for access function */
#define F_OK 0 /* does file exist */
-#define X_OK 1 /* is it executable by caller */
+#define X_OK 1 /* is it executable or searchable by caller */
#define W_OK 2 /* is it writable by caller */
#define R_OK 4 /* is it readable by caller */
+/* Apply or remove an advisory lock on the file fd refers to. */
+__BEGIN_DECLS
+
+int _EXFUN(flock, (int, int));
+
+__END_DECLS
+
#endif