File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / dba / dba_inifile.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:34:37 2012 UTC (12 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_17p0, HEAD
php 5.4.3+patches

    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,v 1.1.1.2 2012/05/29 12:34:37 misho Exp $ */
   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:  */

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