[C con Clase] funcion de busqueda y reemplazo de cadenas con libreria dinamica

Diego Alejandro diegomad en gmail.com
Vie Nov 20 21:12:19 CET 2009


hola lista,
tengo una dificulta con una función de  una libraría dinámica que
estoy haciendo, cuando la utilizo por solo una ocasión no hay
problema,  pero cuando la utilizo por segunda vez (reenviando la
cadena recibida en la primera vez) recibo solo una parte de la cadena
(primeras 12 letras) seguida de un caracater extraño (en mi caso
flechita a la derecha).

el codigo de la libraria esta el siguiente:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void str_replace(char **buf, char *src, char *dst)
{
  char *t4;
  char *t5 = malloc(0);

  if(strstr(*buf,src)){
    while(strstr(*buf,src)){
      t4=strstr(*buf,src);
      strncpy(t5+strlen(t5),*buf,t4-*buf);
      if (strlen(dst)>0)
	strcat(t5,dst);
      t4+=strlen(src);
      *buf=t4;
    }
    *buf = strcat(t5,t4);
  }
}

el programa que la utiliza es el siguiente:
#include <stdio.h>
#include <dlfcn.h>
#define RUTA_LIB "libstr.so"
int main(){
  int i = 3;
  void *pLib;
  void (*pFunc)(char**, char*, char*);
  if ((pLib = dlopen(RUTA_LIB, RTLD_LAZY)) ==NULL) {
    fprintf(stderr, dlerror());
    return 1;
  }
  if ((pFunc = dlsym(pLib, "str_replace")) == NULL) {
    fprintf(stderr, dlerror());
    return 1;
  }
  char *buf = "SELECT dr.idCONCAT(tr.dialstr, tr.prefix, '%(NUMBER)s'
WHERE '%(NUMBER)s'  = TRUE AND ('%(USER)s'";
  char *src = "%(USER)s";
  char *dst = "mad";
  char *punt = NULL;
  punt = buf;
  printf("buf: '%s' \n\n", buf);
  pFunc(&buf, "%(NUMBER)s", "0123456789");
  printf("buf: '%s' \n\n", buf);
  pFunc(&buf, "%(USER)s", dst);

  dlclose(pLib);
  printf("buf: '%s' \n", buf);
  return(0);
}

los comandos para la compilacion de la libreria que estoy utilizando son:
gcc -fPIC -c -o libstr.o libstr.c
gcc -shared -fPIC -o libstr.so  libstr.o -ldl

y para el programa:
gcc -o strstr strstr.c -ldl

y porsupuesto que para compilar agrege el directorio donde esta la
libreria a LD_LIBRARY_PATH.
mi version de compilador es: gcc version 4.3.2 (Debian 4.3.2-1.1)

muchas gracias por cualquier aporte xP

-- 
Diego Alejandro




Más información sobre la lista de distribución Cconclase