CVS update: php3/functions

From: Date: Fri, 18 Sep 1998 13:23:45 +0000
Subject: CVS update: php3/functions
Groups: php.dev 
Request: Send a blank email to php-dev+get-1221@lists.php.net to get a copy of this message
Date: Friday September 18, 1998 @ 9:23 Author: nyenyon Update of /repository/php3/functions In directory asf:/u2/tmp/cvs-serv12511 Modified Files: ifx.ec Log Message: - removing a really nasty bug while using blobs Index: php3/functions/ifx.ec diff -c php3/functions/ifx.ec:1.22 php3/functions/ifx.ec:1.23 *** php3/functions/ifx.ec:1.22 Thu Sep 17 16:55:14 1998 --- php3/functions/ifx.ec Fri Sep 18 09:23:44 1998 *************** *** 120,125 **** --- 120,129 ---- #if HAVE_IFX + #define BL_BYTE 0 + #define BL_TEXT 1 + #define BL_INMEM 0 + #define BL_INFILE 1 EXEC SQL include locator; EXEC SQL include sqltypes; *************** *** 1025,1032 **** efree(Ifx_Result); RETURN_FALSE; } ! if(locator->loc_loctype==LOCFNAME) locator->loc_oflags=LOC_RONLY; EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE= :loc_t_type; --- 1029,1037 ---- efree(Ifx_Result); RETURN_FALSE; } ! if(locator->loc_loctype==LOCFNAME) { locator->loc_oflags=LOC_RONLY; + } EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE= :loc_t_type; *************** *** 1168,1187 **** int bid; if(fieldtype==SQLTEXT) { ! bid=php3_intifx_create_blob(1,0,"",-1,list); } if(fieldtype==SQLBYTES) { if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) { ! bid=php3_intifx_create_blob(0,0,"",-1,list); } else { blobfilename=php3_intifx_create_tmpfile(i); bid=php3_intifx_create_blob( ! 0,1,blobfilename,strlen(blobfilename),list); locator=php3_intifx_get_blobloc(bid,list); locator->loc_oflags=LOC_WONLY; } } - locator=php3_intifx_get_blobloc(bid,list); Ifx_Result->blob_id[locind]=bid; EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; ++locind; --- 1173,1194 ---- int bid; if(fieldtype==SQLTEXT) { ! bid=php3_intifx_create_blob(BL_TEXT,BL_INMEM,"",-1,list); ! locator=php3_intifx_get_blobloc(bid,list); } if(fieldtype==SQLBYTES) { if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) { ! bid=php3_intifx_create_blob(BL_BYTE,BL_INMEM,"",-1,list); ! locator=php3_intifx_get_blobloc(bid,list); } else { blobfilename=php3_intifx_create_tmpfile(i); bid=php3_intifx_create_blob( ! BL_BYTE,BL_INFILE, ! blobfilename,strlen(blobfilename),list); locator=php3_intifx_get_blobloc(bid,list); locator->loc_oflags=LOC_WONLY; } } Ifx_Result->blob_id[locind]=bid; EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; ++locind; *************** *** 1376,1384 **** efree(Ifx_Result); RETURN_FALSE; } ! if(locator->loc_loctype==LOCFNAME) locator->loc_oflags=LOC_RONLY; ! EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE=:loc_t_type; i++; _php3_hash_move_forward(pblobidarr->value.ht); } /* while */ --- 1383,1394 ---- efree(Ifx_Result); RETURN_FALSE; } ! if(locator->loc_loctype==LOCFNAME) { locator->loc_oflags=LOC_RONLY; ! } ! EXEC SQL SET DESCRIPTOR :descrpid VALUE :i ! DATA= :*locator, ! TYPE=:loc_t_type; i++; _php3_hash_move_forward(pblobidarr->value.ht); } /* while */ *************** *** 1537,1554 **** RETURN_FALSE; } if (Ifx_Result->iscursory==0) { /* execute immediate */ ! if(Ifx_Result->paramquery!=0) { ! EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid; ! } else { ! EXEC SQL EXECUTE :statemid; ! } ! if (ifx_check() < 0) { ! Informix_GLOBAL(php3_ifx_module).sv_sqlcode = SQLCODE; ! php3_error(E_WARNING,"Execute immediate fails : %s ", ! ifx_error(ifx)); ! RETURN_FALSE; ! } ! Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */ } else { /* open cursor */ if (Ifx_Result->isscroll) if (Ifx_Result->ishold) --- 1547,1564 ---- RETURN_FALSE; } if (Ifx_Result->iscursory==0) { /* execute immediate */ ! if(Ifx_Result->paramquery!=0) { ! EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid; ! } else { ! EXEC SQL EXECUTE :statemid; ! } ! if (ifx_check() < 0) { ! Informix_GLOBAL(php3_ifx_module).sv_sqlcode = SQLCODE; ! php3_error(E_WARNING,"Execute immediate fails : %s ", ! ifx_error(ifx)); ! RETURN_FALSE; ! } ! Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */ } else { /* open cursor */ if (Ifx_Result->isscroll) if (Ifx_Result->ishold) *************** *** 1583,1602 **** int bid; if(fieldtype==SQLTEXT) { ! bid=php3_intifx_create_blob(1,0,"",-1,list); } if(fieldtype==SQLBYTES) { if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) { ! bid=php3_intifx_create_blob(0,0,"",-1,list); } else { blobfilename=php3_intifx_create_tmpfile(i); bid=php3_intifx_create_blob( ! 0,1,blobfilename,strlen(blobfilename),list); locator=php3_intifx_get_blobloc(bid,list); locator->loc_oflags=LOC_WONLY; } } - locator=php3_intifx_get_blobloc(bid,list); Ifx_Result->blob_id[locind]=bid; EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; ++locind; --- 1593,1614 ---- int bid; if(fieldtype==SQLTEXT) { ! bid=php3_intifx_create_blob(BL_TEXT,BL_INMEM,"",-1,list); ! locator=php3_intifx_get_blobloc(bid,list); } if(fieldtype==SQLBYTES) { if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) { ! bid=php3_intifx_create_blob(BL_BYTE,BL_INMEM,"",-1,list); ! locator=php3_intifx_get_blobloc(bid,list); } else { blobfilename=php3_intifx_create_tmpfile(i); bid=php3_intifx_create_blob( ! BL_BYTE,BL_INFILE, ! blobfilename,strlen(blobfilename),list); locator=php3_intifx_get_blobloc(bid,list); locator->loc_oflags=LOC_WONLY; } } Ifx_Result->blob_id[locind]=bid; EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator; ++locind; *************** *** 3017,3026 **** type=ptype->value.lval; if(type!=0) ! type=1; mode=pmode->value.lval; if(mode!=0) ! mode=1; id=php3_intifx_create_blob(type,mode,pparam->value.str.val,pparam->value.str.len,list); if(id<0) { --- 3029,3038 ---- type=ptype->value.lval; if(type!=0) ! type=BL_TEXT; mode=pmode->value.lval; if(mode!=0) ! mode=BL_INFILE; id=php3_intifx_create_blob(type,mode,pparam->value.str.val,pparam->value.str.len,list); if(id<0) { *************** *** 3052,3062 **** php3_error(E_WARNING,"can't create blob-resource"); return -1; } ! Ifx_blob->type=(int)type; Ifx_blob->mode=(int)mode; ! if(mode==0) { if(len>=0) { char *content=emalloc(len); if(content==NULL) { --- 3064,3076 ---- php3_error(E_WARNING,"can't create blob-resource"); return -1; } ! ! memset(Ifx_blob, 0, sizeof(IFX_BLOBRES)); ! Ifx_blob->type=(int)type; Ifx_blob->mode=(int)mode; ! if(mode==BL_INMEM) { if(len>=0) { char *content=emalloc(len); if(content==NULL) { *************** *** 3078,3084 **** Ifx_blob->blob_data.loc_mflags=0; Ifx_blob->blob_data.loc_oflags=0; } ! } else { char *filename=emalloc(len+1); if(filename==NULL) { php3_error(E_WARNING,"can't create blob-resource"); --- 3092,3098 ---- Ifx_blob->blob_data.loc_mflags=0; Ifx_blob->blob_data.loc_oflags=0; } ! } else { /* mode = BL_INFILE */ char *filename=emalloc(len+1); if(filename==NULL) { php3_error(E_WARNING,"can't create blob-resource"); *************** *** 3153,3165 **** return -1; } Ifx_blob->type=Ifx_blob_orig->type; Ifx_blob->mode=Ifx_blob_orig->mode; locator=&(Ifx_blob->blob_data); locator_orig=&(Ifx_blob_orig->blob_data); ! if(Ifx_blob->mode==0) { char *content; if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) { if((content=emalloc(locator_orig->loc_size))==NULL) { --- 3167,3181 ---- return -1; } + memset(Ifx_blob, 0, sizeof(IFX_BLOBRES)); + Ifx_blob->type=Ifx_blob_orig->type; Ifx_blob->mode=Ifx_blob_orig->mode; locator=&(Ifx_blob->blob_data); locator_orig=&(Ifx_blob_orig->blob_data); ! if(Ifx_blob->mode==BL_INMEM) { char *content; if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) { if((content=emalloc(locator_orig->loc_size))==NULL) { *************** *** 3244,3256 **** return -1; } if(Ifx_blob->mode==0) { ! if(Ifx_blob->blob_data.loc_buffer==NULL || Ifx_blob->blob_data.loc_size<=0 || Ifx_blob->blob_data.loc_indicator==-1) {} else { ! efree(Ifx_blob->blob_data.loc_buffer); ! } } else { ! if(Ifx_blob->blob_data.loc_fname!=NULL) { ! efree(Ifx_blob->blob_data.loc_fname); ! } } --- 3260,3273 ---- return -1; } if(Ifx_blob->mode==0) { ! if(Ifx_blob->blob_data.loc_buffer==NULL ! || Ifx_blob->blob_data.loc_size<=0) {;} else { ! efree(Ifx_blob->blob_data.loc_buffer); ! } } else { ! if(Ifx_blob->blob_data.loc_fname!=NULL) { ! efree(Ifx_blob->blob_data.loc_fname); ! } } *************** *** 3270,3278 **** * list: internal hashlist of php3 * * return -1 on error otherwise 0 ! * FREES BYTE-MEMORY WITH FREE(), use this for freeing blob-source after select (in ifx_free_result) * ---------------------------------------------------------------------- ! */long php3_intifx2_free_blob(long bid, HashTable *list) { IFX_BLOBRES *Ifx_blob; int type; --- 3287,3297 ---- * list: internal hashlist of php3 * * 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) * ---------------------------------------------------------------------- ! */ ! long php3_intifx2_free_blob(long bid, HashTable *list) { IFX_BLOBRES *Ifx_blob; int type; *************** *** 3283,3295 **** return -1; } if(Ifx_blob->mode==0) { ! if(Ifx_blob->blob_data.loc_buffer==NULL || Ifx_blob->blob_data.loc_size<=0 || Ifx_blob->blob_data.loc_indicator==-1) {} else { ! free(Ifx_blob->blob_data.loc_buffer); ! } } else { ! if(Ifx_blob->blob_data.loc_fname!=NULL) { ! efree(Ifx_blob->blob_data.loc_fname); ! } } php3_list_delete(bid); --- 3302,3315 ---- return -1; } if(Ifx_blob->mode==0) { ! if(Ifx_blob->blob_data.loc_buffer==NULL || ! Ifx_blob->blob_data.loc_size<=0) {;} else { ! free(Ifx_blob->blob_data.loc_buffer); ! } } else { ! if(Ifx_blob->blob_data.loc_fname!=NULL) { ! efree(Ifx_blob->blob_data.loc_fname); ! } } php3_list_delete(bid); *************** *** 3372,3377 **** --- 3392,3399 ---- Ifx_blob = (IFX_BLOBRES *) php3_list_find(bid,&type); if (type!=Informix_GLOBAL(php3_ifx_module).le_blobresult) { + php3_error(E_WARNING,"%d is not a Informix blob-result index", + bid); return NULL; } -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#1221) next »