felipe Wed Jun 25 14:46:19 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/dbase dbase.c
/php-src/ext/dbase/tests 001.phpt
Log:
- New parameter parsing API
http://cvs.php.net/viewvc.cgi/php-src/ext/dbase/dbase.c?r1=1.74.2.2.2.9.2.2&r2=1.74.2.2.2.9.2.3&diff_format=u
Index: php-src/ext/dbase/dbase.c
diff -u php-src/ext/dbase/dbase.c:1.74.2.2.2.9.2.2
php-src/ext/dbase/dbase.c:1.74.2.2.2.9.2.3
--- php-src/ext/dbase/dbase.c:1.74.2.2.2.9.2.2 Mon Dec 31 07:17:07 2007
+++ php-src/ext/dbase/dbase.c Wed Jun 25 14:46:18 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dbase.c,v 1.74.2.2.2.9.2.2 2007/12/31 07:17:07 sebastian Exp $ */
+/* $Id: dbase.c,v 1.74.2.2.2.9.2.3 2008/06/25 14:46:18 felipe Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -118,41 +118,41 @@
Opens a dBase-format database file */
PHP_FUNCTION(dbase_open)
{
- zval **dbf_name, **options;
+ char *dbf_name;
+ int dbf_name_len;
+ long options;
dbhead_t *dbh;
int handle;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dbf_name,
&options) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &dbf_name,
&dbf_name_len, &options) == FAILURE) {
+ return;
}
- convert_to_string_ex(dbf_name);
- convert_to_long_ex(options);
- if (!Z_STRLEN_PP(dbf_name)) {
+ if (!dbf_name_len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The filename
cannot be empty.");
RETURN_FALSE;
}
- if (Z_LVAL_PP(options) == 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open %s in
write-only mode", Z_STRVAL_PP(dbf_name));
+ if (options == 1) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open %s in
write-only mode", dbf_name);
RETURN_FALSE;
- } else if (Z_LVAL_PP(options) < 0 || Z_LVAL_PP(options) > 3) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid access
mode %ld", Z_LVAL_PP(options));
+ } else if (options < 0 || options > 3) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid access
mode %ld", options);
RETURN_FALSE;
}
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(dbf_name), NULL,
CHECKUID_CHECK_FILE_AND_DIR))) {
+ if (PG(safe_mode) && (!php_checkuid(dbf_name, NULL,
CHECKUID_CHECK_FILE_AND_DIR))) {
RETURN_FALSE;
}
- if (php_check_open_basedir(Z_STRVAL_PP(dbf_name) TSRMLS_CC)) {
+ if (php_check_open_basedir(dbf_name TSRMLS_CC)) {
RETURN_FALSE;
}
- dbh = dbf_open(Z_STRVAL_PP(dbf_name), Z_LVAL_PP(options) TSRMLS_CC);
+ dbh = dbf_open(dbf_name, options TSRMLS_CC);
if (dbh == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to open
database %s", Z_STRVAL_PP(dbf_name));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to open
database %s", dbf_name);
RETURN_FALSE;
}
@@ -165,22 +165,22 @@
Closes an open dBase-format database file */
PHP_FUNCTION(dbase_close)
{
- zval **dbh_id;
+ long dbh_id;
dbhead_t *dbh;
int dbh_type;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) ==
FAILURE)) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dbh_id) ==
FAILURE) {
+ return;
}
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
- zend_list_delete(Z_LVAL_PP(dbh_id));
+ zend_list_delete(dbh_id);
RETURN_TRUE;
}
/* }}} */
@@ -189,18 +189,18 @@
Returns the number of records in the database */
PHP_FUNCTION(dbase_numrecords)
{
- zval **dbh_id;
+ long dbh_id;
dbhead_t *dbh;
int dbh_type;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) ==
FAILURE)) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dbh_id) ==
FAILURE) {
+ return;
}
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
@@ -212,18 +212,18 @@
Returns the number of fields (columns) in the database */
PHP_FUNCTION(dbase_numfields)
{
- zval **dbh_id;
+ long dbh_id;
dbhead_t *dbh;
int dbh_type;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dbh_id) ==
FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dbh_id) ==
FAILURE) {
+ return;
}
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
@@ -235,23 +235,23 @@
Packs the database (deletes records marked for deletion) */
PHP_FUNCTION(dbase_pack)
{
- zval **dbh_id;
+ long dbh_id;
dbhead_t *dbh;
int dbh_type;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dbh_id) ==
FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dbh_id) ==
FAILURE) {
+ return;
}
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
- pack_dbf(dbh);
- put_dbf_info(dbh);
+ pack_dbf(dbh);
+ put_dbf_info(dbh);
RETURN_TRUE;
}
/* }}} */
@@ -260,7 +260,8 @@
Adds a record to the database */
PHP_FUNCTION(dbase_add_record)
{
- zval **dbh_id, **fields, **field;
+ long dbh_id;
+ zval *fields, **field;
dbhead_t *dbh;
int dbh_type;
@@ -270,22 +271,17 @@
int i;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dbh_id, &fields)
== FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- if (Z_TYPE_PP(fields) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as
second parameter");
- RETURN_FALSE;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la", &dbh_id,
&fields) == FAILURE) {
+ return;
}
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
- num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields));
+ num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields));
if (num_fields != dbh->db_nfields) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong number of
fields specified");
@@ -298,7 +294,7 @@
dbf = dbh->db_fields;
for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) {
zval tmp;
- if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void
**)&field) == FAILURE) {
+ if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void
**)&field) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unexpected
error");
efree(cp);
RETURN_FALSE;
@@ -330,7 +326,8 @@
Replaces a record to the database */
PHP_FUNCTION(dbase_replace_record)
{
- zval **dbh_id, **fields, **field, **recnum;
+ long dbh_id, recnum;
+ zval *fields, **field;
dbhead_t *dbh;
int dbh_type;
@@ -340,23 +337,17 @@
int i;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &dbh_id, &fields,
&recnum) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- convert_to_long_ex(recnum);
- if (Z_TYPE_PP(fields) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as
second parameter");
- RETURN_FALSE;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lal", &dbh_id,
&fields, &recnum) == FAILURE) {
+ return;
}
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
- num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields));
+ num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields));
if (num_fields != dbh->db_nfields) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong number of
fields specified");
@@ -368,7 +359,7 @@
dbf = dbh->db_fields;
for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void
**)&field) == FAILURE) {
+ if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void
**)&field) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unexpected
error");
efree(cp);
RETURN_FALSE;
@@ -378,13 +369,13 @@
t_cp += cur_f->db_flen;
}
- if (put_dbf_record(dbh, Z_LVAL_PP(recnum), cp) < 0) {
+ if (put_dbf_record(dbh, recnum, cp) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to put
record at %ld", dbh->db_records);
efree(cp);
RETURN_FALSE;
}
- put_dbf_info(dbh);
+ put_dbf_info(dbh);
efree(cp);
RETURN_TRUE;
@@ -395,33 +386,31 @@
Marks a record to be deleted */
PHP_FUNCTION(dbase_delete_record)
{
- zval **dbh_id, **record;
+ long dbh_id, record;
dbhead_t *dbh;
int dbh_type;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &dbh_id,
&record) == FAILURE)) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &dbh_id,
&record) == FAILURE) {
+ return;
}
- convert_to_long_ex(dbh_id);
- convert_to_long_ex(record);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
- if (del_dbf_record(dbh, Z_LVAL_PP(record)) < 0) {
- if (Z_LVAL_PP(record) > dbh->db_records) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "record %ld
out of bounds", Z_LVAL_PP(record));
+ if (del_dbf_record(dbh, record) < 0) {
+ if (record > dbh->db_records) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "record %ld
out of bounds", record);
} else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to
delete record %ld", Z_LVAL_PP(record));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to
delete record %ld", record);
}
RETURN_FALSE;
}
- put_dbf_info(dbh);
+ put_dbf_info(dbh);
RETURN_TRUE;
}
/* }}} */
@@ -430,7 +419,7 @@
*/
static void php_dbase_get_record(INTERNAL_FUNCTION_PARAMETERS, int assoc)
{
- zval **dbh_id, **record;
+ long dbh_id, record;
dbhead_t *dbh;
int dbh_type;
dbfield_t *dbf, *cur_f;
@@ -440,20 +429,18 @@
int errno_save;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &dbh_id,
&record) == FAILURE)) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &dbh_id,
&record) == FAILURE) {
+ return;
}
- convert_to_long_ex(dbh_id);
- convert_to_long_ex(record);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
+ dbh = zend_list_find(dbh_id, &dbh_type);
if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", Z_LVAL_PP(dbh_id));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find
database for identifier %ld", dbh_id);
RETURN_FALSE;
}
- if ((data = get_dbf_record(dbh, Z_LVAL_PP(record))) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to read bad
record %ld", Z_LVAL_PP(record));
+ if ((data = get_dbf_record(dbh, record)) == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to read bad
record %ld", record);
RETURN_FALSE;
}
@@ -587,39 +574,33 @@
Creates a new dBase-format database file */
PHP_FUNCTION(dbase_create)
{
- zval **filename, **fields, **field, **value;
- int fd;
+ char *filename;
+ zval *fields, **field, **value;
+ int filename_len, fd;
dbhead_t *dbh;
-
int num_fields;
dbfield_t *dbf, *cur_f;
int i, rlen, handle;
DBase_TLS_VARS;
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &filename,
&fields) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (Z_TYPE_PP(fields) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as
second parameter");
- RETURN_FALSE;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa", &filename,
&filename_len, &fields) == FAILURE) {
+ return;
}
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(filename), NULL,
CHECKUID_CHECK_FILE_AND_DIR))) {
+ if (PG(safe_mode) && (!php_checkuid(filename, NULL,
CHECKUID_CHECK_FILE_AND_DIR))) {
RETURN_FALSE;
}
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
+ if (php_check_open_basedir(filename TSRMLS_CC)) {
RETURN_FALSE;
}
- if ((fd = VCWD_OPEN_MODE(Z_STRVAL_PP(filename),
O_BINARY|O_RDWR|O_CREAT, 0644)) < 0) {
+ if ((fd = VCWD_OPEN_MODE(filename, O_BINARY|O_RDWR|O_CREAT, 0644)) < 0)
{
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create
database (%d): %s", errno, strerror(errno));
RETURN_FALSE;
}
- num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields));
+ num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields));
if (num_fields <= 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create
database without fields");
@@ -661,13 +642,13 @@
for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) {
/* look up the first field */
- if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void
**)&field) == FAILURE) {
+ if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void
**)&field) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to
find field %d", i);
free_dbf_head(dbh);
RETURN_FALSE;
}
- if (Z_TYPE_PP (field) != IS_ARRAY) {
+ if (Z_TYPE_PP(field) != IS_ARRAY) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "second
parameter must be array of arrays");
free_dbf_head(dbh);
RETURN_FALSE;
http://cvs.php.net/viewvc.cgi/php-src/ext/dbase/tests/001.phpt?r1=1.1.2.2&r2=1.1.2.2.2.1&diff_format=u
Index: php-src/ext/dbase/tests/001.phpt
diff -u php-src/ext/dbase/tests/001.phpt:1.1.2.2
php-src/ext/dbase/tests/001.phpt:1.1.2.2.2.1
--- php-src/ext/dbase/tests/001.phpt:1.1.2.2 Sun Feb 25 23:17:12 2007
+++ php-src/ext/dbase/tests/001.phpt Wed Jun 25 14:46:19 2008
@@ -55,9 +55,9 @@
Warning: dbase_create(): Unable to create database without fields in %s on
line %d
bool(false)
-Warning: dbase_create(): Expected array as second parameter in %s on line %d
-bool(false)
+Warning: dbase_create() expects parameter 2 to be array, integer given in %s
on line %d
+NULL
-Warning: dbase_create(): Expected array as second parameter in %s on line %d
-bool(false)
+Warning: dbase_create() expects parameter 2 to be array, string given in %s on
line %d
+NULL
Done
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php