@@ -207,33 +207,28 @@ ZEND_GET_MODULE(dba)
207207/* {{{ macromania */
208208
209209#define DBA_ID_PARS \
210- zval ** id; \
210+ zval *id; \
211211dba_info *info = NULL; \
212212int ac = ZEND_NUM_ARGS()
213213
214214/* these are used to get the standard arguments */
215215
216- #define DBA_GET1 \
217- if(ac != 1 || zend_get_parameters_ex(ac, &id) != SUCCESS) { \
218- WRONG_PARAM_COUNT; \
219- }
220-
221216/* {{{ php_dba_myke_key */
222- static size_t php_dba_make_key (zval * * key , char * * key_str , char * * key_free TSRMLS_DC )
217+ static size_t php_dba_make_key (zval * key , char * * key_str , char * * key_free TSRMLS_DC )
223218{
224- if (Z_TYPE_PP (key ) == IS_ARRAY ) {
219+ if (Z_TYPE_P (key ) == IS_ARRAY ) {
225220zval * * group , * * name ;
226221HashPosition pos ;
227222size_t len ;
228223
229- if (zend_hash_num_elements (Z_ARRVAL_PP (key )) != 2 ) {
224+ if (zend_hash_num_elements (Z_ARRVAL_P (key )) != 2 ) {
230225php_error_docref (NULL TSRMLS_CC , E_RECOVERABLE_ERROR , "Key does not have exactly two elements: (key, name)" );
231226return -1 ;
232227}
233- zend_hash_internal_pointer_reset_ex (Z_ARRVAL_PP (key ), & pos );
234- zend_hash_get_current_data_ex (Z_ARRVAL_PP (key ), (void * * ) & group , & pos );
235- zend_hash_move_forward_ex (Z_ARRVAL_PP (key ), & pos );
236- zend_hash_get_current_data_ex (Z_ARRVAL_PP (key ), (void * * ) & name , & pos );
228+ zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (key ), & pos );
229+ zend_hash_get_current_data_ex (Z_ARRVAL_P (key ), (void * * ) & group , & pos );
230+ zend_hash_move_forward_ex (Z_ARRVAL_P (key ), & pos );
231+ zend_hash_get_current_data_ex (Z_ARRVAL_P (key ), (void * * ) & name , & pos );
237232convert_to_string_ex (group );
238233convert_to_string_ex (name );
239234if (Z_STRLEN_PP (group ) == 0 ) {
@@ -245,43 +240,42 @@ static size_t php_dba_make_key(zval **key, char **key_str, char **key_free TSRML
245240* key_free = * key_str ;
246241return len ;
247242} else {
248- convert_to_string_ex (key );
249- * key_str = Z_STRVAL_PP (key );
250243* key_free = NULL ;
251- return Z_STRLEN_PP (key );
244+
245+ convert_to_string (key );
246+ * key_str = Z_STRVAL_P (key );
247+
248+ return Z_STRLEN_P (key );
252249}
253250}
254251/* }}} */
255252
256253#define DBA_GET2 \
257- zval ** key; \
254+ zval *key; \
258255char *key_str, *key_free; \
259256size_t key_len; \
260- if( ac != 2 || zend_get_parameters_ex(ac , &key, &id) != SUCCESS ) { \
261- WRONG_PARAM_COUNT; \
257+ if (zend_parse_parameters( ac TSRMLS_CC, "zr" , &key, &id) == FAILURE ) { \
258+ return; \
262259} \
263260if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\
264261RETURN_FALSE; \
265262}
266263
267264#define DBA_GET2_3 \
268- zval ** key; \
265+ zval *key; \
269266char *key_str, *key_free; \
270267size_t key_len; \
271- zval **tmp; \
272268int skip = 0; \
273269switch(ac) { \
274270case 2: \
275- if (zend_get_parameters_ex (ac, &key, &id) != SUCCESS ) { \
276- WRONG_PARAM_COUNT; \
271+ if (zend_parse_parameters (ac TSRMLS_CC, "zr", &key, &id) == FAILURE ) { \
272+ return; \
277273} \
278274break; \
279275case 3: \
280- if (zend_get_parameters_ex (ac, &key, &tmp , &id) != SUCCESS ) { \
281- WRONG_PARAM_COUNT; \
276+ if (zend_parse_parameters (ac TSRMLS_CC, "zlr", &key, &skip , &id) == FAILURE ) { \
277+ return; \
282278} \
283- convert_to_long_ex(tmp); \
284- skip = Z_LVAL_PP(tmp); \
285279break; \
286280default: \
287281WRONG_PARAM_COUNT; \
@@ -290,25 +284,12 @@ static size_t php_dba_make_key(zval **key, char **key_str, char **key_free TSRML
290284RETURN_FALSE; \
291285}
292286
293- #define DBA_GET3 \
294- zval **key, **val; \
295- char *key_str, *key_free; \
296- size_t key_len; \
297- if(ac != 3 || zend_get_parameters_ex(ac, &key, &val, &id) != SUCCESS) { \
298- WRONG_PARAM_COUNT; \
299- } \
300- convert_to_string_ex(val); \
301- if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\
302- RETURN_FALSE; \
303- }
304287
305- #define DBA_ID_GET \
288+ #define DBA_FETCH_RESOURCE ( info , id ) \
306289ZEND_FETCH_RESOURCE2(info, dba_info *, id, -1, "DBA identifier", le_db, le_pdb);
307-
308- #define DBA_ID_GET1 DBA_ID_PARS; DBA_GET1; DBA_ID_GET
309- #define DBA_ID_GET2 DBA_ID_PARS; DBA_GET2; DBA_ID_GET
310- #define DBA_ID_GET2_3 DBA_ID_PARS; DBA_GET2_3; DBA_ID_GET
311- #define DBA_ID_GET3 DBA_ID_PARS; DBA_GET3; DBA_ID_GET
290+
291+ #define DBA_ID_GET2 DBA_ID_PARS; DBA_GET2; DBA_FETCH_RESOURCE(info, &id)
292+ #define DBA_ID_GET2_3 DBA_ID_PARS; DBA_GET2_3; DBA_FETCH_RESOURCE(info, &id)
312293
313294#define DBA_ID_DONE \
314295if (key_free) efree(key_free)
@@ -566,28 +547,43 @@ PHP_MINFO_FUNCTION(dba)
566547static void php_dba_update (INTERNAL_FUNCTION_PARAMETERS , int mode )
567548{
568549char * v ;
569- int len ;
570- DBA_ID_GET3 ;
550+ int val_len ;
551+ zval * id ;
552+ dba_info * info = NULL ;
553+ int ac = ZEND_NUM_ARGS ();
554+ zval * key ;
555+ char * val ;
556+ char * key_str , * key_free ;
557+ size_t key_len ;
558+
559+ if (zend_parse_parameters (ac TSRMLS_CC , "zsr" , & key , & val , & val_len , & id ) == FAILURE ) {
560+ return ;
561+ }
562+
563+ if ((key_len = php_dba_make_key (key , & key_str , & key_free TSRMLS_CC )) == 0 ) {
564+ RETURN_FALSE ;
565+ }
566+
567+ DBA_FETCH_RESOURCE (info , & id );
571568
572569DBA_WRITE_CHECK ;
573-
570+
574571if (PG (magic_quotes_runtime )) {
575- len = Z_STRLEN_PP (val );
576- v = estrndup (Z_STRVAL_PP (val ), len );
577- php_stripslashes (v , & len TSRMLS_CC );
578- if (info -> hnd -> update (info , key_str , key_len , v , len , mode TSRMLS_CC ) == SUCCESS ) {
572+ v = estrndup (val , val_len );
573+ php_stripslashes (v , & val_len TSRMLS_CC );
574+ if (info -> hnd -> update (info , key_str , key_len , v , val_len , mode TSRMLS_CC ) == SUCCESS ) {
579575efree (v );
580576DBA_ID_DONE ;
581577RETURN_TRUE ;
582578}
583579efree (v );
584580} else {
585- if (info -> hnd -> update (info , key_str , key_len , VALLEN (val ), mode TSRMLS_CC ) == SUCCESS )
586- {
581+ if (info -> hnd -> update (info , key_str , key_len , val , val_len , mode TSRMLS_CC ) == SUCCESS ) {
587582DBA_ID_DONE ;
588583RETURN_TRUE ;
589584}
590585}
586+
591587DBA_ID_DONE ;
592588RETURN_FALSE ;
593589}
@@ -980,9 +976,16 @@ PHP_FUNCTION(dba_open)
980976 Closes database */
981977PHP_FUNCTION (dba_close )
982978{
983- DBA_ID_GET1 ;
984-
985- zend_list_delete (Z_RESVAL_PP (id ));
979+ zval * id ;
980+ dba_info * info = NULL ;
981+
982+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "r" , & id ) == FAILURE ) {
983+ return ;
984+ }
985+
986+ DBA_FETCH_RESOURCE (info , & id );
987+
988+ zend_list_delete (Z_RESVAL_P (id ));
986989}
987990/* }}} */
988991
@@ -1081,11 +1084,20 @@ PHP_FUNCTION(dba_firstkey)
10811084{
10821085char * fkey ;
10831086int len ;
1084- DBA_ID_GET1 ;
1087+ zval * id ;
1088+ dba_info * info = NULL ;
1089+
1090+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "r" , & id ) == FAILURE ) {
1091+ return ;
1092+ }
1093+
1094+ DBA_FETCH_RESOURCE (info , & id );
10851095
10861096fkey = info -> hnd -> firstkey (info , & len TSRMLS_CC );
1087- if (fkey )
1097+
1098+ if (fkey )
10881099RETURN_STRINGL (fkey , len , 0 );
1100+
10891101RETURN_FALSE ;
10901102}
10911103/* }}} */
@@ -1096,11 +1108,20 @@ PHP_FUNCTION(dba_nextkey)
10961108{
10971109char * nkey ;
10981110int len ;
1099- DBA_ID_GET1 ;
1111+ zval * id ;
1112+ dba_info * info = NULL ;
1113+
1114+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "r" , & id ) == FAILURE ) {
1115+ return ;
1116+ }
1117+
1118+ DBA_FETCH_RESOURCE (info , & id );
11001119
11011120nkey = info -> hnd -> nextkey (info , & len TSRMLS_CC );
1102- if (nkey )
1121+
1122+ if (nkey )
11031123RETURN_STRINGL (nkey , len , 0 );
1124+
11041125RETURN_FALSE ;
11051126}
11061127/* }}} */
@@ -1146,12 +1167,21 @@ PHP_FUNCTION(dba_replace)
11461167 Optimizes (e.g. clean up, vacuum) database */
11471168PHP_FUNCTION (dba_optimize )
11481169{
1149- DBA_ID_GET1 ;
1150-
1170+ zval * id ;
1171+ dba_info * info = NULL ;
1172+
1173+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "r" , & id ) == FAILURE ) {
1174+ return ;
1175+ }
1176+
1177+ DBA_FETCH_RESOURCE (info , & id );
1178+
11511179DBA_WRITE_CHECK ;
1152- if (info -> hnd -> optimize (info TSRMLS_CC ) == SUCCESS ) {
1180+
1181+ if (info -> hnd -> optimize (info TSRMLS_CC ) == SUCCESS ) {
11531182RETURN_TRUE ;
11541183}
1184+
11551185RETURN_FALSE ;
11561186}
11571187/* }}} */
@@ -1160,11 +1190,19 @@ PHP_FUNCTION(dba_optimize)
11601190 Synchronizes database */
11611191PHP_FUNCTION (dba_sync )
11621192{
1163- DBA_ID_GET1 ;
1164-
1165- if (info -> hnd -> sync (info TSRMLS_CC ) == SUCCESS ) {
1193+ zval * id ;
1194+ dba_info * info = NULL ;
1195+
1196+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "r" , & id ) == FAILURE ) {
1197+ return ;
1198+ }
1199+
1200+ DBA_FETCH_RESOURCE (info , & id );
1201+
1202+ if (info -> hnd -> sync (info TSRMLS_CC ) == SUCCESS ) {
11661203RETURN_TRUE ;
11671204}
1205+
11681206RETURN_FALSE ;
11691207}
11701208/* }}} */
0 commit comments