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 )