Bundle-OS2_default
view release on metacpan or search on metacpan
patches/diff_DBD-SQLite-0.28 view on Meta::CPAN
--- ./os.c-pre Sat Aug 23 02:46:54 2003
+++ ./os.c Mon Oct 6 20:54:12 2003
@@ -61,6 +61,11 @@
# define fcntl(A,B,C) 0
#endif
+#ifdef __EMX__ /* flock available via perl.h */
+#include "EXTERN.h"
+#include "perl.h"
+#endif
+
/*
** Macros for performance tracing. Normally turned off
*/
@@ -1119,6 +1124,68 @@ int isNT(void){
# define FIRST_LOCKBYTE (0xffffffff - N_LOCKBYTE)
#endif
+enum sqlite_flock_t {
+ sqlite_flock_rlock,
+ sqlite_flock_wlock,
+ sqlite_flock_unlock
+};
+
+#if OS_UNIX
+# if defined(HAVE_FLOCK) || defined(__EMX__)
+static int
+sqlite_flock(int fd, enum sqlite_flock_t how)
+{
+ int type;
+ int s, rc;
+
+ switch (how) {
+ case sqlite_flock_rlock:
+ type = LOCK_SH;
+ break;
+ case sqlite_flock_wlock:
+ type = LOCK_EX;
+ break;
+ case sqlite_flock_unlock:
+ type = LOCK_UN;
+ break;
+ }
+ rc = flock(fd, type);
+ if( rc != 0 )
+ rc = (errno==EINVAL) ? SQLITE_NOLFS : SQLITE_BUSY;
+ else
+ rc = SQLITE_OK;
+ return rc;
+}
+# else
+static int
+sqlite_flock(int fd, sqlite_flock_t how)
+{
+ struct flock lock;
+ int s, rc;
+
+ switch (how) {
+ case sqlite_flock_rlock:
+ lock.l_type = F_RDLCK;
+ break;
+ case sqlite_flock_wlock:
+ lock.l_type = F_WRLCK;
+ break;
+ case sqlite_flock_unlock:
+ lock.l_type = F_UNLCK;
+ break;
+ }
+ lock.l_whence = SEEK_SET;
+ lock.l_start = lock.l_len = 0L;
+ s = fcntl(fd, F_SETLK, &lock);
+ if( s!=0 )
+ rc = (errno==EINVAL) ? SQLITE_NOLFS : SQLITE_BUSY;
( run in 0.569 second using v1.01-cache-2.11-cpan-39bf76dae61 )