Annotation of embedaddon/php/ext/dba/dba_flatfile.c, revision 1.1
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: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>