Return to dba_tcadb.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: Michael Maclean <mgdm@php.net> | ! 16: +----------------------------------------------------------------------+ ! 17: */ ! 18: ! 19: /* $Id$ */ ! 20: ! 21: #ifdef HAVE_CONFIG_H ! 22: #include "config.h" ! 23: #endif ! 24: ! 25: #include "php.h" ! 26: ! 27: #if DBA_TCADB ! 28: #include "php_tcadb.h" ! 29: ! 30: #ifdef TCADB_INCLUDE_FILE ! 31: #include TCADB_INCLUDE_FILE ! 32: #endif ! 33: ! 34: #define TCADB_DATA dba_tcadb_data *dba = info->dbf ! 35: ! 36: typedef struct { ! 37: TCADB *tcadb; ! 38: } dba_tcadb_data; ! 39: ! 40: DBA_OPEN_FUNC(tcadb) ! 41: { ! 42: char *path_string; ! 43: TCADB *tcadb = tcadbnew(); ! 44: ! 45: if (tcadb) { ! 46: switch(info->mode) { ! 47: case DBA_READER: ! 48: spprintf(&path_string, 0, "%s#mode=r", info->path); ! 49: break; ! 50: case DBA_WRITER: ! 51: spprintf(&path_string, 0, "%s#mode=w", info->path); ! 52: break; ! 53: case DBA_CREAT: ! 54: spprintf(&path_string, 0, "%s#mode=wc", info->path); ! 55: break; ! 56: case DBA_TRUNC: ! 57: spprintf(&path_string, 0, "%s#mode=wct", info->path); ! 58: break; ! 59: default: ! 60: tcadbdel(tcadb); ! 61: return FAILURE; ! 62: } ! 63: ! 64: if (!tcadbopen(tcadb, path_string)) { ! 65: efree(path_string); ! 66: tcadbdel(tcadb); ! 67: return FAILURE; ! 68: } ! 69: ! 70: efree(path_string); ! 71: ! 72: info->dbf = pemalloc(sizeof(dba_tcadb_data), info->flags & DBA_PERSISTENT); ! 73: memset(info->dbf, 0, sizeof(dba_tcadb_data)); ! 74: ((dba_tcadb_data *) info->dbf)->tcadb = tcadb; ! 75: return SUCCESS; ! 76: } ! 77: ! 78: return FAILURE; ! 79: } ! 80: ! 81: DBA_CLOSE_FUNC(tcadb) ! 82: { ! 83: TCADB_DATA; ! 84: ! 85: tcadbclose(dba->tcadb); ! 86: pefree(dba, info->flags & DBA_PERSISTENT); ! 87: } ! 88: ! 89: DBA_FETCH_FUNC(tcadb) ! 90: { ! 91: TCADB_DATA; ! 92: char *value, *new = NULL; ! 93: int value_size; ! 94: ! 95: value = tcadbget(dba->tcadb, key, keylen, &value_size); ! 96: if (value) { ! 97: if (newlen) { ! 98: *newlen = value_size; ! 99: } ! 100: new = estrndup(value, value_size); ! 101: tcfree(value); ! 102: } ! 103: ! 104: return new; ! 105: } ! 106: ! 107: DBA_UPDATE_FUNC(tcadb) ! 108: { ! 109: TCADB_DATA; ! 110: int result; ! 111: ! 112: if (mode == 1) { ! 113: /* Insert */ ! 114: if (tcadbvsiz(dba->tcadb, key, keylen) > -1) { ! 115: return FAILURE; ! 116: } ! 117: } ! 118: ! 119: result = tcadbput(dba->tcadb, key, keylen, val, vallen); ! 120: ! 121: if (result) { ! 122: return SUCCESS; ! 123: } ! 124: ! 125: php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "Error updating data"); ! 126: return FAILURE; ! 127: } ! 128: ! 129: DBA_EXISTS_FUNC(tcadb) ! 130: { ! 131: TCADB_DATA; ! 132: char *value; ! 133: int value_len; ! 134: ! 135: value = tcadbget(dba->tcadb, key, keylen, &value_len); ! 136: if (value) { ! 137: tcfree(value); ! 138: return SUCCESS; ! 139: } ! 140: ! 141: return FAILURE; ! 142: } ! 143: ! 144: DBA_DELETE_FUNC(tcadb) ! 145: { ! 146: TCADB_DATA; ! 147: ! 148: return tcadbout(dba->tcadb, key, keylen) ? SUCCESS : FAILURE; ! 149: } ! 150: ! 151: DBA_FIRSTKEY_FUNC(tcadb) ! 152: { ! 153: TCADB_DATA; ! 154: int value_size; ! 155: char *value, *new = NULL; ! 156: ! 157: tcadbiterinit(dba->tcadb); ! 158: ! 159: value = tcadbiternext(dba->tcadb, &value_size); ! 160: if (value) { ! 161: if (newlen) { ! 162: *newlen = value_size; ! 163: } ! 164: new = estrndup(value, value_size); ! 165: tcfree(value); ! 166: } ! 167: ! 168: return new; ! 169: } ! 170: ! 171: DBA_NEXTKEY_FUNC(tcadb) ! 172: { ! 173: TCADB_DATA; ! 174: int value_size; ! 175: char *value, *new = NULL; ! 176: ! 177: value = tcadbiternext(dba->tcadb, &value_size); ! 178: if (value) { ! 179: if (newlen) { ! 180: *newlen = value_size; ! 181: } ! 182: new = estrndup(value, value_size); ! 183: tcfree(value); ! 184: } ! 185: ! 186: return new; ! 187: } ! 188: ! 189: DBA_OPTIMIZE_FUNC(tcadb) ! 190: { ! 191: TCADB_DATA; ! 192: ! 193: #if _TC_LIBVER >= 811 ! 194: return tcadboptimize(dba->tcadb, NULL) ? SUCCESS : FAILURE; ! 195: #else ! 196: return FAILURE; ! 197: #endif ! 198: } ! 199: ! 200: DBA_SYNC_FUNC(tcadb) ! 201: { ! 202: TCADB_DATA; ! 203: ! 204: return tcadbsync(dba->tcadb) ? SUCCESS : FAILURE; ! 205: } ! 206: ! 207: DBA_INFO_FUNC(tcadb) ! 208: { ! 209: return estrdup(tcversion); ! 210: } ! 211: ! 212: #endif ! 213: ! 214: /* ! 215: * Local variables: ! 216: * tab-width: 4 ! 217: * c-basic-offset: 4 ! 218: * End: ! 219: * vim600: sw=4 ts=4 fdm=marker ! 220: * vim<600: sw=4 ts=4 ! 221: */