Return to dba_flatfile.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / dba |
1.1 ! misho 1: /* ! 2: +----------------------------------------------------------------------+ ! 3: | PHP Version 5 | ! 4: +----------------------------------------------------------------------+ ! 5: | Copyright (c) 1997-2012 The PHP Group | ! 6: +----------------------------------------------------------------------+ ! 7: | This source file is subject to version 3.01 of the PHP license, | ! 8: | that is bundled with this package in the file LICENSE, and is | ! 9: | available through the world-wide-web at the following url: | ! 10: | http://www.php.net/license/3_01.txt | ! 11: | If you did not receive a copy of the PHP license and are unable to | ! 12: | obtain it through the world-wide-web, please send a note to | ! 13: | license@php.net so we can mail you a copy immediately. | ! 14: +----------------------------------------------------------------------+ ! 15: | Author: Marcus Boerger <helly@php.net> | ! 16: +----------------------------------------------------------------------+ ! 17: */ ! 18: ! 19: /* $Id: dba_flatfile.c 321634 2012-01-01 13:15:04Z felipe $ */ ! 20: ! 21: #ifdef HAVE_CONFIG_H ! 22: #include "config.h" ! 23: #endif ! 24: ! 25: #include "php.h" ! 26: ! 27: #if DBA_FLATFILE ! 28: #include "php_flatfile.h" ! 29: ! 30: #include "libflatfile/flatfile.h" ! 31: ! 32: #ifdef HAVE_UNISTD_H ! 33: #include <unistd.h> ! 34: #endif ! 35: #include <sys/types.h> ! 36: #include <sys/stat.h> ! 37: #include <fcntl.h> ! 38: ! 39: #define FLATFILE_DATA flatfile *dba = info->dbf ! 40: #define FLATFILE_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen ! 41: ! 42: DBA_OPEN_FUNC(flatfile) ! 43: { ! 44: info->dbf = pemalloc(sizeof(flatfile), info->flags&DBA_PERSISTENT); ! 45: memset(info->dbf, 0, sizeof(flatfile)); ! 46: ! 47: ((flatfile*)info->dbf)->fp = info->fp; ! 48: ! 49: return SUCCESS; ! 50: } ! 51: ! 52: DBA_CLOSE_FUNC(flatfile) ! 53: { ! 54: FLATFILE_DATA; ! 55: ! 56: if (dba->nextkey.dptr) { ! 57: efree(dba->nextkey.dptr); ! 58: } ! 59: pefree(dba, info->flags&DBA_PERSISTENT); ! 60: } ! 61: ! 62: DBA_FETCH_FUNC(flatfile) ! 63: { ! 64: datum gval; ! 65: char *new = NULL; ! 66: ! 67: FLATFILE_DATA; ! 68: FLATFILE_GKEY; ! 69: ! 70: gval = flatfile_fetch(dba, gkey TSRMLS_CC); ! 71: if (gval.dptr) { ! 72: if (newlen) { ! 73: *newlen = gval.dsize; ! 74: } ! 75: new = estrndup(gval.dptr, gval.dsize); ! 76: efree(gval.dptr); ! 77: } ! 78: return new; ! 79: } ! 80: ! 81: DBA_UPDATE_FUNC(flatfile) ! 82: { ! 83: datum gval; ! 84: ! 85: FLATFILE_DATA; ! 86: FLATFILE_GKEY; ! 87: gval.dptr = (char *) val; ! 88: gval.dsize = vallen; ! 89: ! 90: switch(flatfile_store(dba, gkey, gval, mode==1 ? FLATFILE_INSERT : FLATFILE_REPLACE TSRMLS_CC)) { ! 91: case -1: ! 92: php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible"); ! 93: return FAILURE; ! 94: default: ! 95: case 0: ! 96: return SUCCESS; ! 97: case 1: ! 98: php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists"); ! 99: return FAILURE; ! 100: } ! 101: } ! 102: ! 103: DBA_EXISTS_FUNC(flatfile) ! 104: { ! 105: datum gval; ! 106: FLATFILE_DATA; ! 107: FLATFILE_GKEY; ! 108: ! 109: gval = flatfile_fetch(dba, gkey TSRMLS_CC); ! 110: if (gval.dptr) { ! 111: efree(gval.dptr); ! 112: return SUCCESS; ! 113: } ! 114: return FAILURE; ! 115: } ! 116: ! 117: DBA_DELETE_FUNC(flatfile) ! 118: { ! 119: FLATFILE_DATA; ! 120: FLATFILE_GKEY; ! 121: return(flatfile_delete(dba, gkey TSRMLS_CC) == -1 ? FAILURE : SUCCESS); ! 122: } ! 123: ! 124: DBA_FIRSTKEY_FUNC(flatfile) ! 125: { ! 126: FLATFILE_DATA; ! 127: ! 128: if (dba->nextkey.dptr) { ! 129: efree(dba->nextkey.dptr); ! 130: } ! 131: dba->nextkey = flatfile_firstkey(dba TSRMLS_CC); ! 132: if (dba->nextkey.dptr) { ! 133: if (newlen) { ! 134: *newlen = dba->nextkey.dsize; ! 135: } ! 136: return estrndup(dba->nextkey.dptr, dba->nextkey.dsize); ! 137: } ! 138: return NULL; ! 139: } ! 140: ! 141: DBA_NEXTKEY_FUNC(flatfile) ! 142: { ! 143: FLATFILE_DATA; ! 144: ! 145: if (!dba->nextkey.dptr) { ! 146: return NULL; ! 147: } ! 148: ! 149: if (dba->nextkey.dptr) { ! 150: efree(dba->nextkey.dptr); ! 151: } ! 152: dba->nextkey = flatfile_nextkey(dba TSRMLS_CC); ! 153: if (dba->nextkey.dptr) { ! 154: if (newlen) { ! 155: *newlen = dba->nextkey.dsize; ! 156: } ! 157: return estrndup(dba->nextkey.dptr, dba->nextkey.dsize); ! 158: } ! 159: return NULL; ! 160: } ! 161: ! 162: DBA_OPTIMIZE_FUNC(flatfile) ! 163: { ! 164: /* dummy */ ! 165: return SUCCESS; ! 166: } ! 167: ! 168: DBA_SYNC_FUNC(flatfile) ! 169: { ! 170: /* dummy */ ! 171: return SUCCESS; ! 172: } ! 173: ! 174: DBA_INFO_FUNC(flatfile) ! 175: { ! 176: return estrdup(flatfile_version()); ! 177: } ! 178: ! 179: #endif ! 180: ! 181: /* ! 182: * Local variables: ! 183: * tab-width: 4 ! 184: * c-basic-offset: 4 ! 185: * End: ! 186: * vim600: sw=4 ts=4 fdm=marker ! 187: * vim<600: sw=4 ts=4 ! 188: */