summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/dba/dba_flatfile.c57
-rw-r--r--ext/dba/libflatfile/flatfile.c32
-rw-r--r--ext/dba/libflatfile/flatfile.h16
3 files changed, 56 insertions, 49 deletions
diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c
index 986b59cd19..27df27ce16 100644
--- a/ext/dba/dba_flatfile.c
+++ b/ext/dba/dba_flatfile.c
@@ -44,8 +44,8 @@
#endif
#endif
-#define DBM_DATA flatfile *dba = info->dbf
-#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
+#define FLATFILE_DATA flatfile *dba = info->dbf
+#define FLATFILE_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
#define TRUNC_IT(extension, mode) \
snprintf(buf, MAXPATHLEN, "%s" extension, info->path); \
@@ -152,7 +152,7 @@ DBA_OPEN_FUNC(flatfile)
DBA_CLOSE_FUNC(flatfile)
{
- DBM_DATA;
+ FLATFILE_DATA;
if (dba->lockfn) {
#if NFS_HACK
@@ -171,19 +171,15 @@ DBA_CLOSE_FUNC(flatfile)
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);
+ FLATFILE_DATA;
+ FLATFILE_GKEY;
+
+ gval = flatfile_fetch(dba, gkey TSRMLS_CC);
if(gval.dptr) {
if(newlen) *newlen = gval.dsize;
new = estrndup(gval.dptr, gval.dsize);
@@ -196,19 +192,31 @@ DBA_UPDATE_FUNC(flatfile)
{
datum gval;
- DBM_GKEY;
+ FLATFILE_DATA;
+ FLATFILE_GKEY;
gval.dptr = (char *) val;
gval.dsize = vallen;
- return (DBM_STORE(gkey, gval) == -1 ? FAILURE : SUCCESS);
+ switch(flatfile_store(dba, gkey, gval, mode==1 ? FLATFILE_INSERT : FLATFILE_REPLACE TSRMLS_CC)) {
+ case -1:
+ php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible");
+ return FAILURE;
+ default:
+ case 0:
+ return SUCCESS;
+ case 1:
+ php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists");
+ return SUCCESS;
+ }
}
DBA_EXISTS_FUNC(flatfile)
{
datum gval;
- DBM_GKEY;
+ FLATFILE_DATA;
+ FLATFILE_GKEY;
- gval = DBM_FETCH(gkey);
+ gval = flatfile_fetch(dba, gkey TSRMLS_CC);
if(gval.dptr) {
efree(gval.dptr);
return SUCCESS;
@@ -218,17 +226,18 @@ DBA_EXISTS_FUNC(flatfile)
DBA_DELETE_FUNC(flatfile)
{
- DBM_GKEY;
- return(DBM_DELETE(gkey) == -1 ? FAILURE : SUCCESS);
+ FLATFILE_DATA;
+ FLATFILE_GKEY;
+ return(flatfile_delete(dba, gkey TSRMLS_CC) == -1 ? FAILURE : SUCCESS);
}
DBA_FIRSTKEY_FUNC(flatfile)
{
- DBM_DATA;
+ FLATFILE_DATA;
if (dba->nextkey.dptr)
efree(dba->nextkey.dptr);
- dba->nextkey = DBM_FIRSTKEY();
+ dba->nextkey = flatfile_firstkey(dba TSRMLS_CC);
if(dba->nextkey.dptr) {
if(newlen)
*newlen = dba->nextkey.dsize;
@@ -239,16 +248,14 @@ DBA_FIRSTKEY_FUNC(flatfile)
DBA_NEXTKEY_FUNC(flatfile)
{
- DBM_DATA;
- datum lkey;
+ FLATFILE_DATA;
if(!dba->nextkey.dptr)
return NULL;
- lkey = dba->nextkey;
- dba->nextkey = DBM_NEXTKEY(lkey);
- if (lkey.dptr)
- efree(lkey.dptr);
+ if (dba->nextkey.dptr)
+ efree(dba->nextkey.dptr);
+ dba->nextkey = flatfile_nextkey(dba TSRMLS_CC);
if(dba->nextkey.dptr) {
if(newlen)
*newlen = dba->nextkey.dsize;
diff --git a/ext/dba/libflatfile/flatfile.c b/ext/dba/libflatfile/flatfile.c
index 0b74614d5f..deedbb23b8 100644
--- a/ext/dba/libflatfile/flatfile.c
+++ b/ext/dba/libflatfile/flatfile.c
@@ -44,11 +44,11 @@
* ret = 1 key already exists - nothing done
*/
-/* {{{ dbm_file_store
+/* {{{ flatfile_store
*/
-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)) {
+PHPAPI int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode TSRMLS_DC) {
+ if (mode == FLATFILE_INSERT) {
+ if (flatfile_findkey(dba, key_datum TSRMLS_CC)) {
return 1;
}
php_stream_seek(dba->fp, 0L, SEEK_END);
@@ -61,7 +61,7 @@ PHPAPI int dbm_file_store(flatfile *dba, datum key_datum, datum value_datum, int
if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize)
return -1;
} else { /* DBM_REPLACE */
- dbm_file_delete(dba, key_datum TSRMLS_CC);
+ flatfile_delete(dba, key_datum TSRMLS_CC);
php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize);
php_stream_flush(dba->fp);
if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize)
@@ -75,14 +75,14 @@ PHPAPI int dbm_file_store(flatfile *dba, datum key_datum, datum value_datum, int
}
/* }}} */
-/* {{{ dbm_file_fetch
+/* {{{ flatfile_fetch
*/
-PHPAPI datum dbm_file_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
+PHPAPI datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
datum value_datum = {NULL, 0};
int num=0, buf_size=1024;
char *buf;
- if (dbm_file_findkey(dba, key_datum TSRMLS_CC)) {
+ if (flatfile_findkey(dba, key_datum TSRMLS_CC)) {
buf = emalloc((buf_size+1) * sizeof(char));
if (php_stream_gets(dba->fp, buf, 15)) {
num = atoi(buf);
@@ -103,9 +103,9 @@ PHPAPI datum dbm_file_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
}
/* }}} */
-/* {{{ dbm_file_delete
+/* {{{ flatfile_delete
*/
-PHPAPI int dbm_file_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
+PHPAPI int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
char *key = key_datum.dptr;
int size = key_datum.dsize;
@@ -162,9 +162,9 @@ PHPAPI int dbm_file_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
}
/* }}} */
-/* {{{ dbm_file_findkey
+/* {{{ flatfile_findkey
*/
-PHPAPI int dbm_file_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
+PHPAPI int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
char *buf = NULL;
int num;
int buf_size=1024;
@@ -209,9 +209,9 @@ PHPAPI int dbm_file_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
}
/* }}} */
-/* {{{ dbm_file_firstkey
+/* {{{ flatfile_firstkey
*/
-PHPAPI datum dbm_file_firstkey(flatfile *dba TSRMLS_DC) {
+PHPAPI datum flatfile_firstkey(flatfile *dba TSRMLS_DC) {
datum buf;
int num;
int buf_size=1024;
@@ -250,9 +250,9 @@ PHPAPI datum dbm_file_firstkey(flatfile *dba TSRMLS_DC) {
}
/* }}} */
-/* {{{ latfile_nextkey
+/* {{{ flatfile_nextkey
*/
-PHPAPI datum dbm_file_nextkey(flatfile *dba TSRMLS_DC) {
+PHPAPI datum flatfile_nextkey(flatfile *dba TSRMLS_DC) {
datum buf;
int num;
int buf_size=1024;
diff --git a/ext/dba/libflatfile/flatfile.h b/ext/dba/libflatfile/flatfile.h
index 486af9135f..f3795bb164 100644
--- a/ext/dba/libflatfile/flatfile.h
+++ b/ext/dba/libflatfile/flatfile.h
@@ -34,14 +34,14 @@ typedef struct {
datum nextkey;
} flatfile;
-#define DBM_INSERT 0
-#define DBM_REPLACE 1
+#define FLATFILE_INSERT 1
+#define FLATFILE_REPLACE 0
-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);
+PHPAPI int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode TSRMLS_DC);
+PHPAPI datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC);
+PHPAPI int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC);
+PHPAPI int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC);
+PHPAPI datum flatfile_firstkey(flatfile *dba TSRMLS_DC);
+PHPAPI datum flatfile_nextkey(flatfile *dba TSRMLS_DC);
#endif