From: Corne' Cornelius Date: Wed, 19 Feb 2003 09:52:52 +0000 (+0000) Subject: - Revert latest commit X-Git-Tag: RELEASE_0_5~877 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=71e6110bc87babf952f93c0d0122c936925dbd22;p=php - Revert latest commit --- diff --git a/ext/informix/ifx.ec b/ext/informix/ifx.ec index 816218ba70..7d167e7134 100644 --- a/ext/informix/ifx.ec +++ b/ext/informix/ifx.ec @@ -67,30 +67,24 @@ static void php_ifx_set_default_link(int id TSRMLS_DC); static long php_intifx_getType(long id, HashTable *list TSRMLS_DC); static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC); -static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC); -static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC); -static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC); -static void php_intifx_release_blob(loc_t *blob TSRMLS_DC); static long php_intifx_free_blob(long id, HashTable *list TSRMLS_DC); +static long php_intifx2_free_blob(long id, HashTable *list TSRMLS_DC); static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC); static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC); static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC); -static char* php_intifx_create_tmpfile(TSRMLS_DC); +static char* php_intifx_create_tmpfile(long bid TSRMLS_DC); static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC); -static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC); -static long php_intifx_preparse(char *statement TSRMLS_DC); -static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC); static char* php_intifx_null(TSRMLS_D); static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS_DC); static long php_intifx_free_char(long id, HashTable *list TSRMLS_DC); static long php_intifx_update_char(long bid, char* param, long len, HashTable *list TSRMLS_DC); static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC); #if HAVE_IFX_IUS -static long php_intifxus_create_slob(long create_mode, HashTable *list); +static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC); static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC); static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC); static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list TSRMLS_DC); -static long php_intifxus_new_slob(HashTable *list); +static long php_intifxus_new_slob(HashTable *list TSRMLS_DC); static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC); #endif @@ -122,7 +116,7 @@ typedef char IFX[128]; { \ if (ifx_check() < 0) { \ IFXG(sv_sqlcode) = SQLCODE; \ - php_error(E_WARNING, "%s(): Set connection %s fails (%s)", get_active_function_name(TSRMLS_C), ifx, ifx_error(ifx)); \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails (%s)", ifx, ifx_error(ifx)); \ RETURN_FALSE; \ } \ } @@ -307,7 +301,7 @@ EXEC SQL END DECLARE SECTION; EXEC SQL close database; EXEC SQL DISCONNECT CURRENT; } - efree(link); + free(link); IFXG(num_persistent)--; IFXG(num_links)--; } @@ -318,35 +312,6 @@ static void ifx_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC) efree(Ifx_Result); } -static void ifx_free_blob(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - IFX_IDRES *Ifx_blob = (IFX_IDRES *)rsrc->ptr; - - -#if IFX_VERSION < 724 /* this Informix memory leak is fixed from 7.24 on */ - /* according to the current PERL DBD::Informix */ - /* and otherwise I get segmenation violations with 7.30 */ - - if(Ifx_blob->BLOB.mode==BLMODE_INMEM) { - if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else { - efree(Ifx_blob->BLOB.blob_data.loc_buffer); - } - } else { - if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) { - efree(Ifx_blob->BLOB.blob_data.loc_fname); - } - } - -#elif IFX_VERSION >= 952 /* This memory leak seems to be broken again */ - /* somewhere between 9.21 and 9.52 */ - - php_intifx_release_blob(&Ifx_blob->BLOB.blob_data TSRMLS_C); - -#endif - - efree(Ifx_blob); -} - PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("ifx.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_ifx_globals, ifx_globals) STD_PHP_INI_ENTRY_EX("ifx.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_ifx_globals, ifx_globals, display_link_numbers) @@ -377,7 +342,7 @@ PHP_MINIT_FUNCTION(ifx) REGISTER_INI_ENTRIES(); le_result = zend_register_list_destructors_ex(ifx_free_result,NULL, "informix result", module_number); - le_idresult = zend_register_list_destructors_ex(ifx_free_blob, NULL, "informix id result", module_number); + le_idresult = zend_register_list_destructors_ex(NULL, NULL, "informix id result", module_number); le_link = zend_register_list_destructors_ex(_close_ifx_link,NULL, "informix link", module_number); le_plink = zend_register_list_destructors_ex(NULL,_close_ifx_plink,"informix persistent link", module_number); ifx_module_entry.type = type; @@ -446,7 +411,6 @@ static void php_ifx_set_default_link(int id TSRMLS_DC) static void php_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) { - zval **yyhost, **yyuser, **yypasswd; char *hashed_details; int hashed_details_length; @@ -457,7 +421,7 @@ EXEC SQL END DECLARE SECTION; if (PG(sql_safe_mode)) { if (ZEND_NUM_ARGS()>0) { - php_error(E_NOTICE, "%s(): SQL safe mode in effect - ignoring host/user/password information", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information"); } host = passwd = NULL; user = php_get_current_user(); @@ -465,55 +429,30 @@ EXEC SQL END DECLARE SECTION; hashed_details = (char *) emalloc(hashed_details_length+1); sprintf(hashed_details,"ifx__%s_",user); } else { - host = IFXG(default_host); - user = IFXG(default_user); - passwd = IFXG(default_password); + int host_len = 0, user_len = 0, passwd_len = 0; + host = user = passwd = NULL; - switch(ZEND_NUM_ARGS()) { - case 0: /* defaults */ - break; - case 1: { - if (zend_get_parameters_ex(1, &yyhost)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(yyhost); - host = Z_STRVAL_PP(yyhost); - } - break; - case 2: { - if (zend_get_parameters_ex(2, &yyhost, &yyuser)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(yyhost); - convert_to_string_ex(yyuser); - host = Z_STRVAL_PP(yyhost); - user = Z_STRVAL_PP(yyuser); - } - break; - case 3: { - if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(yyhost); - convert_to_string_ex(yyuser); - convert_to_string_ex(yypasswd); - host = Z_STRVAL_PP(yyhost); - user = Z_STRVAL_PP(yyuser); - passwd = Z_STRVAL_PP(yypasswd); - } - break; - default: - WRONG_PARAM_COUNT; - break; + /* set default values if any are avaliable */ + if (IFXG(default_host)) { + host = IFXG(default_host); + host_len = strlen(host); + } + if (IFXG(default_user)) { + user = IFXG(default_user); + user_len = strlen(IFXG(default_user)); + } + if (IFXG(default_password)) { + passwd = IFXG(default_password); + passwd_len = strlen(IFXG(default_password)); + } + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sss", &host, &host_len, &user, &user_len, &passwd, &passwd_len) == FAILURE) { + return; } - hashed_details_length = sizeof("ifx___")-1+ strlen(SAFE_STRING(host))+ - strlen(SAFE_STRING(user))+ - strlen(SAFE_STRING(passwd)); + hashed_details_length = sizeof("ifx___") - 1 + host_len + user_len + passwd_len; hashed_details = (char *) emalloc(hashed_details_length+1); - sprintf(hashed_details,"ifx_%s_%s_%s", SAFE_STRING(host), - SAFE_STRING(user), - SAFE_STRING(passwd)); + sprintf(hashed_details,"ifx_%s_%s_%s", SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd)); } IFXG(sv_sqlcode) = 0; @@ -529,27 +468,27 @@ EXEC SQL END DECLARE SECTION; list_entry new_le; if (IFXG(max_links)!=-1 && IFXG(num_links) >= IFXG(max_links)) { - php_error(E_WARNING, "%s(): Too many open links (%d)", get_active_function_name(TSRMLS_C), IFXG(num_links)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links)); efree(hashed_details); RETURN_FALSE; } if (IFXG(max_persistent)!=-1 && IFXG(num_persistent) >= IFXG(max_persistent)) { - php_error(E_WARNING, "%s(): Too many open persistent links (%d)", get_active_function_name(TSRMLS_C), IFXG(num_persistent)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%d)", IFXG(num_persistent)); efree(hashed_details); RETURN_FALSE; } /* create the link */ - ifx = (char *) emalloc(sizeof(IFX)); + ifx = (char *) malloc(sizeof(IFX)); IFXG(connectionid)++; - sprintf(ifx,"%s%x", user, IFXG(connectionid)); + sprintf(ifx,"%s%x", SAFE_STRING(user), IFXG(connectionid)); EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION; if (ifx_check() == IFX_ERROR) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ifx_error(ifx)); - efree(ifx); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_error(ifx)); + free(ifx); efree(hashed_details); RETURN_FALSE; } @@ -559,7 +498,7 @@ EXEC SQL END DECLARE SECTION; new_le.ptr = ifx; if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) { - efree(ifx); + free(ifx); efree(hashed_details); RETURN_FALSE; } @@ -578,7 +517,7 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() == IFX_ERROR) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Link to server lost, unable to reconnect (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect (%s)", ifx_error(ifx)); zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1); efree(hashed_details); RETURN_FALSE; @@ -616,7 +555,7 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() == IFX_ERROR) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Unable to connect (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect (%s)", ifx_error(ifx)); zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1); efree(hashed_details); RETURN_FALSE; @@ -633,7 +572,7 @@ EXEC SQL END DECLARE SECTION; } } if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) { - php_error(E_WARNING, "%s(): Too many open links (%d)", get_active_function_name(TSRMLS_C), IFXG(num_links)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links)); efree(hashed_details); RETURN_FALSE; } @@ -646,7 +585,7 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() == IFX_ERROR) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING,"%s(): %s", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_error(ifx)); efree(hashed_details); efree(ifx); RETURN_FALSE; @@ -771,7 +710,6 @@ EXEC SQL BEGIN DECLARE SECTION; char cursorid[32]; /* query cursor id */ char statemid[32]; /* statement id */ char descrpid[32]; /* descriptor id */ - char i_descrpid[32]; /* input descriptor binding */ char *statement; /* query text */ int fieldcount; /* field count */ int i; /* field index */ @@ -782,12 +720,12 @@ EXEC SQL BEGIN DECLARE SECTION; char *char_tmp; long len; int indicator; - int desc_count; $ifdef HAVE_IFX_IUS; fixed binary 'blob' ifx_lo_t *slocator; $endif; EXEC SQL END DECLARE SECTION; + char *blobfilename; int locind; int ctype; int affected_rows; @@ -797,7 +735,6 @@ EXEC SQL END DECLARE SECTION; int cursoryproc; int argc=ZEND_NUM_ARGS(); long ifx_type; - int num_params; if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) { WRONG_PARAM_COUNT; @@ -815,7 +752,6 @@ EXEC SQL END DECLARE SECTION; sprintf(statemid, "statem%x", IFXG(cursorid)); sprintf(cursorid, "cursor%x", IFXG(cursorid)); sprintf(descrpid, "descrp%x", IFXG(cursorid)); - sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid)); EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); @@ -823,69 +759,48 @@ EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE :statemid FROM :statement; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Prepare fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)", ifx_error(ifx)); RETURN_FALSE; } affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */ for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e]; - num_params = php_intifx_preparse(statement); - - Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES)); - if (Ifx_Result == NULL) { - php_error(E_WARNING, "%s(): Out of memory allocating IFX_RES", get_active_function_name(TSRMLS_C)); - EXEC SQL free :statemid; - RETURN_FALSE; - } - - /* initialize result data structure */ - - Ifx_Result->rowid = 0; - strcpy(Ifx_Result->connecid, ifx); - strcpy(Ifx_Result->cursorid, cursorid); - strcpy(Ifx_Result->descrpid, descrpid); - strcpy(Ifx_Result->i_descrpid, i_descrpid); - strcpy(Ifx_Result->statemid, statemid); - Ifx_Result->numcols = 0; - Ifx_Result->numicols = 0; - - for (i = 0; i < MAX_RESID; ++i) { - Ifx_Result->res_id[i] = -1; - } - - - if (!php_intifx_alloc_ibind(Ifx_Result, num_params)) { + EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384; + if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx)); EXEC SQL free :statemid; - efree(Ifx_Result); - php_error(E_WARNING, "%s(): Allocate i_desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), i_descrpid, ifx_error(ifx)); RETURN_FALSE; } - - desc_count = php_intifx_count_descriptors(statemid); - if (desc_count == 0) - desc_count = 1; - - EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count; + EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Allocate desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)", ifx_error(ifx)); + EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; RETURN_FALSE; } - EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid; - if (ifx_check() < 0) { - IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Describe fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + query_type = sqlca.sqlcode; + + Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES)); + if (Ifx_Result == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES"); EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; RETURN_FALSE; } - query_type = sqlca.sqlcode; + /* initialize result data structure */ + + Ifx_Result->rowid = 0; + strcpy(Ifx_Result->connecid, ifx); + strcpy(Ifx_Result->descrpid, descrpid); + for (i = 0; i < MAX_RESID; ++i) { + Ifx_Result->res_id[i] = -1; + } cursoryproc = 0; if (query_type == SQ_EXECPROC) { @@ -905,9 +820,10 @@ EXEC SQL END DECLARE SECTION; */ zval **pblobidarr, **tmp; - EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - Ifx_Result->iscursory = 0; + strcpy(Ifx_Result->cursorid, ""); + strcpy(Ifx_Result->descrpid, descrpid); + strcpy(Ifx_Result->statemid, statemid); if(argc > 3) { WRONG_PARAM_COUNT; @@ -919,22 +835,25 @@ EXEC SQL END DECLARE SECTION; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Can't get blob array param", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param"); RETURN_FALSE; } - if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) { IFXG(sv_sqlcode) = SQLCODE; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Blob-parameter is not an array", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter is not an array"); RETURN_FALSE; } zend_hash_internal_pointer_reset((*pblobidarr)->value.ht); - for (i = 1; i <= num_params && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) { + i=1; + while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) { convert_to_long(*tmp); + if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) { + EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i; + } ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC); switch(ifx_type) { @@ -944,22 +863,21 @@ EXEC SQL END DECLARE SECTION; if(locator==NULL) { IFXG(sv_sqlcode) = SQLCODE; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING,"%s(): %d is not an Informix blob-result index", get_active_function_name(TSRMLS_C), (int)((*tmp)->value.lval)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not an Informix blob-result index", (int)((*tmp)->value.lval)); RETURN_FALSE; } if(locator->loc_loctype==LOCFNAME) { locator->loc_oflags=LOC_RONLY; } - EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type; + EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE= :loc_t_type; break; case TYPE_CHAR: len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC); indicator=0; - if(char_tmp==NULL || len < 0) { + if(char_tmp==NULL || len<0) { indicator=-1; } len++; @@ -971,33 +889,11 @@ EXEC SQL END DECLARE SECTION; TYPE= :sqlchar_type; break; } - - if (ifx_check() < 0) { - IFXG(sv_sqlcode) = SQLCODE; - EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; - EXEC SQL free :statemid; - efree(Ifx_Result); - php_error(E_WARNING, "%s(): Execute immediate fails : %s (%s)", get_active_function_name(TSRMLS_C), statement, ifx_error(ifx)); - RETURN_FALSE; - } - + i++; zend_hash_move_forward((*pblobidarr)->value.ht); } Ifx_Result->paramquery=1; - - if (--i != num_params) { - EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; - EXEC SQL free :statemid; - efree(Ifx_Result); - php_error(E_WARNING, "%s(): Execute immediate fails : number of created blobs doesn't match placeholders (?)", get_active_function_name(TSRMLS_C), statement); - RETURN_FALSE; - } - - - EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid; - + EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid; } else { EXEC SQL EXECUTE :statemid; } @@ -1005,12 +901,9 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - if (Ifx_Result->numicols > 0) { - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; - } EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Execute immediate fails : %s (%s)", get_active_function_name(TSRMLS_C), statement, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s (%s)", statement, ifx_error(ifx)); RETURN_FALSE; } Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */ @@ -1047,7 +940,7 @@ EXEC SQL END DECLARE SECTION; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Can not get descriptor %s (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get descriptor %s (%s)", descrpid, ifx_error(ifx)); RETURN_FALSE; } @@ -1061,10 +954,6 @@ EXEC SQL END DECLARE SECTION; Ifx_Result->ishold = 1; } - /* - * ifx_do part - */ - if (Ifx_Result->isscroll) { if (Ifx_Result->ishold) { EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid; @@ -1084,7 +973,7 @@ EXEC SQL END DECLARE SECTION; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Declare cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor fails (%s)", ifx_error(ifx)); RETURN_FALSE; } @@ -1095,9 +984,12 @@ EXEC SQL END DECLARE SECTION; EXEC SQL free :statemid; EXEC SQL free :cursorid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Open cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_error(ifx)); RETURN_FALSE; } + strcpy(Ifx_Result->cursorid, cursorid); + strcpy(Ifx_Result->descrpid, descrpid); + strcpy(Ifx_Result->statemid, statemid); /* check for text/blob columns */ locind = 0; @@ -1110,31 +1002,25 @@ $endif; ) { int bid = 0; if(fieldtype==SQLTEXT) { - if(IFXG(blobinfile)==0) { - bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC); - locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); - } else { - bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE, "",-1,&EG(regular_list) TSRMLS_CC); - locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); - } + bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC); + locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; } - else if(fieldtype==SQLBYTES) { + if(fieldtype==SQLBYTES) { if(IFXG(blobinfile)==0) { bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC); locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); } else { - bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, "",-1,&EG(regular_list) TSRMLS_CC); + blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC); + bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC); locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); + locator->loc_oflags=LOC_WONLY; } EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; } - - php_intifx_release_blob(locator TSRMLS_C); - $ifdef HAVE_IFX_IUS; if(fieldtype==SQLUDTFIXED) { - bid=php_intifxus_new_slob(&EG(regular_list)); + bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC); slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC); EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator; } @@ -1180,7 +1066,6 @@ EXEC SQL BEGIN DECLARE SECTION; char cursorid[32]; /* query cursor id */ char statemid[32]; /* statement id */ char descrpid[32]; /* descriptor id */ - char i_descrpid[32]; /* input descriptor binding */ char *statement; /* query text */ int fieldcount; /* field count */ int i; /* field index */ @@ -1192,7 +1077,6 @@ EXEC SQL BEGIN DECLARE SECTION; int indicator; long sqlerrd[6]; int e; - int desc_count; EXEC SQL END DECLARE SECTION; int ctype; @@ -1201,7 +1085,6 @@ EXEC SQL END DECLARE SECTION; int cursoryproc; int argc=ZEND_NUM_ARGS(); long ifx_type; - int num_params; if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) { WRONG_PARAM_COUNT; @@ -1219,7 +1102,6 @@ EXEC SQL END DECLARE SECTION; sprintf(statemid, "statem%x", IFXG(cursorid)); sprintf(cursorid, "cursor%x", IFXG(cursorid)); sprintf(descrpid, "descrp%x", IFXG(cursorid)); - sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid)); EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); @@ -1227,69 +1109,49 @@ EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE :statemid FROM :statement; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Prepare fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)", ifx_error(ifx)); RETURN_FALSE; } affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */ for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e]; - num_params = php_intifx_preparse(statement); - - Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES)); - if (Ifx_Result == NULL) { - php_error(E_WARNING, "%s(): Out of memory allocating IFX_RES", get_active_function_name(TSRMLS_C)); - EXEC SQL free :statemid; - RETURN_FALSE; - } - - /* initialize result data structure */ - - Ifx_Result->rowid = 0; - strcpy(Ifx_Result->connecid, ifx); - strcpy(Ifx_Result->cursorid, cursorid); - strcpy(Ifx_Result->descrpid, descrpid); - strcpy(Ifx_Result->i_descrpid, i_descrpid); - strcpy(Ifx_Result->statemid, statemid); - Ifx_Result->numcols = 0; - Ifx_Result->numicols = 0; - - for (i = 0; i < MAX_RESID; ++i) { - Ifx_Result->res_id[i] = -1; - } - - - if (!php_intifx_alloc_ibind(Ifx_Result, num_params)) { + EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384; + if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx)); EXEC SQL free :statemid; - efree(Ifx_Result); - php_error(E_WARNING, "%s(): Allocate i_desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), i_descrpid, ifx_error(ifx)); RETURN_FALSE; } - - desc_count = php_intifx_count_descriptors(statemid); - if (desc_count == 0) - desc_count = 1; - - EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count; + EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Allocate desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)", ifx_error(ifx)); + EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; RETURN_FALSE; } - - EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid; - if (ifx_check() < 0) { + + query_type = sqlca.sqlcode; + + Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES)); + if (Ifx_Result == NULL) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Describe fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES"); EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; RETURN_FALSE; } - query_type = sqlca.sqlcode; + /* initialize result data structure */ + Ifx_Result->rowid = 0; + strcpy(Ifx_Result->connecid, ifx); + strcpy(Ifx_Result->descrpid, descrpid); + strcpy(Ifx_Result->statemid, statemid); + for (i = 0; i < MAX_RESID; ++i) { + Ifx_Result->res_id[i] = -1; + } cursoryproc = 0; if (query_type == SQ_EXECPROC) { @@ -1309,9 +1171,10 @@ EXEC SQL END DECLARE SECTION; */ zval **pblobidarr, **tmp; - EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - Ifx_Result->iscursory = 0; + strcpy(Ifx_Result->cursorid, cursorid); + strcpy(Ifx_Result->cursorid, ""); + strcpy(Ifx_Result->descrpid, descrpid); if(argc > 3) { WRONG_PARAM_COUNT; @@ -1319,28 +1182,32 @@ EXEC SQL END DECLARE SECTION; if(argc == 3) { Ifx_Result->paramquery=1; - if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) { + if (zend_get_parameters_ex(3, &dummy, &dummy,&pblobidarr) == FAILURE) { IFXG(sv_sqlcode) = SQLCODE; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Can't get blob array param", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param"); RETURN_FALSE; } - if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) { + if((*pblobidarr)->type != IS_ARRAY) { IFXG(sv_sqlcode) = SQLCODE; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Blob-parameter not an array", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter not an array"); RETURN_FALSE; } zend_hash_internal_pointer_reset((*pblobidarr)->value.ht); - for (i = 1; i <= num_params && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) { + i=1; + while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) { convert_to_long(*tmp); - + if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) { + EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i; + } + ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC); switch(ifx_type) { case TYPE_BLTEXT: @@ -1349,20 +1216,19 @@ EXEC SQL END DECLARE SECTION; if(locator==NULL) { IFXG(sv_sqlcode) = SQLCODE; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), (int)((*tmp)->value.lval)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", (int)((*tmp)->value.lval)); RETURN_FALSE; } if(locator->loc_loctype==LOCFNAME) { locator->loc_oflags=LOC_RONLY; } - EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type; + EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE=:loc_t_type; break; - case TYPE_CHAR: len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC); + indicator=0; if(char_tmp==NULL || len < 0) { indicator=-1; @@ -1376,30 +1242,9 @@ EXEC SQL END DECLARE SECTION; TYPE= :sqlchar_type; break; } - - if (ifx_check() < 0) { - IFXG(sv_sqlcode) = SQLCODE; - EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; - EXEC SQL free :statemid; - efree(Ifx_Result); - php_error(E_WARNING, "%s(): Execute immediate fails : %s (%s)", get_active_function_name(TSRMLS_C), statement, ifx_error(ifx)); - RETURN_FALSE; - } - + i++; zend_hash_move_forward((*pblobidarr)->value.ht); - } - - if (--i != num_params) { - EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; - EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid; - EXEC SQL free :statemid; - efree(Ifx_Result); - php_error(E_WARNING, "%s(): Execute immediate fails : number of created blobs doesn't match placeholders (?)", get_active_function_name(TSRMLS_C), statement); - RETURN_FALSE; - } - } Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */ @@ -1410,7 +1255,6 @@ EXEC SQL END DECLARE SECTION; ## SELECT-STATEMENT ## */ - ctype = 0; /* preset */ switch(argc) { @@ -1428,6 +1272,7 @@ EXEC SQL END DECLARE SECTION; break; } + strcpy(Ifx_Result->cursorid, cursorid); Ifx_Result->iscursory = 1; Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */ @@ -1439,10 +1284,9 @@ EXEC SQL END DECLARE SECTION; EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); - php_error(E_WARNING, "%s(): Can not get descriptor %s (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get descriptor %s (%s)", descrpid, ifx_error(ifx)); RETURN_FALSE; } - Ifx_Result->numcols = fieldcount; Ifx_Result->isscroll = Ifx_Result->ishold = 0; @@ -1482,7 +1326,6 @@ EXEC SQL BEGIN DECLARE SECTION; char *cursorid; /* query cursor id */ char *statemid; /* statement id */ char *descrpid; /* descriptor id */ - char *i_descrpid; /* descriptor id */ int fieldcount; /* field count */ int i; /* field index */ short fieldtype; @@ -1494,6 +1337,7 @@ $endif; EXEC SQL END DECLARE SECTION; int locind; + char *blobfilename; if(ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)==FAILURE)) { WRONG_PARAM_COUNT; @@ -1507,26 +1351,25 @@ EXEC SQL END DECLARE SECTION; cursorid = Ifx_Result->cursorid; statemid = Ifx_Result->statemid; descrpid = Ifx_Result->descrpid; - i_descrpid = Ifx_Result->i_descrpid; fieldcount = Ifx_Result->numcols; EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); if (Ifx_Result->iscursory < 0) { - php_error(E_WARNING, "%s(): Resultindex %d is not a prepared query", get_active_function_name(TSRMLS_C), Z_LVAL_PP(result)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Resultindex %d is not a prepared query", Z_LVAL_PP(result)); RETURN_FALSE; } if (Ifx_Result->iscursory==0) { /* execute immediate */ if(Ifx_Result->paramquery!=0) { - EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid; + EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid; } else { EXEC SQL EXECUTE :statemid; } if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Execute immediate fails: %s", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails: %s", ifx_error(ifx)); RETURN_FALSE; } Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */ @@ -1548,14 +1391,14 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Declare cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor fails (%s)", ifx_error(ifx)); RETURN_FALSE; } EXEC SQL OPEN :cursorid; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Open cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_error(ifx)); RETURN_FALSE; } @@ -1571,28 +1414,25 @@ $endif; int bid = 0; if(fieldtype==SQLTEXT) { - if(IFXG(blobinfile)==0) { - bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC); - locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); - } else { - bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE,"", -1,&EG(regular_list) TSRMLS_CC); - locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); - } + bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC); + locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; } - else if(fieldtype==SQLBYTES) { + if(fieldtype==SQLBYTES) { if(IFXG(blobinfile)==0) { bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC); locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); } else { - bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE,"", -1,&EG(regular_list) TSRMLS_CC); + blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC); + bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC); locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC); + locator->loc_oflags=LOC_WONLY; } EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; } $ifdef HAVE_IFX_IUS; if(fieldtype==SQLUDTFIXED) { - bid=php_intifxus_new_slob(&EG(regular_list)); + bid=php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC); slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC); EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator; } @@ -1686,7 +1526,7 @@ PHP_FUNCTION(ifx_errormsg) rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen); if (msglen > maxmsglen) { maxmsglen = msglen + 1; - efree(ifx_errmsg); + free(ifx_errmsg); ifx_errmsg = (char *)malloc(maxmsglen + 1); rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen); } @@ -1696,7 +1536,7 @@ PHP_FUNCTION(ifx_errormsg) returnmsg = (char *) emalloc(strlen(ifx_errmsg) + 128); sprintf(returnmsg,ifx_errmsg, sqlca.sqlerrm); - efree(ifx_errmsg); + free(ifx_errmsg); RETURN_STRING(returnmsg,0); } /* }}} */ @@ -1785,6 +1625,7 @@ EXEC SQL END DECLARE SECTION; char string_data[256]; long long_data; char *p; + char *blobfilename; char *fetch_pos; char *nullstr; @@ -1819,7 +1660,7 @@ EXEC SQL END DECLARE SECTION; IFXG(sv_sqlcode) = 0; if (strcmp(Ifx_Result->cursorid,"") == 0) { - php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!"); RETURN_FALSE; } @@ -1832,27 +1673,6 @@ EXEC SQL END DECLARE SECTION; EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); - locind = 0; - for (i = 1; i <= Ifx_Result->numcols; i++) { - - EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE; - if (fieldtype == SQLBYTES || fieldtype == SQLTEXT) { - bid_b = Ifx_Result->res_id[locind]; - if ((locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_C)) == NULL) { - php_error(E_WARNING, "%s(): Cant get BLOB from Result Set!", get_active_function_name(TSRMLS_C)); - RETURN_FALSE; - } - locind++; - - if(IFXG(blobinfile)==0) { - php_intifx_init_blob(locator_b, BLMODE_INMEM, 1); - } else { - php_intifx_init_blob(locator_b, BLMODE_INFILE, 1); - } - EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator_b; - } - } - if (!Ifx_Result->isscroll) { EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid; } else { @@ -1874,7 +1694,7 @@ EXEC SQL END DECLARE SECTION; } else if (!strcasecmp(fetch_pos,"CURRENT")) { EXEC SQL FETCH CURRENT :cursorid USING SQL DESCRIPTOR :descrpid; } else { - php_error(E_WARNING, "%s(): Invalid positioning arg on fetch", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid positioning arg on fetch"); } } } @@ -1883,7 +1703,7 @@ EXEC SQL END DECLARE SECTION; switch (ifx_check()) { case IFX_ERROR: IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Can not fetch row on cursor %s (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx), cursorid); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch row on cursor %s (%s)", ifx_error(ifx), cursorid); RETURN_FALSE; break; case IFX_NODATA: @@ -1895,9 +1715,7 @@ EXEC SQL END DECLARE SECTION; } Ifx_Result->rowid++; - if (array_init(return_value)==FAILURE) { - RETURN_FALSE; - } + array_init(return_value); num_fields = fieldcount; locind = 0; @@ -1910,7 +1728,7 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx)); RETURN_FALSE; } @@ -1925,12 +1743,10 @@ EXEC SQL END DECLARE SECTION; if( (IFXG(textasvarchar)==0 && fieldtype==SQLTEXT) || (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) { bid_b=Ifx_Result->res_id[locind]; - locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC); bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC); php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC); add_assoc_long(return_value,fieldname,bid); ++locind; - php_intifx_release_blob(locator_b TSRMLS_C); continue; } if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES) @@ -1938,10 +1754,7 @@ $ifdef HAVE_IFX_IUS; || (fieldtype==SQLUDTFIXED) $endif; ) { - bid_b=Ifx_Result->res_id[locind]; - locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC); ++locind; - php_intifx_release_blob(locator_b TSRMLS_C); } add_assoc_string(return_value, fieldname, nullstr, DUP); continue; @@ -2013,7 +1826,7 @@ $ifdef HAVE_IFX_IUS; fieldleng=ifx_var_getlen(&lvar_tmp); if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */ if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) { - php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory"); RETURN_FALSE; } memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng); @@ -2027,7 +1840,7 @@ $endif; case SQLCHAR : case SQLNCHAR : if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) { - php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory"); RETURN_FALSE; } EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA; @@ -2042,7 +1855,7 @@ $ifdef HAVE_IFX_IUS; case SQLUDTFIXED : bid_b=Ifx_Result->res_id[locind]; add_assoc_long(return_value,fieldname,bid_b); - bid=php_intifxus_new_slob(&EG(regular_list)); + bid=php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC); slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC); EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator; Ifx_Result->res_id[locind]=bid; @@ -2054,14 +1867,6 @@ $endif; bid_b=Ifx_Result->res_id[locind]; locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC); ++locind; - - if(IFXG(blobinfile)==0) { - php_intifx_init_blob(locator_b, BLMODE_INMEM, 0); - } - else { - php_intifx_init_blob(locator_b, BLMODE_INFILE, 0); - } - EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA; /* work around for ESQL/C bug with NULL values and BLOBS */ @@ -2073,10 +1878,10 @@ $endif; if (locator_b->loc_indicator == -1) { if((IFXG(textasvarchar)==0 && fieldtype==SQLTEXT) || (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) { + bid_b=Ifx_Result->res_id[locind]; bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC); php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC); add_assoc_long(return_value,fieldname,bid); - php_intifx_release_blob(locator_b TSRMLS_C); break; } if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES) @@ -2085,16 +1890,26 @@ $ifdef HAVE_IFX_IUS; $endif; ) { add_assoc_string(return_value, fieldname, nullstr, DUP); - php_intifx_release_blob(locator_b TSRMLS_C); break; } } if (locator_b->loc_status < 0) { /* blob too large */ - php_error(E_WARNING, "%s(): No memory (%d bytes) for blob", get_active_function_name(TSRMLS_C), locator_b->loc_bufsize); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No memory (%d bytes) for blob", locator_b->loc_bufsize); RETURN_FALSE; } + /* copy blob */ + bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC); + + /* and generate new tempfile for next row */ + if(locator_b->loc_loctype==LOCFNAME) { + blobfilename=php_intifx_create_tmpfile(bid_b TSRMLS_CC); + php_intifx_update_blob(bid_b,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC); + efree(blobfilename); + EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator_b; + } + /* return blob as VARCHAR ? */ /* note that in case of "blobinfile" */ /* you get the file name */ @@ -2107,32 +1922,18 @@ $endif; char *content; long lg; - lg=php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC); + lg=php_intifx_get_blob(bid, &EG(regular_list), &content TSRMLS_CC); if(content == NULL || lg < 0) { add_assoc_string(return_value,fieldname,nullstr,DUP); } else { add_assoc_stringl(return_value,fieldname,content,lg,DUP); } - - if (locator_b->loc_loctype == LOCMEMORY) { - locator_b->loc_buffer = NULL; - } - php_intifx_release_blob(locator_b TSRMLS_C); + php_intifx_free_blob(bid, &EG(regular_list) TSRMLS_CC); break; } - /* copy blob */ - bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC); - /* no, return as blob id */ add_assoc_long(return_value,fieldname,bid); - - if (locator_b->loc_loctype == LOCMEMORY) { - locator_b->loc_buffer = NULL; - } - - php_intifx_release_blob(locator_b TSRMLS_C); - break; default : sprintf(string_data,"ESQL/C : %s : unsupported field type[%d]", fieldname, fieldleng); @@ -2223,7 +2024,7 @@ EXEC SQL END DECLARE SECTION; ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result); if (strcmp(Ifx_Result->cursorid,"") == 0) { - php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!"); RETURN_FALSE; } @@ -2241,7 +2042,7 @@ EXEC SQL END DECLARE SECTION; switch (ifx_check()) { case IFX_ERROR: IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Can not fetch next row on cursor %s (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx), cursorid); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid); RETURN_FALSE; break; case IFX_NODATA: @@ -2271,7 +2072,7 @@ EXEC SQL END DECLARE SECTION; EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx)); RETURN_FALSE; } @@ -2298,7 +2099,7 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx)); RETURN_FALSE; } @@ -2377,7 +2178,7 @@ $ifdef HAVE_IFX_IUS; if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */ if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) { - php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory"); RETURN_FALSE; } memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng); @@ -2391,7 +2192,7 @@ $endif; case SQLNCHAR : case SQLNVCHAR : if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) { - php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory"); RETURN_FALSE; } EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA; @@ -2427,7 +2228,7 @@ $endif; } } if (locator_b->loc_status < 0) { /* blob too large */ - php_error(E_WARNING, "%s(): Not enough memory (%d bytes) for blob", get_active_function_name(TSRMLS_C), locator_b->loc_bufsize); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough memory (%d bytes) for blob", locator_b->loc_bufsize); RETURN_FALSE; } @@ -2438,15 +2239,15 @@ $endif; php_printf("%s", nullstr); } else { /* need an extra byte for string terminator */ - copy_content = emalloc(lg + 1); + copy_content = malloc(lg + 1); if (copy_content == NULL) { - php_error(E_WARNING, "%s(): Not enough memory for TEXT column", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough memory for TEXT column"); RETURN_FALSE; } memcpy(copy_content, content, lg); copy_content[lg]=0; php_printf("%s", copy_content); - efree(copy_content); + free(copy_content); } break; @@ -2467,7 +2268,7 @@ $endif; switch (ifx_check()) { case IFX_ERROR: IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Can not fetch next row on cursor %s (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx), cursorid); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid); RETURN_FALSE; break; case IFX_NODATA: @@ -2523,7 +2324,7 @@ EXEC SQL END DECLARE SECTION; ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result); if (strcmp(Ifx_Result->cursorid,"") == 0) { - php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!"); RETURN_FALSE; } @@ -2536,15 +2337,13 @@ EXEC SQL END DECLARE SECTION; EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); - if (array_init(return_value)==FAILURE) { - RETURN_FALSE; - } + array_init(return_value); num_fields = fieldcount; for (i = 1; i <= num_fields; i++) { EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME, :fieldtype = TYPE; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx)); RETURN_FALSE; } @@ -2681,7 +2480,7 @@ EXEC SQL END DECLARE SECTION; ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result); if (strcmp(Ifx_Result->cursorid,"") == 0) { - php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!"); RETURN_FALSE; } @@ -2694,9 +2493,7 @@ EXEC SQL END DECLARE SECTION; EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); - if (array_init(return_value)==FAILURE) { - RETURN_FALSE; - } + array_init(return_value); num_fields = fieldcount; for (i = 1; i <= num_fields; i++) { @@ -2709,7 +2506,7 @@ EXEC SQL END DECLARE SECTION; if (ifx_check() < 0) { IFXG(sv_sqlcode) = SQLCODE; - php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx)); RETURN_FALSE; } @@ -2852,9 +2649,7 @@ PHP_FUNCTION(ifx_getsqlca) ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result); /* create pseudo-row array to return */ - if (array_init(return_value)==FAILURE) { - RETURN_FALSE; - } + array_init(return_value); /* fill array with 6 fields sqlerrd0 .. sqlerrd5 */ /* each ESQLC call saves these sqlca values */ @@ -2927,7 +2722,7 @@ EXEC SQL END DECLARE SECTION; for (i = 0; i < MAX_RESID; ++i) { if (Ifx_Result->res_id[i]>0) { - zend_list_delete(Ifx_Result->res_id[i]); + php_intifx2_free_blob(Ifx_Result->res_id[i],&EG(regular_list) TSRMLS_CC); Ifx_Result->res_id[i]=-1; } } @@ -2937,7 +2732,7 @@ EXEC SQL END DECLARE SECTION; statemid = Ifx_Result->statemid; descrpid = Ifx_Result->descrpid; - EXEC SQL set connection :ifx; + EXEC SQL set connection :ifx; PHP_IFX_CHECK_CONNECTION(ifx); EXEC SQL free :statemid; @@ -2972,7 +2767,7 @@ static long php_intifx_getType(long id, HashTable *list TSRMLS_DC) Ifx_res = (IFX_IDRES *) zend_list_find(id,&type); if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix id-result index", get_active_function_name(TSRMLS_C), id); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix id-result index", id); return -1; } return Ifx_res->type; @@ -2994,29 +2789,29 @@ static long php_intifx_getType(long id, HashTable *list TSRMLS_DC) Creates a blob-object */ PHP_FUNCTION(ifx_create_blob) { - zval *pmode, *pparam,*ptype; + zval **pmode, **pparam,**ptype; long id; long mode,type; - if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &ptype,&pmode,&pparam)==FAILURE) { + if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &ptype,&pmode,&pparam) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); - convert_to_string(pparam); - convert_to_long(ptype); + convert_to_long_ex(pmode); + convert_to_string_ex(pparam); + convert_to_long_ex(ptype); - type=Z_LVAL_P(ptype); + type = Z_LVAL_PP(ptype); if(type != 0) { - type=TYPE_BLTEXT; + type = TYPE_BLTEXT; } - mode=Z_LVAL_P(pmode); + mode = Z_LVAL_PP(pmode); if(mode != 0) { mode=BLMODE_INFILE; } - id=php_intifx_create_blob(type,mode,Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC); + id=php_intifx_create_blob(type,mode,Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC); if(id < 0) { RETURN_FALSE; @@ -3029,7 +2824,7 @@ PHP_FUNCTION(ifx_create_blob) * internal function * long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC) * - * creates an blob-object for the PHP Resource list + * creates an blob-object * type: 1=TEXT, 0=BYTE * mode: blob-object holds 0=the content in momory, 1=content in file * param: if mode=0: pointer to the content @@ -3045,7 +2840,7 @@ static long php_intifx_create_blob(long type, long mode, char* param, long len, Ifx_blob=emalloc(sizeof(IFX_IDRES)); if(Ifx_blob==NULL) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } @@ -3058,121 +2853,42 @@ static long php_intifx_create_blob(long type, long mode, char* param, long len, } Ifx_blob->BLOB.mode=(int)mode; - if (php_intifx_init_blob(&Ifx_blob->BLOB.blob_data, mode, 1) < 0) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); - return -1; - } - if(mode==BLMODE_INMEM) { if(len>=0) { char *content=emalloc(len); if(content==NULL) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } memcpy(content,param,len); + Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY; Ifx_blob->BLOB.blob_data.loc_buffer=content; Ifx_blob->BLOB.blob_data.loc_bufsize=len; Ifx_blob->BLOB.blob_data.loc_size=len; + Ifx_blob->BLOB.blob_data.loc_mflags=0; + Ifx_blob->BLOB.blob_data.loc_oflags=0; + } else { + Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY; + Ifx_blob->BLOB.blob_data.loc_buffer=NULL; + Ifx_blob->BLOB.blob_data.loc_bufsize=-1; + Ifx_blob->BLOB.blob_data.loc_size=-1; + Ifx_blob->BLOB.blob_data.loc_mflags=0; Ifx_blob->BLOB.blob_data.loc_oflags=0; } - } - - return zend_list_insert(Ifx_blob,le_idresult); -} - -static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC) { - - if (new) { - memset(blob, 0, sizeof(loc_t)); - } - - blob->loc_status = 0; - blob->loc_type = SQLTEXT; - blob->loc_xfercount = 0; - blob->loc_indicator = 0; - - if (mode == BLMODE_INMEM) { - return php_intifx_init_blob_inmem(blob, new); - } - else { - return php_intifx_init_blob_infile(blob, new); - } - - return 1; -} - -static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC) { - - blob->loc_loctype=LOCMEMORY; - - if (new) { - blob->loc_buffer=NULL; - blob->loc_bufsize=-1; - blob->loc_size=0; - } - blob->loc_mflags=0; - blob->loc_oflags=0; - - return 1; -} - -static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC) { - - char *filename; - - if (new) { - filename = php_intifx_create_tmpfile(TSRMLS_C); + } else { /* mode = BLMODE_INFILE */ + char *filename=emalloc(len+1); if(filename==NULL) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } - blob->loc_fname = filename; - blob->loc_size = 0; - blob->loc_fd = -1; - } - - blob->loc_loctype = LOCFNAME; - blob->lc_union.lc_file.lc_mode = 0666; - blob->loc_oflags = LOC_WONLY | LOC_RONLY; - - return 1; -} - -static void php_intifx_release_blob(loc_t *blob TSRMLS_DC) { - - switch (blob->loc_loctype) { - - case LOCMEMORY: - - if (blob->loc_buffer != NULL) { - efree(blob->loc_buffer); - blob->loc_buffer = NULL; - } - break; - - case LOCFNAME: - - if (blob->loc_fd >= 0) { - close(blob->loc_fd); - } - blob->loc_fd = -1; - - if (blob->loc_fname != NULL) { - unlink(blob->loc_fname); - efree(blob->loc_fname); - blob->loc_fname = NULL; - } - - break; - - case LOCFILE: - case LOCUSER: - default: - break; - + memcpy(filename,param,len); + filename[len]=0; + Ifx_blob->BLOB.blob_data.loc_loctype=LOCFNAME; + Ifx_blob->BLOB.blob_data.loc_fname=filename; + Ifx_blob->BLOB.blob_data.loc_oflags=LOC_WONLY; + Ifx_blob->BLOB.blob_data.loc_size=-1; } - + return zend_list_insert(Ifx_blob,le_idresult); } /* ---------------------------------------------------------------------- @@ -3189,15 +2905,15 @@ static void php_intifx_release_blob(loc_t *blob TSRMLS_DC) { Duplicates the given blob-object */ PHP_FUNCTION(ifx_copy_blob) { - zval *pbid; + zval **pbid; long newid; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) { + if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pbid)==FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); + convert_to_long_ex(pbid); - newid=php_intifx_copy_blob(Z_LVAL_P(pbid),&EG(regular_list) TSRMLS_CC); + newid=php_intifx_copy_blob(Z_LVAL_PP(pbid),&EG(regular_list) TSRMLS_CC); if(newid<0) { RETURN_FALSE; } @@ -3209,7 +2925,7 @@ PHP_FUNCTION(ifx_copy_blob) * internal function * long php_intifx_copy_blob(long bid, HashTable *list) * - * duplicates the given blob-object in the PHP resource list + * duplicates the given blob-object * bid: Id of Blobobject * list: internal hashlist of php * @@ -3223,19 +2939,14 @@ static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC) int type; Ifx_blob_orig = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING,"%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (!(Ifx_blob_orig->type==TYPE_BLBYTE || Ifx_blob_orig->type==TYPE_BLTEXT)) { - php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || !(Ifx_blob_orig->type==TYPE_BLBYTE || Ifx_blob_orig->type==TYPE_BLTEXT)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid); return -1; } Ifx_blob=emalloc(sizeof(IFX_IDRES)); if(Ifx_blob==NULL) { - php_error(E_WARNING,"%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } @@ -3247,33 +2958,39 @@ static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC) locator=&(Ifx_blob->BLOB.blob_data); locator_orig=&(Ifx_blob_orig->BLOB.blob_data); - if (php_intifx_init_blob(locator, Ifx_blob->BLOB.mode, 1) < 0) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); - return -1; - } - if(Ifx_blob->BLOB.mode==BLMODE_INMEM) { char *content; - - if(locator_orig->loc_bufsize>=0 && locator_orig->loc_buffer!=NULL) { + if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) { if((content=emalloc(locator_orig->loc_size))==NULL) { - php_error(E_WARNING,"%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } - memcpy(content,locator_orig->loc_buffer, locator_orig->loc_bufsize); + memcpy(content,locator_orig->loc_buffer, locator_orig->loc_size); locator->loc_buffer=content; - locator->loc_bufsize=locator_orig->loc_bufsize; + locator->loc_bufsize=locator_orig->loc_size; locator->loc_size=locator_orig->loc_size; - } - } - else { /* BLMODE_INFILE */ + } else { + locator->loc_buffer=NULL; + locator->loc_bufsize=-1; + locator->loc_size=-1; + } + locator->loc_loctype=LOCMEMORY; + locator->loc_mflags=0; + locator->loc_oflags=0; + } else { /* BLMODE_INFILE */ + char *filename; - if (locator_orig->loc_size) { - php_copy_file(locator_orig->loc_fname, locator->loc_fname TSRMLS_C); + if((filename=emalloc(strlen(locator_orig->loc_fname)+1))==NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); + return -1; } + strcpy(filename,locator_orig->loc_fname); + locator->loc_loctype=LOCFNAME; + locator->loc_fname=filename; + locator->loc_size=-1; + locator->loc_oflags=locator_orig->loc_oflags; } - return zend_list_insert(Ifx_blob,le_idresult); } @@ -3290,15 +3007,15 @@ static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC) Deletes the blob-object */ PHP_FUNCTION(ifx_free_blob) { - zval *pid; + zval **pid; long ret; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pid); + convert_to_long_ex(pid); - ret=php_intifx_free_blob(pid->value.lval,&EG(regular_list) TSRMLS_CC); + ret=php_intifx_free_blob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC); if(ret<0) { RETURN_FALSE; } @@ -3310,7 +3027,7 @@ PHP_FUNCTION(ifx_free_blob) * internal function * long php_intifx_free_blob(long bid, HashTable *list) * - * deletes the blob-object from the PHP Resource List + * deletes the blob-object * bid: Id of Blobobject * list: internal hashlist of php * @@ -3324,22 +3041,69 @@ static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC) int type; Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid); return -1; } - if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { - php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid); + if(Ifx_blob->BLOB.mode==BLMODE_INMEM) { + if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else { + efree(Ifx_blob->BLOB.blob_data.loc_buffer); + } + } else { /* BLMODE_INFILE */ + if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) { + efree(Ifx_blob->BLOB.blob_data.loc_fname); + } + } + zend_list_delete(bid); + efree(Ifx_blob); + return 0; +} + +/* ---------------------------------------------------------------------- + * internal function + * long php_intifx2_free_blob(long bid, HashTable *list) + * + * deletes the blob-object + * bid: Id of Blobobject + * list: internal hashlist of php + * + * return -1 on error otherwise 0 + * FREES BYTE-MEMORY WITH FREE(), for blob memory allocated by ESQL/C + * use this for freeing blob-source after select (in ifx_free_result) + * ---------------------------------------------------------------------- +*/ +static long php_intifx2_free_blob(long bid, HashTable *list TSRMLS_DC) +{ + IFX_IDRES *Ifx_blob; + int type; + + Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type); + if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid); return -1; } - zend_list_delete(bid); +#if IFX_VERSION < 724 /* this Informix memory leak is fixed from 7.24 on */ + /* according to the current PERL DBD::Informix */ + /* and otherwise I get segmenation violations with 7.30 */ + if(Ifx_blob->BLOB.mode==BLMODE_INMEM) { + if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else { + free(Ifx_blob->BLOB.blob_data.loc_buffer); + } + } else { + if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) { + efree(Ifx_blob->BLOB.blob_data.loc_fname); + } + } +#endif + + zend_list_delete(bid); + efree(Ifx_blob); return 0; } - /* ---------------------------------------------------------------------- ** string ifx_get_blob(int bid) ** @@ -3353,16 +3117,16 @@ static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC) Returns the content of the blob-object */ PHP_FUNCTION(ifx_get_blob) { - zval *pbid; + zval **pbid; char *content; long len; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); + convert_to_long_ex(pbid); - len=php_intifx_get_blob(pbid->value.lval,&EG(regular_list),&content TSRMLS_CC); + len=php_intifx_get_blob(Z_LVAL_PP(pbid),&EG(regular_list),&content TSRMLS_CC); if(content==NULL || len<0) { RETURN_STRING(php_intifx_null(TSRMLS_C),1); } @@ -3388,13 +3152,8 @@ static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS int type; Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { - php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid); return -1; } @@ -3422,16 +3181,10 @@ static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC) int type; Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid); return NULL; } - - if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { - php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid); - return NULL; - } - return &(Ifx_blob->BLOB.blob_data); } @@ -3451,15 +3204,15 @@ static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC) Updates the content of the blob-object */ PHP_FUNCTION(ifx_update_blob) { - zval *pbid, *pparam; + zval **pbid, **pparam; - if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid,&pparam)==FAILURE) { + if (ZEND_NUM_ARGS() !=2 || zend_get_parameters_ex(2, &pbid,&pparam) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); - convert_to_string(pparam); + convert_to_long_ex(pbid); + convert_to_string_ex(pparam); - if(php_intifx_update_blob(Z_LVAL_P(pbid),Z_STRVAL_P(pparam),Z_STRLEN_P(pparam), &EG(regular_list) TSRMLS_CC) < 0) { + if(php_intifx_update_blob(Z_LVAL_PP(pbid),Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) { RETURN_FALSE; } RETURN_TRUE; @@ -3484,13 +3237,8 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l int type; Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING,"%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { - php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid); return -1; } @@ -3502,7 +3250,7 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l } if(len >= 0) { if((content=emalloc(len))==NULL) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } memcpy(content,param, len); @@ -3523,7 +3271,7 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l efree(Ifx_blob->BLOB.blob_data.loc_fname); } if((filename=emalloc(len+1))==NULL) { - php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource"); return -1; } memcpy(filename,param, len); @@ -3537,11 +3285,11 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l /*------------------------------------------------- * internal function * - * php_intifx_create_tmpfile(TSRMLS_DC) + * php_intifx_create_tmpfile(long bid TSRMLS_DC) * creates a temporary file to store a blob in *------------------------------------------------- */ -static char* php_intifx_create_tmpfile(TSRMLS_DC) +static char* php_intifx_create_tmpfile(long bid TSRMLS_DC) { char filename[10]; char *blobdir; @@ -3552,12 +3300,11 @@ static char* php_intifx_create_tmpfile(TSRMLS_DC) if ((blobdir = getenv("php_blobdir")) == NULL) { blobdir="."; } - sprintf(filename,"blb"); + sprintf(filename,"blb%d",(int)bid); if ((fp = php_open_temporary_file(blobdir, filename, &opened_path TSRMLS_CC))) { fclose(fp); retval=estrndup(opened_path, strlen(opened_path)); - efree(opened_path); } else { retval=NULL; } @@ -3578,14 +3325,14 @@ static char* php_intifx_create_tmpfile(TSRMLS_DC) Sets the default blob-mode for all select-queries */ PHP_FUNCTION(ifx_blobinfile_mode) { - zval *pmode; + zval **pmode; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); + convert_to_long_ex(pmode); - IFXG(blobinfile)=Z_LVAL_P(pmode); + IFXG(blobinfile)=Z_LVAL_PP(pmode); RETURN_TRUE; } /* }}} */ @@ -3604,14 +3351,14 @@ PHP_FUNCTION(ifx_blobinfile_mode) Sets the default text-mode for all select-queries */ PHP_FUNCTION(ifx_textasvarchar) { - zval *pmode; + zval **pmode; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); + convert_to_long_ex(pmode); - IFXG(textasvarchar)=Z_LVAL_P(pmode); + IFXG(textasvarchar)=Z_LVAL_PP(pmode); RETURN_TRUE; } /* }}} */ @@ -3630,14 +3377,14 @@ PHP_FUNCTION(ifx_textasvarchar) Sets the default byte-mode for all select-queries */ PHP_FUNCTION(ifx_byteasvarchar) { - zval *pmode; + zval **pmode; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); + convert_to_long_ex(pmode); - IFXG(byteasvarchar)=Z_LVAL_P(pmode); + IFXG(byteasvarchar)=Z_LVAL_PP(pmode); RETURN_TRUE; } @@ -3655,154 +3402,19 @@ PHP_FUNCTION(ifx_byteasvarchar) Sets the default return value of a NULL-value on a fetch-row */ PHP_FUNCTION(ifx_nullformat) { - zval *pmode; + zval **pmode; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); + convert_to_long_ex(pmode); - IFXG(nullformat)=Z_LVAL_P(pmode); + IFXG(nullformat)=Z_LVAL_PP(pmode); RETURN_TRUE; } /* }}} */ -/* ---------------------------------------------------------------------- - * int php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC) - * - * Allocates descriptors for input parameters - * return 0 for error. 1 for ok - * ---------------------------------------------------------------------- -*/ -static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC) { - - EXEC SQL BEGIN DECLARE SECTION; - char *i_bind = Ifx_Result->i_descrpid; - int bind_size = items; - EXEC SQL END DECLARE SECTION; - - if (items > Ifx_Result->numicols) { - - if (Ifx_Result->numicols > 0) { - EXEC SQL DEALLOCATE DESCRIPTOR :i_bind; - if (ifx_check() < 0) { - return 0; - } - } - - EXEC SQL ALLOCATE DESCRIPTOR :i_bind WITH MAX :bind_size; - if (ifx_check() < 0) { - return 0; - } - - Ifx_Result->numicols = items; - } - - return 1; - -} - -/* ---------------------------------------------------------------------- - * int php_intifx_preparse(char *statement TSRMLS_DC) - * - * Count the placeholders (?) parameters in the statement - * return -1 for error. 0 or number of question marks - * ---------------------------------------------------------------------- -*/ -static long php_intifx_preparse(char *statement TSRMLS_DC) { - - - char end_quote = '\0'; - char *src; - char *dst; - int idx = 0; - int style = 0; - int laststyle = 0; - char ch; - - src = statement; - dst = statement; - while ((ch = *src++) != '\0') - { - if (ch == end_quote) - end_quote = '\0'; - else if (end_quote != '\0') - { - *dst++ = ch; - continue; - } - else if (ch == '\'' || ch == '\"') - end_quote = ch; - else if (ch == '{') - end_quote = '}'; - else if (ch == '-' && *src == '-') - { - end_quote = '\n'; - } - if (ch == '?') - { - /* X/Open standard */ - *dst++ = '?'; - idx++; - style = 3; - } - else - { - /* Perhaps ':=' PL/SQL construct or dbase:table in Informix */ - /* Or it could be :2 or :22 as part of a DATETIME/INTERVAL */ - *dst++ = ch; - continue; - } - if (laststyle && style != laststyle) - return -1; - - laststyle = style; - } - - *dst = '\0'; - return(idx); - -} - - -/* ---------------------------------------------------------------------- - * int php_intifx_count_descriptors(char *p_statemid TSRMLS_DC) - * - * count the number of descriptors allocated for a certain statement - * return 384 or number of descriptors - * ---------------------------------------------------------------------- -*/ -static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC) { - - EXEC SQL BEGIN DECLARE SECTION; - char *statemid = p_statemid; - EXEC SQL END DECLARE SECTION; - - struct sqlda *s_da; - int ret = 384; - - EXEC SQL DESCRIBE :statemid INTO s_da; - - if (ifx_check() >= 0) { - - ret = s_da->sqld; - -/* - * Thanks to DBD-Informix - */ - -#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION < 600)) - SqlFreeMem(s_da, SQLDA_FREE); -#else - free(s_da); -#endif - } - - return ret; - -} - /* ---------------------------------------------------------------------- * void php_intifx_null() * @@ -3835,15 +3447,15 @@ static char* php_intifx_null(TSRMLS_D) Creates a char-object */ PHP_FUNCTION(ifx_create_char) { - zval *pparam; + zval **pparam; long id; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pparam)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pparam) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_string(pparam); + convert_to_string_ex(pparam); - id=php_intifx_create_char(Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC); + id=php_intifx_create_char(Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC); if(id < 0) { RETURN_FALSE; @@ -3869,7 +3481,7 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS Ifx_char=emalloc(sizeof(IFX_IDRES)); if(Ifx_char==NULL) { - php_error(E_WARNING, "%s(): Can't create char-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource"); return -1; } @@ -3882,7 +3494,7 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS Ifx_char->CHAR.char_data=emalloc(len+1); if(Ifx_char->CHAR.char_data==NULL) { efree(Ifx_char); - php_error(E_WARNING, "%s(): Can't create char-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource"); return -1; } memcpy(Ifx_char->CHAR.char_data,param,len); @@ -3905,16 +3517,16 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS Returns the content of the char-object */ PHP_FUNCTION(ifx_get_char) { - zval *pbid; + zval **pbid; char *content; long len; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); + convert_to_long_ex(pbid); - len=php_intifx_get_char(Z_LVAL_P(pbid),&EG(regular_list),&content TSRMLS_CC); + len=php_intifx_get_char(Z_LVAL_PP(pbid),&EG(regular_list),&content TSRMLS_CC); if(content==NULL || len < 0) { RETURN_STRING("",1); } @@ -3940,17 +3552,11 @@ static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS int type; Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix char-result index", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid); return -1; } - if (!Ifx_char->type==TYPE_CHAR) { - php_error(E_WARNING, "%s(): %d is not a Informix CHAR type", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - *content=Ifx_char->CHAR.char_data; return Ifx_char->CHAR.len; } @@ -3968,14 +3574,14 @@ static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS Deletes the char-object */ PHP_FUNCTION(ifx_free_char) { - zval *pid; + zval **pid; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pid); + convert_to_long_ex(pid); - if(php_intifx_free_char(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) { + if(php_intifx_free_char(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) { RETURN_FALSE; } RETURN_TRUE; @@ -3999,13 +3605,8 @@ static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC) int type; Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix char-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (!Ifx_char->type==TYPE_CHAR) { - php_error(E_WARNING, "%s(): %d is not a Informix CHAR type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid); return -1; } @@ -4031,15 +3632,15 @@ static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC) Updates the content of the char-object */ PHP_FUNCTION(ifx_update_char) { - zval *pbid,*pparam; + zval **pbid, **pparam; - if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid,&pparam)==FAILURE) { + if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid,&pparam) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); - convert_to_string(pparam); + convert_to_long_ex(pbid); + convert_to_string_ex(pparam); - if(php_intifx_update_char(Z_LVAL_P(pbid),Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC) < 0) { + if(php_intifx_update_char(Z_LVAL_PP(pbid),Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC) < 0) { RETURN_FALSE; } RETURN_TRUE; @@ -4064,13 +3665,8 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l int type; Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix char-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (!Ifx_char->type==TYPE_CHAR) { - php_error(E_WARNING, "%s(): %d is not a Informix CHAR type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid); return -1; } @@ -4086,7 +3682,7 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l } else { Ifx_char->CHAR.char_data=emalloc(len+1); if(Ifx_char->CHAR.char_data==NULL) { - php_error(E_WARNING, "%s(): Can't create char-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource"); return -1; } memcpy(Ifx_char->CHAR.char_data,param,len); @@ -4096,7 +3692,6 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l return 0; } - $ifdef HAVE_IFX_IUS; /* ---------------------------------------------------------------------- @@ -4112,15 +3707,15 @@ $ifdef HAVE_IFX_IUS; Creates a slob-object and opens it */ PHP_FUNCTION(ifxus_create_slob) { - zval *pmode; + zval **pmode; long id; long mode,create_mode; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) { + if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pmode)==FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); - mode=Z_LVAL_P(pmode); + convert_to_long_ex(pmode); + mode=Z_LVAL_PP(pmode); create_mode=0; if((mode&1) !=0) @@ -4136,7 +3731,7 @@ PHP_FUNCTION(ifxus_create_slob) if((mode&32) !=0) create_mode|=LO_NOBUFFER; - id=php_intifxus_create_slob(create_mode,&EG(regular_list)); + id = php_intifxus_create_slob(create_mode, &EG(regular_list) TSRMLS_CC); if(id < 0) { RETURN_FALSE; @@ -4162,20 +3757,20 @@ static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC Ifx_slob=emalloc(sizeof(IFX_IDRES)); if(Ifx_slob==NULL) { - php_error(E_WARNING, "%s(): Can't create slob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource"); return -1; } errcode=ifx_lo_def_create_spec(&(Ifx_slob->SLOB.createspec)); if(errcode<0) { - php_error(E_WARNING, "%s(): Can't create slob-resource: %d", get_active_function_name(TSRMLS_C), errcode); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode); return -1; } Ifx_slob->type=TYPE_SLOB; Ifx_slob->SLOB.lofd=ifx_lo_create(Ifx_slob->SLOB.createspec,create_mode,&(Ifx_slob->SLOB.slob_data),&errcode); if(errcode<0 || Ifx_slob->SLOB.lofd<0) { - php_error(E_WARNING, "%s(): Can't create slob-resource: %d", get_active_function_name(TSRMLS_C), errcode); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode); return -1; } return zend_list_insert(Ifx_slob,le_idresult); @@ -4194,14 +3789,14 @@ static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC Deletes the slob-object */ PHP_FUNCTION(ifxus_free_slob) { - zval *pid; + zval **pid; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) { + if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pid); + convert_to_long_ex(pid); - if(php_intifxus_free_slob(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) { + if(php_intifxus_free_slob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) { RETURN_FALSE; } RETURN_TRUE; @@ -4225,16 +3820,11 @@ static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC) int type; Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); return -1; } - + if(php_intifxus_close_slob(bid, &EG(regular_list) TSRMLS_CC) < 0) { return -1; } @@ -4261,13 +3851,13 @@ static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC) Deletes the slob-object */ PHP_FUNCTION(ifxus_close_slob) { - zval *pid; + zval **pid; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) { + if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pid); - if(php_intifxus_close_slob(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) { + convert_to_long_ex(pid); + if(php_intifxus_close_slob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) { RETURN_FALSE; } RETURN_TRUE; @@ -4291,23 +3881,18 @@ static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC) int type; Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); return -1; } - + if(Ifx_slob->SLOB.lofd<0) { - php_error(E_WARNING, "%s(): Slob-resource already closed", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already closed"); return -1; } if(ifx_lo_close(Ifx_slob->SLOB.lofd)<0) { - php_error(E_WARNING, "%s(): Can't close slob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't close slob-resource"); return -1; } Ifx_slob->SLOB.lofd=-1; @@ -4328,15 +3913,15 @@ static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC) Opens an slob-object */ PHP_FUNCTION(ifxus_open_slob) { - zval *pbid,*pmode; + zval **pbid, **pmode; long mode,create_mode; - if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 1, &pbid,&pmode)==FAILURE) { + if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(1, &pbid, &pmode) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pmode); - convert_to_long(pbid); - mode=Z_LVAL_P(pmode); + convert_to_long_ex(pmode); + convert_to_long_ex(pbid); + mode=Z_LVAL_PP(pmode); create_mode=0; if((mode&1) !=0) @@ -4352,7 +3937,7 @@ PHP_FUNCTION(ifxus_open_slob) if((mode&32) !=0) create_mode|=LO_NOBUFFER; - RETURN_LONG(php_intifxus_open_slob(Z_LVAL_P(pbid),create_mode,&EG(regular_list) TSRMLS_CC)); + RETURN_LONG(php_intifxus_open_slob(Z_LVAL_PP(pbid),create_mode,&EG(regular_list) TSRMLS_CC)); } /* }}} */ @@ -4374,24 +3959,19 @@ static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list T int type; Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - return -1; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); return -1; } if(Ifx_slob->SLOB.lofd>0) { - php_error(E_WARNING, "%s(): Slob-resource already open", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already open"); return -1; } Ifx_slob->SLOB.lofd=ifx_lo_open(&(Ifx_slob->SLOB.slob_data),create_mode,&errcode); if(errcode < 0 || Ifx_slob->SLOB.lofd < 0) { - php_error(E_WARNING, "%s(): Can't open slob-resource: %d", get_active_function_name(TSRMLS_C), errcode); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't open slob-resource: %d", errcode); return -1; } return 0; @@ -4399,20 +3979,20 @@ static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list T /* ---------------------------------------------------------------------- * internal function - * long php_intifxus_new_slob(HashTable *list) + * long php_intifxus_new_slob(HashTable *list TSRMLS_DC) * * creates an slob-object but don't open it * list: internal hashlist of php * return -1 on error otherwise the new slob-Object-id * ---------------------------------------------------------------------- */ -static long php_intifxus_new_slob(HashTable *list) +static long php_intifxus_new_slob(HashTable *list TSRMLS_DC) { IFX_IDRES *Ifx_slob; Ifx_slob=emalloc(sizeof(IFX_IDRES)); if(Ifx_slob==NULL) { - php_error(E_WARNING, "%s(): Can't create slob-resource", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource"); return -1; } @@ -4437,16 +4017,10 @@ static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC) int type; Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - return NULL; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); return NULL; } - return &(Ifx_slob->SLOB.slob_data); } @@ -4463,37 +4037,32 @@ static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC) Returns the current file or seek position of an open slob-object */ PHP_FUNCTION(ifxus_tell_slob) { - zval *pbid; + zval **pbid; long bid; IFX_IDRES *Ifx_slob; ifx_int8_t akt_seek_pos; int type; long lakt_seek_pos; - if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) { + if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); - bid=Z_LVAL_P(pbid); + convert_to_long_ex(pbid); + bid=Z_LVAL_PP(pbid); Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING,"%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - RETURN_FALSE; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); RETURN_FALSE; } if(ifx_lo_tell(Ifx_slob->SLOB.lofd,&akt_seek_pos)<0) { - php_error(E_WARNING,"%s(): Can't perform tell-operation", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform tell-operation"); RETURN_FALSE; } if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) { - php_error(E_WARNING, "%s(): Seek-position to large for long", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long"); RETURN_FALSE; } RETURN_LONG(lakt_seek_pos); @@ -4515,47 +4084,42 @@ PHP_FUNCTION(ifxus_tell_slob) Sets the current file or seek position of an open slob-object */ PHP_FUNCTION(ifxus_seek_slob) { - zval *pbid, *pmode, *poffset; + zval **pbid, **pmode, **poffset; long bid,lakt_seek_pos; IFX_IDRES *Ifx_slob; ifx_int8_t akt_seek_pos,offset; int type,mode; - if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &pbid, &pmode, &poffset)==FAILURE) { + if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &pbid, &pmode, &poffset) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); - convert_to_long(pmode); - convert_to_long(poffset); + convert_to_long_ex(pbid); + convert_to_long_ex(pmode); + convert_to_long_ex(poffset); - bid=Z_LVAL_P(pbid); + bid=Z_LVAL_PP(pbid); Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - RETURN_FALSE; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); RETURN_FALSE; } mode=LO_SEEK_SET; - if(Z_LVAL_P(pmode)==1) { + if(Z_LVAL_PP(pmode)==1) { mode=LO_SEEK_CUR; } - if(Z_LVAL_P(pmode)==2) { + if(Z_LVAL_PP(pmode)==2) { mode=LO_SEEK_END; } - ifx_int8cvlong(Z_LVAL_P(poffset),&offset); + ifx_int8cvlong(Z_LVAL_PP(poffset),&offset); if(ifx_lo_seek(Ifx_slob->SLOB.lofd,&offset,mode,&akt_seek_pos)<0) { - php_error(E_WARNING, "%s(): Can't perform seek-operation", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform seek-operation"); RETURN_FALSE; } if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) { - php_error(E_WARNING, "%s(): Seek-position to large for long", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long"); RETURN_FALSE; } RETURN_LONG(lakt_seek_pos); @@ -4576,35 +4140,30 @@ PHP_FUNCTION(ifxus_seek_slob) Reads nbytes of the slob-object */ PHP_FUNCTION(ifxus_read_slob) { - zval *pbid, *pnbytes; + zval **pbid, **pnbytes; long bid, nbytes; IFX_IDRES *Ifx_slob; int errcode,type; char *buffer; - if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid, &pnbytes)==FAILURE) { + if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid, &pnbytes) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); - convert_to_long(pnbytes); + convert_to_long_ex(pbid); + convert_to_long_ex(pnbytes); - bid=Z_LVAL_P(pbid); + bid=Z_LVAL_PP(pbid); Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - RETURN_FALSE; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); RETURN_FALSE; } - nbytes=Z_LVAL_P(pnbytes); + nbytes=Z_LVAL_PP(pnbytes); buffer=emalloc(nbytes); if(ifx_lo_read(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode)<0) { efree(buffer); - php_error(E_WARNING, "%s(): Error reading slob: %d", get_active_function_name(TSRMLS_C), errcode); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading slob: %d", errcode); RETURN_FALSE; } RETURN_STRINGL(buffer,nbytes,0); @@ -4625,40 +4184,35 @@ PHP_FUNCTION(ifxus_read_slob) Writes a string into the slob-object */ PHP_FUNCTION(ifxus_write_slob) { - zval *pbid, *pcontent; + zval **pbid, **pcontent; long bid, nbytes; IFX_IDRES *Ifx_slob; int errcode,type; char *buffer; - if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid, &pcontent)==FAILURE) { + if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid, &pcontent) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_long(pbid); - convert_to_string(pcontent); + convert_to_long_ex(pbid); + convert_to_string_ex(pcontent); - bid=Z_LVAL_P(pbid); + bid=Z_LVAL_PP(pbid); Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type); - if (type!=le_idresult) { - php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid); - RETURN_FALSE; - } - - if (Ifx_slob->type!=TYPE_SLOB) { - php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid); + if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid); RETURN_FALSE; } - buffer=Z_STRVAL_P(pcontent); - nbytes=Z_STRLEN_P(pcontent); + buffer=Z_STRVAL_PP(pcontent); + nbytes=Z_STRLEN_PP(pcontent); if(nbytes<=0) { - php_error(E_WARNING, "%s(): String has no content", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "String has no content"); RETURN_FALSE; } if((nbytes=ifx_lo_write(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode))<0) { - php_error(E_WARNING, "%s(): Error writing slob: %d", get_active_function_name(TSRMLS_C), errcode); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error writing slob: %d", errcode); RETURN_FALSE; }