Annotation of embedaddon/php/ext/dba/dba_qdbm.c, revision 1.1.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: Marcin Gibula <mg@iceni.pl>                                  |
                     16:   +----------------------------------------------------------------------+
                     17: */
                     18: 
                     19: /* $Id: dba_qdbm.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_QDBM
                     28: #include "php_qdbm.h"
                     29: 
                     30: #ifdef QDBM_INCLUDE_FILE
                     31: #include QDBM_INCLUDE_FILE
                     32: #endif
                     33: 
                     34: #define QDBM_DATA dba_qdbm_data *dba = info->dbf
                     35: 
                     36: typedef struct {
                     37:        DEPOT *dbf;
                     38: } dba_qdbm_data;
                     39: 
                     40: DBA_OPEN_FUNC(qdbm)
                     41: {
                     42:        DEPOT *dbf;
                     43: 
                     44:        switch(info->mode) {
                     45:                case DBA_READER:
                     46:                        dbf = dpopen(info->path, DP_OREADER, 0);
                     47:                        break;
                     48:                case DBA_WRITER:
                     49:                        dbf = dpopen(info->path, DP_OWRITER, 0);
                     50:                        break;
                     51:                case DBA_CREAT:
                     52:                        dbf = dpopen(info->path, DP_OWRITER | DP_OCREAT, 0);
                     53:                        break;
                     54:                case DBA_TRUNC:
                     55:                        dbf = dpopen(info->path, DP_OWRITER | DP_OCREAT | DP_OTRUNC, 0);
                     56:                        break;
                     57:                default:
                     58:                        return FAILURE;
                     59:        }
                     60: 
                     61:        if (dbf) {
                     62:                info->dbf = pemalloc(sizeof(dba_qdbm_data), info->flags & DBA_PERSISTENT);
                     63:                memset(info->dbf, 0, sizeof(dba_qdbm_data));
                     64:                ((dba_qdbm_data *) info->dbf)->dbf = dbf;
                     65:                return SUCCESS;
                     66:        }
                     67: 
                     68:        *error = (char *) dperrmsg(dpecode);
                     69:        return FAILURE;
                     70: }
                     71: 
                     72: DBA_CLOSE_FUNC(qdbm)
                     73: {
                     74:        QDBM_DATA;
                     75: 
                     76:        dpclose(dba->dbf);
                     77:        pefree(dba, info->flags & DBA_PERSISTENT);
                     78: }
                     79: 
                     80: DBA_FETCH_FUNC(qdbm)
                     81: {
                     82:        QDBM_DATA;
                     83:        char *value, *new = NULL;
                     84:        int value_size;
                     85: 
                     86:        value = dpget(dba->dbf, key, keylen, 0, -1, &value_size);
                     87:        if (value) {
                     88:                if (newlen) *newlen = value_size;
                     89:                new = estrndup(value, value_size);
                     90:                free(value);
                     91:        }
                     92: 
                     93:        return new;
                     94: }
                     95: 
                     96: DBA_UPDATE_FUNC(qdbm)
                     97: {
                     98:        QDBM_DATA;
                     99:        int result;
                    100: 
                    101:        result = dpput(dba->dbf, key, keylen, val, vallen, mode == 1 ? DP_DKEEP : DP_DOVER);
                    102:        if (result)
                    103:                return SUCCESS;
                    104: 
                    105:        php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "%s", dperrmsg(dpecode));
                    106:        return FAILURE;
                    107: }
                    108: 
                    109: DBA_EXISTS_FUNC(qdbm)
                    110: {
                    111:        QDBM_DATA;
                    112:        char *value;
                    113: 
                    114:        value = dpget(dba->dbf, key, keylen, 0, -1, NULL);
                    115:        if (value) {
                    116:                free(value);
                    117:                return SUCCESS;
                    118:        }
                    119: 
                    120:        return FAILURE;
                    121: }
                    122: 
                    123: DBA_DELETE_FUNC(qdbm)
                    124: {
                    125:        QDBM_DATA;
                    126: 
                    127:        return dpout(dba->dbf, key, keylen) ? SUCCESS : FAILURE;
                    128: }
                    129: 
                    130: DBA_FIRSTKEY_FUNC(qdbm)
                    131: {
                    132:        QDBM_DATA;
                    133:        int value_size;
                    134:        char *value, *new = NULL;
                    135: 
                    136:        dpiterinit(dba->dbf);
                    137: 
                    138:        value = dpiternext(dba->dbf, &value_size);
                    139:        if (value) {
                    140:                if (newlen) *newlen = value_size;
                    141:                new = estrndup(value, value_size);
                    142:                free(value);
                    143:        }
                    144: 
                    145:        return new;
                    146: }
                    147: 
                    148: DBA_NEXTKEY_FUNC(qdbm)
                    149: {
                    150:        QDBM_DATA;
                    151:        int value_size;
                    152:        char *value, *new = NULL;
                    153: 
                    154:        value = dpiternext(dba->dbf, &value_size);
                    155:        if (value) {
                    156:                if (newlen) *newlen = value_size;
                    157:                new = estrndup(value, value_size);
                    158:                free(value);
                    159:        }
                    160: 
                    161:        return new;
                    162: }
                    163: 
                    164: DBA_OPTIMIZE_FUNC(qdbm)
                    165: {
                    166:        QDBM_DATA;
                    167: 
                    168:        dpoptimize(dba->dbf, 0);
                    169:        return SUCCESS;
                    170: }
                    171: 
                    172: DBA_SYNC_FUNC(qdbm)
                    173: {
                    174:        QDBM_DATA;
                    175: 
                    176:        dpsync(dba->dbf);
                    177:        return SUCCESS;
                    178: }
                    179: 
                    180: DBA_INFO_FUNC(qdbm)
                    181: {
                    182:        return estrdup(dpversion);
                    183: }
                    184: 
                    185: #endif
                    186: 
                    187: /*
                    188:  * Local variables:
                    189:  * tab-width: 4
                    190:  * c-basic-offset: 4
                    191:  * End:
                    192:  * vim600: sw=4 ts=4 fdm=marker
                    193:  * vim<600: sw=4 ts=4
                    194:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>