helly           Wed Nov  6 04:17:51 2002 EDT

  Added files:                 
    /php4/ext/dba       dba_flatfile.c 

  Removed files:               
    /php4/ext/dba       dba_flatile.c 

  Modified files:              
    /php4/ext/dba       config.m4 dba.c 
    /php4/ext/dba/libflatfile   flatfile.c flatfile.h 
  Log:
  Use the the name 'flatfile' correctly so the handler support can be built now.
  #I do not like the lock solution since a crashed php would leave the *lck
  #file locked now.
  
  
Index: php4/ext/dba/config.m4
diff -u php4/ext/dba/config.m4:1.26 php4/ext/dba/config.m4:1.27
--- php4/ext/dba/config.m4:1.26 Tue Nov  5 23:16:17 2002
+++ php4/ext/dba/config.m4      Wed Nov  6 04:17:50 2002
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: config.m4,v 1.26 2002/11/06 04:16:17 helly Exp $
+dnl $Id: config.m4,v 1.27 2002/11/06 09:17:50 helly Exp $
 dnl
 
 AC_DEFUN(PHP_TEMP_LDFLAGS,[
@@ -246,7 +246,7 @@
   if test "$withval" = "yes"; then
     PHP_ADD_BUILD_DIR($ext_builddir/libflatfile)
     AC_DEFINE(DBA_FLATFILE, 1, [ ])
-    flat_sources="php_flatfile.c libflatfile/flatfile.c"
+    flat_sources="dba_flatfile.c libflatfile/flatfile.c"
     THIS_RESULT="builtin"
   fi
 ])
Index: php4/ext/dba/dba.c
diff -u php4/ext/dba/dba.c:1.53 php4/ext/dba/dba.c:1.54
--- php4/ext/dba/dba.c:1.53     Tue Nov  5 23:16:17 2002
+++ php4/ext/dba/dba.c  Wed Nov  6 04:17:50 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba.c,v 1.53 2002/11/06 04:16:17 helly Exp $ */
+/* $Id: dba.c,v 1.54 2002/11/06 09:17:50 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -35,6 +35,7 @@
 #include "php_cdb.h"
 #include "php_db2.h"
 #include "php_db3.h"
+#include "php_flatfile.h"
 
 /* {{{ dba_functions[]
  */
Index: php4/ext/dba/libflatfile/flatfile.c
diff -u php4/ext/dba/libflatfile/flatfile.c:1.1 php4/ext/dba/libflatfile/flatfile.c:1.2
--- php4/ext/dba/libflatfile/flatfile.c:1.1     Tue Nov  5 23:16:18 2002
+++ php4/ext/dba/libflatfile/flatfile.c Wed Nov  6 04:17:51 2002
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: flatfile.c,v 1.1 2002/11/06 04:16:18 helly Exp $ */
+/* $Id: flatfile.c,v 1.2 2002/11/06 09:17:51 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -36,7 +36,7 @@
 #include <unistd.h>
 #endif
 
-#include "dbm.h"
+#include "flatfile.h"
 
 /*
  * ret = -1 means that database was opened for read-only
@@ -46,7 +46,7 @@
 
 /* {{{ dbm_file_store
  */
-PHPAPI int dbm_file_store(dba_dbm_data *dba, datum key_datum, datum value_datum, int 
mode TSRMLS_DC) {
+PHPAPI int dbm_file_store(flatfile *dba, datum key_datum, datum value_datum, int mode 
+TSRMLS_DC) {
        if (mode == DBM_INSERT) {
                if (dbm_file_findkey(dba, key_datum TSRMLS_CC)) {
                        return 1;
@@ -77,7 +77,7 @@
 
 /* {{{ dbm_file_fetch
  */
-PHPAPI datum dbm_file_fetch(dba_dbm_data *dba, datum key_datum TSRMLS_DC) {
+PHPAPI datum dbm_file_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
        datum value_datum = {NULL, 0};
        int num=0, buf_size=1024;
        char *buf;      
@@ -105,7 +105,7 @@
 
 /* {{{ dbm_file_delete
  */
-PHPAPI int dbm_file_delete(dba_dbm_data *dba, datum key_datum TSRMLS_DC) {
+PHPAPI int dbm_file_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
        char *key = key_datum.dptr;
        int size = key_datum.dsize;
 
@@ -164,7 +164,7 @@
 
 /* {{{ dbm_file_findkey
  */
-PHPAPI int dbm_file_findkey(dba_dbm_data *dba, datum key_datum TSRMLS_DC) {
+PHPAPI int dbm_file_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
        char *buf = NULL;
        int num;
        int buf_size=1024;
@@ -211,7 +211,7 @@
 
 /* {{{ dbm_file_firstkey
  */
-PHPAPI datum dbm_file_firstkey(dba_dbm_data *dba TSRMLS_DC) {
+PHPAPI datum dbm_file_firstkey(flatfile *dba TSRMLS_DC) {
        datum buf;
        int num;
        int buf_size=1024;
@@ -252,7 +252,7 @@
 
 /* {{{ latfile_nextkey
  */
-PHPAPI datum dbm_file_nextkey(dba_dbm_data *dba TSRMLS_DC) {
+PHPAPI datum dbm_file_nextkey(flatfile *dba TSRMLS_DC) {
        datum buf;
        int num;
        int buf_size=1024;
Index: php4/ext/dba/libflatfile/flatfile.h
diff -u php4/ext/dba/libflatfile/flatfile.h:1.1 php4/ext/dba/libflatfile/flatfile.h:1.2
--- php4/ext/dba/libflatfile/flatfile.h:1.1     Tue Nov  5 23:16:18 2002
+++ php4/ext/dba/libflatfile/flatfile.h Wed Nov  6 04:17:51 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: flatfile.h,v 1.1 2002/11/06 04:16:18 helly Exp $ */
+/* $Id: flatfile.h,v 1.2 2002/11/06 09:17:51 helly Exp $ */
 
 #ifndef PHP_LIBDBM_H
 #define PHP_LIBDBM_H
@@ -32,16 +32,16 @@
        php_stream *fp;
        long CurrentFlatFilePos;
        datum nextkey;
-} dba_dbm_data;
+} flatfile;
 
 #define DBM_INSERT 0
 #define DBM_REPLACE 1
 
-PHPAPI int dbm_file_store(dba_dbm_data *dba, datum key_datum, datum value_datum, int 
mode TSRMLS_DC);
-PHPAPI datum dbm_file_fetch(dba_dbm_data *dba, datum key_datum TSRMLS_DC);
-PHPAPI int dbm_file_delete(dba_dbm_data *dba, datum key_datum TSRMLS_DC);
-PHPAPI int dbm_file_findkey(dba_dbm_data *dba, datum key_datum TSRMLS_DC);
-PHPAPI datum dbm_file_firstkey(dba_dbm_data *dba TSRMLS_DC);
-PHPAPI datum dbm_file_nextkey(dba_dbm_data *dba TSRMLS_DC);
+PHPAPI int dbm_file_store(flatfile *dba, datum key_datum, datum value_datum, int mode 
+TSRMLS_DC);
+PHPAPI datum dbm_file_fetch(flatfile *dba, datum key_datum TSRMLS_DC);
+PHPAPI int dbm_file_delete(flatfile *dba, datum key_datum TSRMLS_DC);
+PHPAPI int dbm_file_findkey(flatfile *dba, datum key_datum TSRMLS_DC);
+PHPAPI datum dbm_file_firstkey(flatfile *dba TSRMLS_DC);
+PHPAPI datum dbm_file_nextkey(flatfile *dba TSRMLS_DC);
 
 #endif

Index: php4/ext/dba/dba_flatfile.c
+++ php4/ext/dba/dba_flatfile.c
/*
   +----------------------------------------------------------------------+
   | PHP Version 4                                                        |
   +----------------------------------------------------------------------+
   | Copyright (c) 1997-2002 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.02 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available at through the world-wide-web at                           |
   | http://www.php.net/license/2_02.txt.                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Marcus Boerger <[EMAIL PROTECTED]>                               |
   +----------------------------------------------------------------------+
 */

/* $Id: dba_flatfile.c,v 1.1 2002/11/06 09:17:50 helly Exp $ */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "php.h"

#if DBA_FLATFILE
#include "php_flatfile.h"

#include "libflatfile/flatfile.h"

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#ifdef PHP_31
#include "os/nt/flock.h"
#else
#ifdef PHP_WIN32
#include "win32/flock.h"
#else
#include <sys/file.h>
#endif
#endif

#define DBM_DATA flatfile *dba = info->dbf
#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen

#define TRUNC_IT(extension, mode) \
        snprintf(buf, MAXPATHLEN, "%s" extension, info->path); \
        buf[MAXPATHLEN-1] = '\0'; \
        if((fd = VCWD_OPEN_MODE(buf, O_CREAT | mode | O_WRONLY, filemode)) == -1) \
                return FAILURE; \
        close(fd);


DBA_OPEN_FUNC(flatfile)
{
        char *fmode;
        php_stream *fp;
        int lock;
        char *lockfn = NULL;
        int lockfd = 0;
#if NFS_HACK
        int last_try = 0;
        struct stat sb;
        int retries = 0;
#endif

        info->dbf = ecalloc(sizeof(flatfile), 1);
        if (!info->dbf) {
                *error = "Out of memory";
                return FAILURE;
        }

        switch(info->mode) {
                case DBA_READER:
                        fmode = "r";
                        lock = 0;
                        break;
                case DBA_WRITER:
                        fmode = "r+b";
                        lock = 1;
                        break;
                case DBA_CREAT:
                        fmode = "a+b";
                        lock = 1;
                        break;
                case DBA_TRUNC:
                        fmode = "w+b";
                        lock = 1;
                        break;
                default:
                        efree(info->dbf);
                        return FAILURE; /* not possible */
        }

        if (lock) {
                spprintf(&lockfn, 0, "%s.lck", info->path);

#if NFS_HACK      
                while((last_try = VCWD_STAT(lockfn, &sb))==0) {
                        retries++;
                        php_sleep(1);
                        if (retries>30) 
                                break;
                }       
                if (last_try!=0) {
                        lockfd = open(lockfn, O_RDWR|O_CREAT, 0644);
                        close(lockfd);
                } else {
                        *error = "File appears to be locked";
                        efree(lockfn);
                        efree(info->dbf);
                        return FAILURE;
                }
#else /* NFS_HACK */
                lockfd = VCWD_OPEN_MODE(lockfn, O_RDWR|O_CREAT, 0644);

                if (!lockfd || flock(lockfd, LOCK_EX)) {
                        if (lockfd)
                                close(lockfd);
                        efree(lockfn);
                        efree(info->dbf);
                        *error = "Unable to establish lock";
                        return FAILURE;
                }
#endif /* else NFS_HACK */
        }

        fp = php_stream_open_wrapper(info->path, fmode, 
STREAM_MUST_SEEK|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL);
        if (!fp) {
                *error = "Unable to open file";
#if NFS_HACK
                VCWD_UNLINK(lockfn);
#else
                if (lockfn) {
                        lockfd = VCWD_OPEN_MODE(lockfn, O_RDWR, 0644);
                        flock(lockfd, LOCK_UN);
                        close(lockfd);
                }
#endif
                efree(lockfn);
                efree(info->dbf);
                return FAILURE;
        }

        ((flatfile*)info->dbf)->fp = fp;
        ((flatfile*)info->dbf)->lockfn = lockfn;
        ((flatfile*)info->dbf)->lockfd = lockfd;

        return SUCCESS;
}

DBA_CLOSE_FUNC(flatfile)
{
        DBM_DATA;

#if NFS_HACK
        VCWD_UNLINK(dba->lockfn);
#else
        if (dba->lockfn) {
                /*dba->lockfd = VCWD_OPEN_MODE(dba->lockfn, O_RDWR, 0644);*/
                flock(dba->lockfd, LOCK_UN);
                close(dba->lockfd);
        }
#endif
        efree(dba->lockfn);

        php_stream_close(dba->fp);
        if (dba->nextkey.dptr)
                efree(dba->nextkey.dptr);
        efree(dba);
}

#define DBM_FETCH(gkey)       dbm_file_fetch((flatfile*)info->dbf, gkey TSRMLS_CC)
#define DBM_STORE(gkey, gval) dbm_file_store((flatfile*)info->dbf, gkey, gval, 
DBM_REPLACE TSRMLS_CC)
#define DBM_DELETE(gkey)      dbm_file_delete((flatfile*)info->dbf, gkey TSRMLS_CC)
#define DBM_FIRSTKEY()        dbm_file_firstkey((flatfile*)info->dbf TSRMLS_CC)
#define DBM_NEXTKEY(gkey)     dbm_file_nextkey((flatfile*)info->dbf TSRMLS_CC)

DBA_FETCH_FUNC(flatfile)
{
        datum gval;
        char *new = NULL;

        DBM_GKEY;
        gval = DBM_FETCH(gkey);
        if(gval.dptr) {
                if(newlen) *newlen = gval.dsize;
                new = estrndup(gval.dptr, gval.dsize);
                efree(gval.dptr);
        }
        return new;
}

DBA_UPDATE_FUNC(flatfile)
{
        datum gval;

        DBM_GKEY;
        gval.dptr = (char *) val;
        gval.dsize = vallen;
        
        return (DBM_STORE(gkey, gval) == -1 ? FAILURE : SUCCESS);
}

DBA_EXISTS_FUNC(flatfile)
{
        datum gval;
        DBM_GKEY;
        
        gval = DBM_FETCH(gkey);
        if(gval.dptr) {
                efree(gval.dptr);
                return SUCCESS;
        }
        return FAILURE;
}

DBA_DELETE_FUNC(flatfile)
{
        DBM_GKEY;
        return(DBM_DELETE(gkey) == -1 ? FAILURE : SUCCESS);
}

DBA_FIRSTKEY_FUNC(flatfile)
{
        DBM_DATA;

        if (dba->nextkey.dptr)
                efree(dba->nextkey.dptr);
        dba->nextkey = DBM_FIRSTKEY();
        if(dba->nextkey.dptr) {
                if(newlen) 
                        *newlen = dba->nextkey.dsize;
                return estrndup(dba->nextkey.dptr, dba->nextkey.dsize);
        }
        return NULL;
}

DBA_NEXTKEY_FUNC(flatfile)
{
        DBM_DATA;
        datum lkey;
        
        if(!dba->nextkey.dptr) 
                return NULL;
        
        lkey = dba->nextkey;
        dba->nextkey = DBM_NEXTKEY(lkey);
        if (lkey.dptr)
                efree(lkey.dptr);
        if(dba->nextkey.dptr) {
                if(newlen) 
                        *newlen = dba->nextkey.dsize;
                return estrndup(dba->nextkey.dptr, dba->nextkey.dsize);
        }
        return NULL;
}

DBA_OPTIMIZE_FUNC(flatfile)
{
        /* dummy */
        return SUCCESS;
}

DBA_SYNC_FUNC(flatfile)
{
        /* dummy */
        return SUCCESS;
}

#endif

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: sw=4 ts=4 fdm=marker
 * vim<600: sw=4 ts=4
 */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to