Code: Select all | Expand
case SQL_CHAR: {
char *szResult = (char *) hb_xgrab(lLen + 1); //crea var string zero de un tamaño lLen
hb_xmemset(szResult, ' ', lLen); //rellena de espacios
szResult[lLen] = '\0'; //define fin de cadena
hb_itemPutCLPtr(pItem, szResult, lLen); //pone en puntero pItem la cadena creada, y algo mas???
hb_xfree(szResult);//kdsoft - no se si se debe liberar la memoria ocupada por szResult o si lo hizo hb_itemPutCLPtr
break;
el codigo original no tiene esa linea de codigo, yo se la he puesto, pero tego duda, que hace realmente hb_itemPutCLPtr, entiendo que pone un valor en un puntero pItem, CLPtr, no se que significa (sera que tambien Clear the memory), hay una cuantas funciones con nombres similares, pero no tenog claro que hacen.
por ejemplo hay dos funciones similares hb_xmemset (esta es de harbour) y memset (esta es de c propiamente), seria interesante ir comprendiendo que haces estas funciones, aprender un poco el api moustroso de harbour.
gracias
Code: Select all | Expand
extern HB_EXPORT PHB_ITEM hb_itemPutCLPtr ( PHB_ITEM pItem, char * szText, HB_SIZE nLen );
! hb_itemPutCPtr(), hb_itemPutCLPtr() fixed to put empty
string to item if szText is NULL and length is non-zero,
instead of trying to free NULL pointer causing internal
error.
se deduce, que hace hb_itemPutC -> pone un char string en item, L for Length y Ptr por pointer. (a la intentona)* contrib/examples/rdddbt/dbfdbt1.c
* I did a mistake in 1999 by giving the name hb_itemPutCPtr()
to the function which would have to be correctly named
hb_itemPutCLPtr() (notice the 'L' for 'length').