Return to dba_inifile.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_inifile.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_INIFILE ! 28: #include "php_inifile.h" ! 29: ! 30: #include "libinifile/inifile.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 INIFILE_DATA \ ! 40: inifile *dba = info->dbf ! 41: ! 42: #define INIFILE_GKEY \ ! 43: key_type ini_key; \ ! 44: if (!key) { \ ! 45: php_error_docref(NULL TSRMLS_CC, E_WARNING, "No key specified"); \ ! 46: return 0; \ ! 47: } \ ! 48: ini_key = inifile_key_split((char*)key) /* keylen not needed here */ ! 49: ! 50: #define INIFILE_DONE \ ! 51: inifile_key_free(&ini_key) ! 52: ! 53: DBA_OPEN_FUNC(inifile) ! 54: { ! 55: info->dbf = inifile_alloc(info->fp, info->mode == DBA_READER, info->flags&DBA_PERSISTENT TSRMLS_CC); ! 56: ! 57: return info->dbf ? SUCCESS : FAILURE; ! 58: } ! 59: ! 60: DBA_CLOSE_FUNC(inifile) ! 61: { ! 62: INIFILE_DATA; ! 63: ! 64: inifile_free(dba, info->flags&DBA_PERSISTENT); ! 65: } ! 66: ! 67: DBA_FETCH_FUNC(inifile) ! 68: { ! 69: val_type ini_val; ! 70: ! 71: INIFILE_DATA; ! 72: INIFILE_GKEY; ! 73: ! 74: ini_val = inifile_fetch(dba, &ini_key, skip TSRMLS_CC); ! 75: *newlen = ini_val.value ? strlen(ini_val.value) : 0; ! 76: INIFILE_DONE; ! 77: return ini_val.value; ! 78: } ! 79: ! 80: DBA_UPDATE_FUNC(inifile) ! 81: { ! 82: val_type ini_val; ! 83: int res; ! 84: ! 85: INIFILE_DATA; ! 86: INIFILE_GKEY; ! 87: ! 88: ini_val.value = val; ! 89: ! 90: if (mode == 1) { ! 91: res = inifile_append(dba, &ini_key, &ini_val TSRMLS_CC); ! 92: } else { ! 93: res = inifile_replace(dba, &ini_key, &ini_val TSRMLS_CC); ! 94: } ! 95: INIFILE_DONE; ! 96: switch(res) { ! 97: case -1: ! 98: php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible"); ! 99: return FAILURE; ! 100: default: ! 101: case 0: ! 102: return SUCCESS; ! 103: case 1: ! 104: php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists"); ! 105: return FAILURE; ! 106: } ! 107: } ! 108: ! 109: DBA_EXISTS_FUNC(inifile) ! 110: { ! 111: val_type ini_val; ! 112: ! 113: INIFILE_DATA; ! 114: INIFILE_GKEY; ! 115: ! 116: ini_val = inifile_fetch(dba, &ini_key, 0 TSRMLS_CC); ! 117: INIFILE_DONE; ! 118: if (ini_val.value) { ! 119: inifile_val_free(&ini_val); ! 120: return SUCCESS; ! 121: } ! 122: return FAILURE; ! 123: } ! 124: ! 125: DBA_DELETE_FUNC(inifile) ! 126: { ! 127: int res; ! 128: ! 129: INIFILE_DATA; ! 130: INIFILE_GKEY; ! 131: ! 132: res = inifile_delete(dba, &ini_key TSRMLS_CC); ! 133: ! 134: INIFILE_DONE; ! 135: return (res == -1 ? FAILURE : SUCCESS); ! 136: } ! 137: ! 138: DBA_FIRSTKEY_FUNC(inifile) ! 139: { ! 140: INIFILE_DATA; ! 141: ! 142: if (inifile_firstkey(dba TSRMLS_CC)) { ! 143: char *result = inifile_key_string(&dba->curr.key); ! 144: *newlen = strlen(result); ! 145: return result; ! 146: } else { ! 147: return NULL; ! 148: } ! 149: } ! 150: ! 151: DBA_NEXTKEY_FUNC(inifile) ! 152: { ! 153: INIFILE_DATA; ! 154: ! 155: if (!dba->curr.key.group && !dba->curr.key.name) { ! 156: return NULL; ! 157: } ! 158: ! 159: if (inifile_nextkey(dba TSRMLS_CC)) { ! 160: char *result = inifile_key_string(&dba->curr.key); ! 161: *newlen = strlen(result); ! 162: return result; ! 163: } else { ! 164: return NULL; ! 165: } ! 166: } ! 167: ! 168: DBA_OPTIMIZE_FUNC(inifile) ! 169: { ! 170: /* dummy */ ! 171: return SUCCESS; ! 172: } ! 173: ! 174: DBA_SYNC_FUNC(inifile) ! 175: { ! 176: /* dummy */ ! 177: return SUCCESS; ! 178: } ! 179: ! 180: DBA_INFO_FUNC(inifile) ! 181: { ! 182: return estrdup(inifile_version()); ! 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: */