diff options
author | Jouni Ahto <jah@php.net> | 2000-04-18 02:52:45 +0000 |
---|---|---|
committer | Jouni Ahto <jah@php.net> | 2000-04-18 02:52:45 +0000 |
commit | 1dc32c2d5223504e00c2e4951be7a844cb337c48 (patch) | |
tree | e7e7c344186aab736462bbb9d92a08fdaa610d6c | |
parent | ae6b0ea03fe9f29a48d372ad683ce06997485612 (diff) | |
download | php-git-1dc32c2d5223504e00c2e4951be7a844cb337c48.tar.gz |
# Reaching alpha status with this module...
-rw-r--r-- | ext/interbase/interbase.c | 406 | ||||
-rw-r--r-- | ext/interbase/php_interbase.h | 2 |
2 files changed, 231 insertions, 177 deletions
diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c index 4d05a5bf27..83ee02a4a4 100644 --- a/ext/interbase/interbase.c +++ b/ext/interbase/interbase.c @@ -53,6 +53,8 @@ A lot... */ #include "head.h" */ +#define SAFE_STRING(s) ((s)?(s):"") + /* {{{ extension definition structures */ function_entry ibase_functions[] = { PHP_FE(ibase_connect, NULL) @@ -82,11 +84,7 @@ function_entry ibase_functions[] = { PHP_FE(ibase_blob_open, NULL) PHP_FE(ibase_blob_get, NULL) PHP_FE(ibase_blob_echo, NULL) -#ifndef PHP_WIN32 -#if 0 PHP_FE(ibase_blob_import, NULL) -#endif -#endif PHP_FE(ibase_errmsg, NULL) {NULL, NULL, NULL} }; @@ -98,7 +96,7 @@ zend_module_entry ibase_module_entry = PHP_MINIT(ibase), PHP_MSHUTDOWN(ibase), PHP_RINIT(ibase), - PHP_MSHUTDOWN(ibase), + PHP_RSHUTDOWN(ibase), PHP_MINFO(ibase), STANDARD_MODULE_PROPERTIES }; @@ -148,8 +146,8 @@ PHP_IBASE_API php_ibase_globals ibase_globals; _php_ibase_module_error("%d is not link or transaction index",link_id); \ RETURN_FALSE; \ }} - - + + /* get query */ #define GET_QUERY(query_id, ib_query) { \ int type; \ @@ -160,6 +158,7 @@ PHP_IBASE_API php_ibase_globals ibase_globals; }} /* get result */ +/* #define GET_RESULT(result_id, ib_result) { \ int type; \ ib_result = (ibase_result *) zend_list_find(result_id, &type); \ @@ -167,7 +166,7 @@ PHP_IBASE_API php_ibase_globals ibase_globals; _php_ibase_module_error("%d is not result index",result_id); \ RETURN_FALSE; \ }} - +*/ #define RESET_ERRMSG { IBG(errmsg)[0] = '\0';} @@ -243,7 +242,7 @@ PHP_FUNCTION(ibase_errmsg) char *errmsg = IBG(errmsg); IBLS_FETCH(); - if(errmsg[0]){ + if (errmsg[0]) { RETURN_STRING(errmsg,1); } RETURN_FALSE; @@ -259,7 +258,7 @@ static void _php_ibase_error(void) ISC_STATUS *statusp = IB_STATUS; s = errmsg; - while((s - errmsg) < MAX_ERRMSG - (IBASE_MSGSIZE + 2) && isc_interprete(s, &statusp)){ + while ((s - errmsg) < MAX_ERRMSG - (IBASE_MSGSIZE + 2) && isc_interprete(s, &statusp)) { strcat(errmsg, " "); s = errmsg + strlen(errmsg); } @@ -269,7 +268,7 @@ static void _php_ibase_error(void) /* {{{ _php_ibase_module_error() - print php interbase module error and save it for ibase_errmsg() */ + print php interbase module error and save it for ibase_errmsg() */ static void _php_ibase_module_error(char *msg, ...) { char *errmsg = IBG(errmsg); @@ -296,7 +295,7 @@ static void _php_ibase_free_xsqlda(XSQLDA *sqlda) int i; XSQLVAR *var; - if(sqlda){ + if (sqlda) { var = sqlda->sqlvar; for (i = 0; i < sqlda->sqld; i++, var++) { efree(var->sqldata); @@ -361,11 +360,11 @@ static void _php_ibase_free_result(ibase_result *ib_result) if (ib_result){ _php_ibase_free_xsqlda(ib_result->out_sqlda); if (ib_result->drop_stmt && ib_result->stmt) { - if(isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_drop)){ + if (isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_drop)) { _php_ibase_error(); } } else { - if(isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_close)){ + if (isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_close)) { _php_ibase_error(); } } @@ -382,7 +381,7 @@ static void _php_ibase_free_result(ibase_result *ib_result) static void _php_ibase_free_query(ibase_query *ib_query) { - if(ib_query){ + if (ib_query) { if (ib_query->in_sqlda) { efree(ib_query->in_sqlda); } @@ -421,10 +420,18 @@ static void _php_ibase_free_blob(ibase_blob_handle *ib_blob) /* {{{ startup, shutdown and info functions */ +PHP_INI_BEGIN() + STD_PHP_INI_BOOLEAN("ibase.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, php_ibase_globals, ibase_globals) + STD_PHP_INI_ENTRY_EX("ibase.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, php_ibase_globals, ibase_globals, display_link_numbers) + STD_PHP_INI_ENTRY_EX("ibase.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, php_ibase_globals, ibase_globals, display_link_numbers) + STD_PHP_INI_ENTRY("ibase.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, php_ibase_globals, ibase_globals) + STD_PHP_INI_ENTRY("ibase.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, php_ibase_globals, ibase_globals) +PHP_INI_END() + PHP_MINIT_FUNCTION(ibase) { IBLS_FETCH(); - + /* if (cfg_get_long("ibase.allow_persistent", &IBG(allow_persistent)) == FAILURE) { IBG(allow_persistent) = 1; } @@ -442,14 +449,17 @@ PHP_MINIT_FUNCTION(ibase) || IBG(default_password)[0] == 0) { IBG(default_password) = ""; } + */ if (cfg_get_string("ibase.timeformat", &IBG(timeformat)) == FAILURE) { IBG(cfg_timeformat) = "%m/%d/%Y %H:%M:%S"; } - IBG(timeformat) = NULL; IBG(errmsg) = NULL; IBG(num_persistent) = 0; + + REGISTER_INI_ENTRIES(); + IBG(le_result) = register_list_destructors(_php_ibase_free_result, NULL); IBG(le_query) = register_list_destructors(_php_ibase_free_query, NULL); IBG(le_blob) = register_list_destructors(_php_ibase_free_blob, NULL); @@ -460,7 +470,7 @@ PHP_MINIT_FUNCTION(ibase) REGISTER_LONG_CONSTANT("IBASE_TEXT", PHP_IBASE_TEXT, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_TIMESTAMP", PHP_IBASE_TIMESTAMP, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_READ", PHP_IBASE_READ, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("IBASE_COMMITED", PHP_IBASE_COMMITTED, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_COMMITTED", PHP_IBASE_COMMITTED, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_CONSISTENCY", PHP_IBASE_CONSISTENCY, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_NOWAIT", PHP_IBASE_NOWAIT, CONST_PERSISTENT); @@ -472,14 +482,14 @@ PHP_RINIT_FUNCTION(ibase) { IBLS_FETCH(); - IBG(default_link)= -1; + IBG(default_link)= -1; IBG(num_links) = IBG(num_persistent); - if(IBG(timeformat)) + if (IBG(timeformat)) DL_FREE(IBG(timeformat)); IBG(timeformat) = DL_STRDUP(IBG(cfg_timeformat)); - if(IBG(errmsg)) + if (IBG(errmsg)) DL_FREE(IBG(errmsg)); IBG(errmsg) = DL_MALLOC(sizeof(char)*MAX_ERRMSG+1); @@ -489,6 +499,7 @@ PHP_RINIT_FUNCTION(ibase) PHP_MSHUTDOWN_FUNCTION(ibase) { + UNREGISTER_INI_ENTRIES(); return SUCCESS; } @@ -497,11 +508,11 @@ PHP_RSHUTDOWN_FUNCTION(ibase) { IBLS_FETCH(); - if(IBG(timeformat)) + if (IBG(timeformat)) DL_FREE(IBG(timeformat)); - IBG(timeformat) = NULL; + IBG(timeformat) = NULL; - if(IBG(errmsg)) + if (IBG(errmsg)) DL_FREE(IBG(errmsg)); IBG(errmsg) = NULL; @@ -511,9 +522,7 @@ PHP_RSHUTDOWN_FUNCTION(ibase) PHP_MINFO_FUNCTION(ibase) { - char tmp[32]; - IBLS_FETCH(); php_info_print_table_start(); @@ -612,13 +621,14 @@ static int _php_ibase_attach_db(char *server, char *uname, char *passwd, char *c static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) { pval **args; - char *ib_server = NULL, *ib_uname, *ib_passwd, *ib_charset = NULL; + char *ib_server = NULL, *ib_uname, *ib_passwd, *ib_charset = NULL, *ib_role = NULL; int i, ib_uname_len, ib_passwd_len; isc_db_handle db_handle = NULL; char *hashed_details; int hashed_details_length = 0; ibase_db_link *ib_link; IBLS_FETCH(); + PLS_FETCH(); RESET_ERRMSG; @@ -638,6 +648,11 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } switch(ARG_COUNT(ht)) { + case 5: + convert_to_string(args[4]); + ib_role = args[4]->value.str.val; + hashed_details_length += args[4]->value.str.len; + /* fallout */ case 4: convert_to_string(args[3]); ib_charset = args[3]->value.str.val; @@ -657,12 +672,12 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) convert_to_string(args[0]); ib_server = args[0]->value.str.val; hashed_details_length += args[0]->value.str.len; - }/* case */ + } /* case */ efree(args); - hashed_details = (char *) emalloc(hashed_details_length+strlen("ibase_%s_%s_%s_%s")+1); - sprintf(hashed_details, "ibase_%s_%s_%s_%s", ib_server, ib_uname, ib_passwd, ib_charset); + hashed_details = (char *) emalloc(hashed_details_length+strlen("ibase_%s_%s_%s_%s_%s")+1); + sprintf(hashed_details, "ibase_%s_%s_%s_%s_%s", SAFE_STRING(ib_server), SAFE_STRING(ib_uname), SAFE_STRING(ib_passwd), SAFE_STRING(ib_charset), SAFE_STRING(ib_role)); if (persistent) { list_entry *le; @@ -683,14 +698,14 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) /* create the ib_link */ - if (_php_ibase_attach_db(ib_server, ib_uname, ib_passwd, ib_charset, 0, NULL, &db_handle) == FAILURE) { + if (_php_ibase_attach_db(ib_server, ib_uname, ib_passwd, ib_charset, 0, ib_role, &db_handle) == FAILURE) { efree(hashed_details); RETURN_FALSE; } ib_link = (ibase_db_link *) malloc(sizeof(ibase_db_link)); ib_link->link = db_handle; - for(i = 0; i < IBASE_TRANS_ON_LINK; i++) + for (i = 0; i < IBASE_TRANS_ON_LINK; i++) ib_link->trans[i] = NULL; /* hash it up */ @@ -712,7 +727,7 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } return_value->value.lval = IBASE_TRANS_ON_LINK * zend_list_insert(ib_link, IBG(le_plink)); - return_value->type = IS_LONG; + return_value->type = IS_RESOURCE; } else { list_entry *index_ptr, new_index_ptr; @@ -730,8 +745,9 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) xlink = (int) index_ptr->ptr; ptr = zend_list_find(xlink, &type); /* check if the xlink is still there */ if (ptr && (type==IBG(le_link) || type==IBG(le_plink))) { + zend_list_addref(xlink); return_value->value.lval = IBG(default_link) = xlink; - return_value->type = IS_LONG; + return_value->type = IS_RESOURCE; efree(hashed_details); return; } else { @@ -745,20 +761,20 @@ static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } /* create the ib_link */ - if (_php_ibase_attach_db(ib_server, ib_uname, ib_passwd, ib_charset, 0, NULL, &db_handle) == FAILURE) { + if (_php_ibase_attach_db(ib_server, ib_uname, ib_passwd, ib_charset, 0, ib_role, &db_handle) == FAILURE) { efree(hashed_details); RETURN_FALSE; } ib_link = (ibase_db_link *) emalloc(sizeof(ibase_db_link)); ib_link->link = db_handle; - for(i = 0; i < IBASE_TRANS_ON_LINK; i++) + for (i = 0; i < IBASE_TRANS_ON_LINK; i++) ib_link->trans[i] = NULL; /* add it to the list */ return_value->value.lval = IBASE_TRANS_ON_LINK * zend_list_insert(ib_link, IBG(le_link)); - return_value->type = IS_LONG; + return_value->type = IS_RESOURCE; /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; @@ -820,9 +836,8 @@ PHP_FUNCTION(ibase_close) WRONG_PARAM_COUNT; break; } - + GET_LINK_TRANS(link_id, ib_link, trans_n); - zend_list_delete(link_id); RETURN_TRUE; } @@ -842,19 +857,19 @@ static int _php_ibase_alloc_array(ibase_array **ib_arrayp, int *array_cntp, ar_cnt = 0; /* find arrays */ var = sqlda->sqlvar; - for(i = 0; i < sqlda->sqld; i++, var++){ - if((var->sqltype & ~1) == SQL_ARRAY) + for (i = 0; i < sqlda->sqld; i++, var++) { + if ((var->sqltype & ~1) == SQL_ARRAY) ar_cnt++; } - if(ar_cnt){ /* have arrays ? */ + if (ar_cnt) { /* have arrays ? */ *array_cntp = ar_cnt; IB_ARRAY = emalloc(sizeof(ibase_array)*ar_cnt); ar_cnt = 0; var = sqlda->sqlvar; - for(i = 0; i < sqlda->sqld; i++, var++){ - if((var->sqltype & ~1) == SQL_ARRAY){ + for (i = 0; i < sqlda->sqld; i++, var++) { + if ((var->sqltype & ~1) == SQL_ARRAY) { ISC_ARRAY_DESC *ar_desc = &IB_ARRAY[ar_cnt].ar_desc; @@ -900,11 +915,11 @@ static int _php_ibase_alloc_array(ibase_array **ib_arrayp, int *array_cntp, break; default: _php_ibase_module_error("unexpected array type %d in relation '%s' column '%s')", - ar_desc->array_desc_dtype,var->relname, var->sqlname); + ar_desc->array_desc_dtype,var->relname, var->sqlname); efree(IB_ARRAY); IB_ARRAY = NULL; return FAILURE; - }/* switch array_desc_type */ + } /* switch array_desc_type */ ar_length = 0; /* calculate elements count */ for (dim = 0; dim < ar_desc->array_desc_dimensions; dim++) { @@ -915,9 +930,9 @@ static int _php_ibase_alloc_array(ibase_array **ib_arrayp, int *array_cntp, ar_cnt++; - }/* if SQL_ARRAY */ - }/* for column */ - }/* if array_cnt */ + } /* if SQL_ARRAY */ + } /* for column */ + } /* if array_cnt */ return SUCCESS; #undef IB_ARRAY @@ -989,22 +1004,22 @@ static int _php_ibase_alloc_query(ibase_query **ib_queryp, isc_db_handle link, i /* allocate arrays... */ if (_php_ibase_alloc_array(&IB_QUERY->in_array, &IB_QUERY->in_array_cnt, - IB_QUERY->in_sqlda, link, trans) == FAILURE){ + IB_QUERY->in_sqlda, link, trans) == FAILURE) { goto _php_ibase_alloc_query_error; /* error report already done */ } if (_php_ibase_alloc_array(&IB_QUERY->out_array, &IB_QUERY->out_array_cnt, - IB_QUERY->out_sqlda, link, trans) == FAILURE){ + IB_QUERY->out_sqlda, link, trans) == FAILURE) { goto _php_ibase_alloc_query_error; } /* no, haven't placeholders at all */ - if(IB_QUERY->in_sqlda->sqld == 0){ + if (IB_QUERY->in_sqlda->sqld == 0) { efree(IB_QUERY->in_sqlda); IB_QUERY->in_sqlda = NULL; } - if(IB_QUERY->out_sqlda->sqld == 0){ + if (IB_QUERY->out_sqlda->sqld == 0) { efree(IB_QUERY->out_sqlda); IB_QUERY->out_sqlda = NULL; } @@ -1038,7 +1053,7 @@ static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf) var = sqlda->sqlvar; - for(i = 0; i < sqlda->sqld; var++, i++) { /* binded vars */ + for (i = 0; i < sqlda->sqld; var++, i++) { /* binded vars */ buf[i].sqlind = 0; var->sqlind = &buf[i].sqlind; @@ -1054,7 +1069,7 @@ static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf) break; case SQL_SHORT: convert_to_long(b_var); - if(b_var->value.lval > SHRT_MAX || b_var->value.lval < SHRT_MIN){ + if (b_var->value.lval > SHRT_MAX || b_var->value.lval < SHRT_MIN) { _php_ibase_module_error("field %*s overflow", var->aliasname_length, var->aliasname); return FAILURE; } @@ -1106,9 +1121,9 @@ static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf) case SQL_BLOB: { ibase_blob_handle *ib_blob_id; - if(b_var->type != IS_STRING - || b_var->value.str.len != sizeof(ibase_blob_handle) - || ((ibase_blob_handle *)(b_var->value.str.val))->bl_handle != 0){ + if (b_var->type != IS_STRING + || b_var->value.str.len != sizeof(ibase_blob_handle) + || ((ibase_blob_handle *)(b_var->value.str.val))->bl_handle != 0) { _php_ibase_module_error("invalid blob id string"); return FAILURE; } @@ -1121,8 +1136,8 @@ static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf) _php_ibase_module_error("binding arrays not supported yet"); return FAILURE; break; - }/*switch*/ - }/*for*/ + } /*switch*/ + } /*for*/ return SUCCESS; } /* }}} */ @@ -1206,9 +1221,9 @@ static int _php_ibase_exec(ibase_result **ib_resultp, ibase_query *ib_query, int goto _php_ibase_exec_error; /* yes mommy, goto! */ } in_sqlda = emalloc(XSQLDA_LENGTH(ib_query->in_sqlda->sqld)); - memcpy(in_sqlda,ib_query->in_sqlda,XSQLDA_LENGTH(ib_query->in_sqlda->sqld)); + memcpy(in_sqlda, ib_query->in_sqlda, XSQLDA_LENGTH(ib_query->in_sqlda->sqld)); bind_buf = emalloc(sizeof(BIND_BUF) * ib_query->in_sqlda->sqld); - if(_php_ibase_bind(in_sqlda, args, bind_buf) == FAILURE){ + if (_php_ibase_bind(in_sqlda, args, bind_buf) == FAILURE) { goto _php_ibase_exec_error; } } @@ -1293,23 +1308,23 @@ PHP_FUNCTION(ibase_trans) GET_LINK_TRANS(link_id, ib_link, trans_n); - if (trans_argl ){ + if (trans_argl ) { tpb[tpb_len++] = isc_tpb_version3; tpbp = tpb; /* access mode */ - if(trans_argl & PHP_IBASE_READ) /* READ ONLY TRANSACTION */ + if (trans_argl & PHP_IBASE_READ) /* READ ONLY TRANSACTION */ tpb[tpb_len++] = isc_tpb_read; else tpb[tpb_len++] = isc_tpb_write; /* isolation level */ - if(trans_argl & PHP_IBASE_COMMITTED){ + if (trans_argl & PHP_IBASE_COMMITTED) { tpb[tpb_len++] = isc_tpb_read_committed; - }else if (trans_argl & PHP_IBASE_CONSISTENCY) + } else if (trans_argl & PHP_IBASE_CONSISTENCY) tpb[tpb_len++] = isc_tpb_consistency; else tpb[tpb_len++] = isc_tpb_concurrency; /* lock resolution */ - if(trans_argl & PHP_IBASE_NOWAIT) + if (trans_argl & PHP_IBASE_NOWAIT) tpb[tpb_len++] = isc_tpb_nowait; else tpb[tpb_len++] = isc_tpb_wait; @@ -1433,7 +1448,7 @@ PHP_FUNCTION(ibase_query) RESET_ERRMSG; - if(ARG_COUNT(ht) < 1){ + if (ARG_COUNT(ht) < 1) { WRONG_PARAM_COUNT; } @@ -1473,7 +1488,7 @@ PHP_FUNCTION(ibase_query) RETURN_FALSE; } - if (_php_ibase_alloc_query(&ib_query, ib_link->link, ib_link->trans[trans_n], query) == FAILURE) { + if (_php_ibase_alloc_query(&ib_query, ib_link->link, ib_link->trans[trans_n], query) == FAILURE) { efree(args); RETURN_FALSE; } @@ -1490,7 +1505,10 @@ PHP_FUNCTION(ibase_query) ib_result->drop_stmt = 1; /* drop stmt when free result */ ib_query->stmt = NULL; /* keep stmt when free query */ _php_ibase_free_query(ib_query); + /* RETURN_LONG(zend_list_insert(ib_result, IBG(le_result))); + */ + ZEND_REGISTER_RESOURCE(return_value, ib_result, IBG(le_result)); } else { _php_ibase_free_query(ib_query); RETURN_TRUE; @@ -1514,9 +1532,13 @@ static int _php_ibase_var_pval(pval *val, void *data, int type, int len, int sca val->value.str.val = (char *)emalloc(sizeof(char)*(len+1)); strncpy(val->value.str.val, data, len); if (PG(magic_quotes_runtime)) { + /* char *tmp = val->value.str.val; + */ val->value.str.val = php_addslashes(val->value.str.val, len, &len, 0); + /* efree(tmp); + */ } val->type = IS_STRING; val->value.str.len = len; @@ -1531,7 +1553,7 @@ static int _php_ibase_var_pval(pval *val, void *data, int type, int len, int sca val->type = IS_STRING; val->value.str.len = sprintf(string_data, "%.*f", -scale, n / f); val->value.str.val = estrdup(string_data); - }else{ + } else { val->type = IS_LONG; val->value.lval = *(long *)(data); } @@ -1549,7 +1571,10 @@ static int _php_ibase_var_pval(pval *val, void *data, int type, int len, int sca val->type = IS_STRING; val->value.str.len = sprintf(string_data, "%.*f", -scale, *(double *)data); val->value.str.val = estrdup(string_data); - }else{ + /* + val->value.str.val = string_data; + */ + } else { val->type = IS_DOUBLE; val->value.dval = *(double *)data; } @@ -1578,12 +1603,15 @@ static int _php_ibase_var_pval(pval *val, void *data, int type, int len, int sca t.tm_mon+1, t.tm_mday, t.tm_year+1900, t.tm_hour, t.tm_min, t.tm_sec); #endif val->value.str.val = estrdup(string_data); + /* + val->value.str.val = string_data; + */ break; } } default: return FAILURE; - }/* switch (type) */ + } /* switch (type) */ return SUCCESS; } /* }}} */ @@ -1597,7 +1625,7 @@ static int _php_ibase_arr_pval(pval *ar_pval, char **datap, ibase_array *ib_arra int i, dim_len, l_bound, u_bound; - if (dim > 16){ /* InterBase limit */ + if (dim > 16) { /* InterBase limit */ _php_ibase_module_error("php module internal error in %s %d",__FILE__,__LINE__); return FAILURE; } @@ -1613,7 +1641,7 @@ static int _php_ibase_arr_pval(pval *ar_pval, char **datap, ibase_array *ib_arra return FAILURE; } } - }else{ /* data at last */ + } else { /* data at last */ array_init(ar_pval); @@ -1642,7 +1670,7 @@ static int _php_ibase_arr_pval(pval *ar_pval, char **datap, ibase_array *ib_arra static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) { - pval *result_arg, *flag_arg; + zval **result_arg, **flag_arg; long flag = 0; int i, arr_cnt; ibase_result *ib_result; @@ -1653,26 +1681,29 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) switch(ARG_COUNT(ht)) { case 1: - if (ARG_COUNT(ht)==1 && getParameters(ht, 1, &result_arg)==FAILURE) { + if (ARG_COUNT(ht)==1 && zend_get_parameters_ex(1, &result_arg)==FAILURE) { RETURN_FALSE; } break; case 2: - if (ARG_COUNT(ht)==2 && getParameters(ht, 2, &result_arg, &flag_arg)==FAILURE) { + if (ARG_COUNT(ht)==2 && zend_get_parameters_ex(2, &result_arg, &flag_arg)==FAILURE) { RETURN_FALSE; } - convert_to_long(flag_arg); - flag = flag_arg->value.lval; + convert_to_long_ex(flag_arg); + flag = (*flag_arg)->value.lval; break; default: WRONG_PARAM_COUNT; break; } - + /* convert_to_long(result_arg); GET_RESULT(result_arg->value.lval, ib_result); - + */ + + ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase result", IBG(le_result)); + if (ib_result->out_sqlda == NULL) { _php_ibase_module_error("trying to fetch results from a non-select query"); RETURN_FALSE; @@ -1691,7 +1722,7 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) if (array_init(return_value)==FAILURE) { RETURN_FALSE; } - } else if(fetch_type == FETCH_OBJECT) { + } else if (fetch_type == FETCH_OBJECT) { if (object_init(return_value)==FAILURE) { RETURN_FALSE; } @@ -1700,8 +1731,9 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) arr_cnt = 0; var = ib_result->out_sqlda->sqlvar; for (i = 0; i < ib_result->out_sqlda->sqld; i++, var++) { - pval tmp; - if (((var->sqltype & 1) == 0) || *var->sqlind != -1){ + if (((var->sqltype & 1) == 0) || *var->sqlind != -1) { + pval *tmp; + tmp = emalloc(sizeof(pval)); switch(var->sqltype & ~1) { case SQL_VARYING: case SQL_TEXT: @@ -1710,7 +1742,7 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) case SQL_FLOAT: case SQL_DOUBLE: case SQL_DATE: - _php_ibase_var_pval(&tmp, var->sqldata, var->sqltype, var->sqllen, var->sqlscale, flag); + _php_ibase_var_pval(tmp, var->sqldata, var->sqltype, var->sqllen, var->sqlscale, flag); break; case SQL_BLOB: if (flag & PHP_IBASE_TEXT) { /* text ? */ @@ -1746,7 +1778,7 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) unsigned short seg_len, max_seg = max_len-cur_len > USHRT_MAX ? USHRT_MAX : max_len-cur_len; stat = isc_get_segment(IB_STATUS, &bl_handle, &seg_len, max_seg, &bl_data[cur_len]); cur_len += seg_len; - if(cur_len > max_len){ /* never!*/ + if (cur_len > max_len) { /* never!*/ efree(bl_data); _php_ibase_module_error("php module internal error in %s %d",__FILE__,__LINE__); RETURN_FALSE; @@ -1764,9 +1796,10 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) _php_ibase_error(); RETURN_FALSE; } - tmp.type = IS_STRING; - tmp.value.str.len = cur_len; - tmp.value.str.val = bl_data; + tmp->type = IS_STRING; + tmp->value.str.len = cur_len; + tmp->value.str.val = estrndup(bl_data, cur_len); + efree(bl_data); } else { /* blob id only */ ISC_QUAD *bl_qd = (ISC_QUAD ISC_FAR *) var->sqldata; ibase_blob_handle *ib_blob_id; @@ -1779,9 +1812,10 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) ib_blob_id->bl_qd.gds_quad_low = bl_qd->gds_quad_low; ib_blob_id->bl_handle = NULL; - tmp.type = IS_STRING; - tmp.value.str.len = sizeof(ibase_blob_handle); - tmp.value.str.val = (char *)ib_blob_id; + tmp->type = IS_STRING; + tmp->value.str.len = sizeof(ibase_blob_handle); + tmp->value.str.val = estrndup((char *)ib_blob_id, sizeof(ibase_blob_handle)); + efree(ib_blob_id); } break; case SQL_ARRAY:{ @@ -1793,13 +1827,13 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) ar_data = emalloc(ib_array->ar_size); if (isc_array_get_slice(IB_STATUS, &ib_result->link, &ib_result->trans, - &ar_qd, &ib_array->ar_desc, ar_data, &ib_array->ar_size)){ + &ar_qd, &ib_array->ar_desc, ar_data, &ib_array->ar_size)) { _php_ibase_error(); RETURN_FALSE; } tmp_ptr = ar_data; /* avoid changes in _arr_pval */ - if(_php_ibase_arr_pval(&tmp, &tmp_ptr, ib_array, 0, flag) == FAILURE){ + if (_php_ibase_arr_pval(tmp, &tmp_ptr, ib_array, 0, flag) == FAILURE) { RETURN_FALSE; } efree(ar_data); @@ -1807,18 +1841,44 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) break; default: break; - }/*switch*/ + } /*switch*/ if (fetch_type & FETCH_ARRAY) { - /* FIXME */ - zend_hash_index_update(return_value->value.ht, i, (void *) &tmp, sizeof(pval),NULL); + /* FIXME + zend_hash_index_update(return_value->value.ht, i, (void *) &tmp, sizeof(pval *),NULL); + */ + switch (tmp->type) { + case IS_STRING: + add_index_stringl(return_value, i, tmp->value.str.val, tmp->value.str.len, 0); + break; + case IS_LONG: + add_index_long(return_value, i, tmp->value.lval); + break; + case IS_DOUBLE: + add_index_double(return_value, i, tmp->value.dval); + break; + } } else { + /* FIXME zend_hash_update(return_value->value.ht, var->aliasname, var->aliasname_length+1, (void *) &tmp, sizeof(pval), NULL); + */ + switch (tmp->type) { + case IS_STRING: + add_property_stringl(return_value, var->aliasname, tmp->value.str.val, tmp->value.str.len, 0); +break; + case IS_LONG: + add_property_long(return_value, var->aliasname, tmp->value.lval); + break; + case IS_DOUBLE: + add_property_double(return_value, var->aliasname, tmp->value.dval); + break; + } } - }/* if not null */ + efree(tmp); + } /* if not null */ if ((var->sqltype & ~1) == SQL_ARRAY) { arr_cnt++; } - }/*for field*/ + } /*for field*/ } /* }}} */ @@ -1845,24 +1905,25 @@ PHP_FUNCTION(ibase_fetch_object) Free the memory used by a result */ PHP_FUNCTION(ibase_free_result) { - pval *result_arg; + zval **result_arg; ibase_result *ib_result; IBLS_FETCH(); RESET_ERRMSG; - if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_arg)==FAILURE) { + if (ARG_COUNT(ht)!=1 || zend_get_parameters_ex(1, &result_arg)==FAILURE) { WRONG_PARAM_COUNT; } - + /* convert_to_long(result_arg); if (result_arg->value.lval==0) { RETURN_FALSE; } GET_RESULT(result_arg->value.lval, ib_result); - - zend_list_delete(result_arg->value.lval); + */ + ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase result", IBG(le_result)); + zend_list_delete((*result_arg)->value.lval); RETURN_TRUE; } /* }}} */ @@ -1907,15 +1968,18 @@ PHP_FUNCTION(ibase_prepare) query = query_arg->value.str.val; /* open default transaction */ - if(_php_ibase_def_trans(ib_link, trans_n) == FAILURE){ + if (_php_ibase_def_trans(ib_link, trans_n) == FAILURE) { RETURN_FALSE; } - if(_php_ibase_alloc_query(&ib_query, ib_link->link, ib_link->trans[trans_n], query) == FAILURE){ + if (_php_ibase_alloc_query(&ib_query, ib_link->link, ib_link->trans[trans_n], query) == FAILURE) { RETURN_FALSE; } - RETURN_LONG(zend_list_insert(ib_query, IBG(le_query))); + /* + ZEND_REGISTER_RESOURCE(return_value, ib_query, IBG(le_query)); + */ + } /* }}} */ @@ -1932,7 +1996,7 @@ PHP_FUNCTION(ibase_execute) RESET_ERRMSG; - if(ARG_COUNT(ht) < 1){ + if (ARG_COUNT(ht) < 1) { WRONG_PARAM_COUNT; } @@ -1944,11 +2008,11 @@ PHP_FUNCTION(ibase_execute) GET_QUERY(args[0]->value.lval, ib_query); - if(ARG_COUNT(ht) > 1){ /* have variables to bind */ + if (ARG_COUNT(ht) > 1) { /* have variables to bind */ bind_args = &args[1]; } - if( _php_ibase_exec(&ib_result, ib_query, ARG_COUNT(ht)-1, bind_args) == FAILURE){; + if ( _php_ibase_exec(&ib_result, ib_query, ARG_COUNT(ht)-1, bind_args) == FAILURE) { efree(args); RETURN_FALSE; } @@ -1956,7 +2020,10 @@ PHP_FUNCTION(ibase_execute) efree(args); if (ib_result) { /* select statement */ + /* RETURN_LONG(zend_list_insert(ib_result, IBG(le_result))); + */ + ZEND_REGISTER_RESOURCE(return_value, ib_result, IBG(le_result)); } RETURN_TRUE; @@ -2005,7 +2072,7 @@ PHP_FUNCTION(ibase_timefmt) } convert_to_string(fmt); - if(IBG(timeformat)) + if (IBG(timeformat)) DL_FREE(IBG(timeformat)); IBG(timeformat) = DL_STRDUP(fmt->value.str.val); @@ -2055,7 +2122,8 @@ PHP_FUNCTION(ibase_num_fields) Get information about a field */ PHP_FUNCTION(ibase_field_info) { - pval *ret_val, *result_arg, *field_arg; + pval *ret_val; + zval **result_arg, **field_arg; ibase_result *ib_result; char buf[30], *s; int len; @@ -2065,28 +2133,30 @@ PHP_FUNCTION(ibase_field_info) RESET_ERRMSG; - if (ARG_COUNT(ht)!=2 || getParameters(ht, 2, &result_arg, &field_arg)==FAILURE) { + if (ARG_COUNT(ht)!=2 || zend_get_parameters_ex(2, &result_arg, &field_arg)==FAILURE) { WRONG_PARAM_COUNT; } - + /* convert_to_long(result_arg); GET_RESULT(result_arg->value.lval, ib_result); - + */ + ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase result", IBG(le_result)); + if (ib_result->out_sqlda == NULL) { _php_ibase_module_error("trying to get field info from a non-select query"); RETURN_FALSE; } - convert_to_long(field_arg); + convert_to_long_ex(field_arg); - if (field_arg->value.lval<0 || field_arg->value.lval>=ib_result->out_sqlda->sqld) + if ((*field_arg)->value.lval<0 || (*field_arg)->value.lval>=ib_result->out_sqlda->sqld) RETURN_FALSE; if (array_init(return_value)==FAILURE) RETURN_FALSE; - var = ib_result->out_sqlda->sqlvar + field_arg->value.lval; + var = ib_result->out_sqlda->sqlvar + (*field_arg)->value.lval; /* FIXME */ add_get_index_stringl(return_value, 0, var->sqlname, var->sqlname_length, (void **) &ret_val, 1); @@ -2110,7 +2180,7 @@ PHP_FUNCTION(ibase_field_info) zend_hash_pointer_update(return_value->value.ht, "length", sizeof(char)*7, ret_val); */ - switch (var->sqltype & ~1){ + switch (var->sqltype & ~1) { case SQL_TEXT: s = "TEXT"; break; case SQL_VARYING: s = "VARYING"; break; case SQL_SHORT: s = "SHORT"; break; @@ -2167,7 +2237,7 @@ static int _php_ibase_blob_info(isc_blob_handle bl_handle,IBASE_BLOBINFO *bl_inf int item_len, item = *p++; item_len = (short)isc_vax_integer(p, 2); p += 2; - switch(item){ + switch (item) { case isc_info_blob_num_segments: bl_info->num_segments = isc_vax_integer(p, item_len); break; @@ -2186,9 +2256,9 @@ static int _php_ibase_blob_info(isc_blob_handle bl_handle,IBASE_BLOBINFO *bl_inf case isc_info_error: /* hmm. don't think so...*/ _php_ibase_module_error("php module internal error in %s %d",__FILE__,__LINE__); return FAILURE; - }/*switch*/ + } /*switch*/ p += item_len; - }/*for*/ + } /*for*/ return SUCCESS; } /* }}} */ @@ -2235,7 +2305,7 @@ PHP_FUNCTION(ibase_blob_create) ib_blob->link = ib_link->link; ib_blob->bl_handle = NULL; - if (isc_create_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle,&ib_blob->bl_qd)){ + if (isc_create_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle,&ib_blob->bl_qd)) { efree(ib_blob); _php_ibase_error(); RETURN_FALSE; @@ -2265,7 +2335,7 @@ PHP_FUNCTION(ibase_blob_open) GET_BLOB_ID_ARG(blob_arg,ib_blob_id); - if(ib_blob_id == NULL){ /* blob IS NULL or argument unset */ + if (ib_blob_id == NULL) { /* blob IS NULL or argument unset */ RETURN_FALSE; } @@ -2274,7 +2344,7 @@ PHP_FUNCTION(ibase_blob_open) ib_blob->bl_qd.gds_quad_high = ib_blob_id->bl_qd.gds_quad_high; ib_blob->bl_qd.gds_quad_low = ib_blob_id->bl_qd.gds_quad_low; ib_blob->bl_handle = NULL; - if (isc_open_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle, &ib_blob->bl_qd)){ + if (isc_open_blob(IB_STATUS, &ib_blob->link, &ib_blob->trans_handle, &ib_blob->bl_handle, &ib_blob->bl_qd)) { efree(ib_blob); _php_ibase_error(); RETURN_FALSE; @@ -2304,7 +2374,7 @@ PHP_FUNCTION(ibase_blob_add) convert_to_string(string_arg); - if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, string_arg->value.str.len, string_arg->value.str.val)){ + if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, string_arg->value.str.len, string_arg->value.str.val)) { _php_ibase_error(); RETURN_FALSE; } @@ -2327,7 +2397,7 @@ PHP_FUNCTION(ibase_blob_get) RESET_ERRMSG; - if(ARG_COUNT(ht) != 2 || getParameters(ht, 2, &blob_arg, &len_arg) == FAILURE) { + if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &blob_arg, &len_arg) == FAILURE) { WRONG_PARAM_COUNT; } @@ -2336,14 +2406,14 @@ PHP_FUNCTION(ibase_blob_get) GET_BLOB_HANDLE_ARG(blob_arg, ib_blob); - if(ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low){ /*not null ?*/ + if (ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low) { /*not null ?*/ bl_data = emalloc(max_len+1); - for(cur_len = stat = 0; stat == 0; ){ + for (cur_len = stat = 0; stat == 0; ) { stat = isc_get_segment(IB_STATUS, &ib_blob->bl_handle, &seg_len, max_len-cur_len, &bl_data[cur_len]); cur_len += seg_len; - if(cur_len > max_len){ /* never!*/ + if (cur_len > max_len) { /* never!*/ efree(bl_data); _php_ibase_module_error("php module internal error in %s %d",__FILE__,__LINE__); RETURN_FALSE; @@ -2351,13 +2421,13 @@ PHP_FUNCTION(ibase_blob_get) } bl_data[cur_len] = '\0'; - if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof && IB_STATUS[1] != isc_segment)){ + if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof && IB_STATUS[1] != isc_segment)) { efree(bl_data); _php_ibase_error(); RETURN_FALSE; } RETURN_STRINGL(bl_data,cur_len,0); - }else{ /* null blob */ + } else { /* null blob */ RETURN_STRING("",1); /* empty string */ } } @@ -2384,9 +2454,9 @@ static void _php_ibase_blob_end(INTERNAL_FUNCTION_PARAMETERS, int bl_end) GET_BLOB_HANDLE_ARG(blob_arg, ib_blob); - if(bl_end == BLOB_CLOSE){ /* return id here */ - if(ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low){ /*not null ?*/ - if (isc_close_blob(IB_STATUS, &ib_blob->bl_handle)){ + if (bl_end == BLOB_CLOSE) { /* return id here */ + if (ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low) { /*not null ?*/ + if (isc_close_blob(IB_STATUS, &ib_blob->bl_handle)) { _php_ibase_error(); RETURN_FALSE; } @@ -2395,7 +2465,7 @@ static void _php_ibase_blob_end(INTERNAL_FUNCTION_PARAMETERS, int bl_end) RETVAL_STRINGL((char *)ib_blob, sizeof(ibase_blob_handle), 1); zend_list_delete(blob_arg->value.lval); } else { /* discard created blob */ - if (isc_cancel_blob(IB_STATUS, &ib_blob->bl_handle)){ + if (isc_cancel_blob(IB_STATUS, &ib_blob->bl_handle)) { _php_ibase_error(); RETURN_FALSE; } @@ -2447,22 +2517,22 @@ PHP_FUNCTION(ibase_blob_info) RETURN_FALSE; } - if(ib_blob_id->bl_qd.gds_quad_high || ib_blob_id->bl_qd.gds_quad_low){ /*not null ?*/ + if (ib_blob_id->bl_qd.gds_quad_high || ib_blob_id->bl_qd.gds_quad_low) { /*not null ?*/ if (isc_open_blob(IB_STATUS, &ib_blob_id->link, &ib_blob_id->trans_handle, - &ib_blob_id->bl_handle, &ib_blob_id->bl_qd)){ + &ib_blob_id->bl_handle, &ib_blob_id->bl_qd)) { _php_ibase_error(); RETURN_FALSE; } - if(_php_ibase_blob_info(ib_blob_id->bl_handle,&bl_info)){ + if (_php_ibase_blob_info(ib_blob_id->bl_handle,&bl_info)) { RETURN_FALSE; } - if(isc_close_blob(IB_STATUS, &ib_blob_id->bl_handle)){ + if (isc_close_blob(IB_STATUS, &ib_blob_id->bl_handle)) { _php_ibase_error(); RETURN_FALSE; } ib_blob_id->bl_handle = NULL; - }else{ /* null blob, all values to zero */ + } else { /* null blob, all values to zero */ bl_info.max_segment = 0; bl_info.num_segments = 0; bl_info.total_length = 0; @@ -2525,47 +2595,47 @@ PHP_FUNCTION(ibase_blob_echo) RETURN_FALSE; } - if(ib_blob_id){ /*not null ?*/ + if (ib_blob_id) { /*not null ?*/ if (isc_open_blob(IB_STATUS, &ib_blob_id->link, &ib_blob_id->trans_handle, - &ib_blob_id->bl_handle,&ib_blob_id->bl_qd)){ + &ib_blob_id->bl_handle,&ib_blob_id->bl_qd)) { _php_ibase_error(); RETURN_FALSE; } - while(!isc_get_segment(IB_STATUS, &ib_blob_id->bl_handle, &seg_len, sizeof(bl_data), bl_data) - || IB_STATUS[1] == isc_segment){ + while (!isc_get_segment(IB_STATUS, &ib_blob_id->bl_handle, &seg_len, sizeof(bl_data), bl_data) + || IB_STATUS[1] == isc_segment) { PHPWRITE(bl_data,seg_len); } - if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof)){ + if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof)) { _php_ibase_error(); RETURN_FALSE; } - if (isc_close_blob(IB_STATUS, &ib_blob_id->bl_handle)){ + if (isc_close_blob(IB_STATUS, &ib_blob_id->bl_handle)) { _php_ibase_error(); RETURN_FALSE; } ib_blob_id->bl_handle = NULL; - }/* not null ? */ + } /* not null ? */ RETURN_TRUE; } /* }}} */ -#ifndef PHP_WIN32 -#if 0 +/* extern int le_fp, le_pp; -extern int wsa_fp; /*to handle reading and writing to windows sockets*/ +extern int wsa_fp; +*/ +/*to handle reading and writing to windows sockets*/ /* {{{ proto string ibase_blob_import([link_identifier,] file_id) Create blob, copy file in it, and close it */ - PHP_FUNCTION(ibase_blob_import) { - pval *link_arg, *file_arg; + zval **link_arg, **file_arg; int trans_n, type, link_id = 0, file_id, size, b; int issock=0, socketd=0, *sock; ibase_blob_handle ib_blob; @@ -2579,17 +2649,17 @@ PHP_FUNCTION(ibase_blob_import) switch (ARG_COUNT(ht)) { case 1: - if (getParameters(ht, 1, &file_arg) == FAILURE) { + if (zend_get_parameters_ex(1, &file_arg) == FAILURE) { RETURN_FALSE; } link_id = IBG(default_link); break; case 2: - if (getParameters(ht, 2, &link_arg, &file_arg) == FAILURE) { + if (zend_get_parameters_ex(2, &link_arg, &file_arg) == FAILURE) { RETURN_FALSE; } - convert_to_long(link_arg); - link_id = link_arg->value.lval; + convert_to_long_ex(link_arg); + link_id = (*link_arg)->value.lval; break; default: WRONG_PARAM_COUNT; @@ -2603,20 +2673,7 @@ PHP_FUNCTION(ibase_blob_import) RETURN_FALSE; } - convert_to_long(file_arg); - file_id = file_arg->value.lval; - fp = zend_list_find(file_id, &type); - if (type == wsa_fp){ - issock = 1; - sock = zend_list_find(file_id, &type); - socketd =* sock; - } - - if ((!fp || (type!= le_fp) && type!=le_pp - && (!socketd || type != wsa_fp))) { - _php_ibase_module_error("Unable to find file identifier %d",file_id); - RETURN_FALSE; - } + ZEND_FETCH_RESOURCE(fp, FILE *, file_arg, -1, "File-Handle", php_file_le_fopen()); ib_blob.link = ib_link->link; ib_blob.trans_handle = ib_link->trans[trans_n]; @@ -2624,7 +2681,7 @@ PHP_FUNCTION(ibase_blob_import) ib_blob.bl_qd.gds_quad_high = 0; ib_blob.bl_qd.gds_quad_low = 0; - if (isc_create_blob(IB_STATUS, &ib_blob.link, &ib_blob.trans_handle, &ib_blob.bl_handle,&ib_blob.bl_qd)){ + if (isc_create_blob(IB_STATUS, &ib_blob.link, &ib_blob.trans_handle, &ib_blob.bl_handle,&ib_blob.bl_qd)) { _php_ibase_error(); RETURN_FALSE; } @@ -2638,7 +2695,7 @@ PHP_FUNCTION(ibase_blob_import) size += b; } - if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)){ + if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)) { _php_ibase_error(); RETURN_FALSE; } @@ -2649,9 +2706,6 @@ PHP_FUNCTION(ibase_blob_import) RETVAL_STRINGL((char *)&ib_blob, sizeof(ibase_blob_handle), 1); } /* }}} */ -#endif -#endif - #endif diff --git a/ext/interbase/php_interbase.h b/ext/interbase/php_interbase.h index 812419feb8..67753a6de7 100644 --- a/ext/interbase/php_interbase.h +++ b/ext/interbase/php_interbase.h @@ -42,7 +42,7 @@ extern zend_module_entry ibase_module_entry; extern PHP_MINIT_FUNCTION(ibase); extern PHP_RINIT_FUNCTION(ibase); extern PHP_MSHUTDOWN_FUNCTION(ibase); -extern PHP_MSHUTDOWN_FUNCTION(ibase); +extern PHP_RSHUTDOWN_FUNCTION(ibase); PHP_MINFO_FUNCTION(ibase); PHP_FUNCTION(ibase_connect); |