@@ -207,33 +207,28 @@ ZEND_GET_MODULE(dba)
207
207
/* {{{ macromania */
208
208
209
209
#define DBA_ID_PARS \
210
- zval ** id; \
210
+ zval *id; \
211
211
dba_info *info = NULL; \
212
212
int ac = ZEND_NUM_ARGS()
213
213
214
214
/* these are used to get the standard arguments */
215
215
216
- #define DBA_GET1 \
217
- if(ac != 1 || zend_get_parameters_ex(ac, &id) != SUCCESS) { \
218
- WRONG_PARAM_COUNT; \
219
- }
220
-
221
216
/* {{{ 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 )
223
218
{
224
- if (Z_TYPE_PP (key ) == IS_ARRAY ) {
219
+ if (Z_TYPE_P (key ) == IS_ARRAY ) {
225
220
zval * * group , * * name ;
226
221
HashPosition pos ;
227
222
size_t len ;
228
223
229
- if (zend_hash_num_elements (Z_ARRVAL_PP (key )) != 2 ) {
224
+ if (zend_hash_num_elements (Z_ARRVAL_P (key )) != 2 ) {
230
225
php_error_docref (NULL TSRMLS_CC , E_RECOVERABLE_ERROR , "Key does not have exactly two elements: (key, name)" );
231
226
return -1 ;
232
227
}
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 );
237
232
convert_to_string_ex (group );
238
233
convert_to_string_ex (name );
239
234
if (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
245
240
* key_free = * key_str ;
246
241
return len ;
247
242
} else {
248
- convert_to_string_ex (key );
249
- * key_str = Z_STRVAL_PP (key );
250
243
* 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 );
252
249
}
253
250
}
254
251
/* }}} */
255
252
256
253
#define DBA_GET2 \
257
- zval ** key; \
254
+ zval *key; \
258
255
char *key_str, *key_free; \
259
256
size_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; \
262
259
} \
263
260
if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\
264
261
RETURN_FALSE; \
265
262
}
266
263
267
264
#define DBA_GET2_3 \
268
- zval ** key; \
265
+ zval *key; \
269
266
char *key_str, *key_free; \
270
267
size_t key_len; \
271
- zval **tmp; \
272
268
int skip = 0; \
273
269
switch(ac) { \
274
270
case 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; \
277
273
} \
278
274
break; \
279
275
case 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; \
282
278
} \
283
- convert_to_long_ex(tmp); \
284
- skip = Z_LVAL_PP(tmp); \
285
279
break; \
286
280
default: \
287
281
WRONG_PARAM_COUNT; \
@@ -290,25 +284,12 @@ static size_t php_dba_make_key(zval **key, char **key_str, char **key_free TSRML
290
284
RETURN_FALSE; \
291
285
}
292
286
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
- }
304
287
305
- #define DBA_ID_GET \
288
+ #define DBA_FETCH_RESOURCE ( info , id ) \
306
289
ZEND_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)
312
293
313
294
#define DBA_ID_DONE \
314
295
if (key_free) efree(key_free)
@@ -566,28 +547,43 @@ PHP_MINFO_FUNCTION(dba)
566
547
static void php_dba_update (INTERNAL_FUNCTION_PARAMETERS , int mode )
567
548
{
568
549
char * 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 );
571
568
572
569
DBA_WRITE_CHECK ;
573
-
570
+
574
571
if (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 ) {
579
575
efree (v );
580
576
DBA_ID_DONE ;
581
577
RETURN_TRUE ;
582
578
}
583
579
efree (v );
584
580
} 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 ) {
587
582
DBA_ID_DONE ;
588
583
RETURN_TRUE ;
589
584
}
590
585
}
586
+
591
587
DBA_ID_DONE ;
592
588
RETURN_FALSE ;
593
589
}
@@ -980,9 +976,16 @@ PHP_FUNCTION(dba_open)
980
976
Closes database */
981
977
PHP_FUNCTION (dba_close )
982
978
{
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 ));
986
989
}
987
990
/* }}} */
988
991
@@ -1081,11 +1084,20 @@ PHP_FUNCTION(dba_firstkey)
1081
1084
{
1082
1085
char * fkey ;
1083
1086
int 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 );
1085
1095
1086
1096
fkey = info -> hnd -> firstkey (info , & len TSRMLS_CC );
1087
- if (fkey )
1097
+
1098
+ if (fkey )
1088
1099
RETURN_STRINGL (fkey , len , 0 );
1100
+
1089
1101
RETURN_FALSE ;
1090
1102
}
1091
1103
/* }}} */
@@ -1096,11 +1108,20 @@ PHP_FUNCTION(dba_nextkey)
1096
1108
{
1097
1109
char * nkey ;
1098
1110
int 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 );
1100
1119
1101
1120
nkey = info -> hnd -> nextkey (info , & len TSRMLS_CC );
1102
- if (nkey )
1121
+
1122
+ if (nkey )
1103
1123
RETURN_STRINGL (nkey , len , 0 );
1124
+
1104
1125
RETURN_FALSE ;
1105
1126
}
1106
1127
/* }}} */
@@ -1146,12 +1167,21 @@ PHP_FUNCTION(dba_replace)
1146
1167
Optimizes (e.g. clean up, vacuum) database */
1147
1168
PHP_FUNCTION (dba_optimize )
1148
1169
{
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
+
1151
1179
DBA_WRITE_CHECK ;
1152
- if (info -> hnd -> optimize (info TSRMLS_CC ) == SUCCESS ) {
1180
+
1181
+ if (info -> hnd -> optimize (info TSRMLS_CC ) == SUCCESS ) {
1153
1182
RETURN_TRUE ;
1154
1183
}
1184
+
1155
1185
RETURN_FALSE ;
1156
1186
}
1157
1187
/* }}} */
@@ -1160,11 +1190,19 @@ PHP_FUNCTION(dba_optimize)
1160
1190
Synchronizes database */
1161
1191
PHP_FUNCTION (dba_sync )
1162
1192
{
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 ) {
1166
1203
RETURN_TRUE ;
1167
1204
}
1205
+
1168
1206
RETURN_FALSE ;
1169
1207
}
1170
1208
/* }}} */
0 commit comments