mcabber/utils.c
changeset 5 4dcabf02f474
parent 0 b3b2332715fb
child 8 4c1affca7aea
equal deleted inserted replaced
4:eb31418b48df 5:4dcabf02f474
    25   va_list ap;
    25   va_list ap;
    26   char *buffer = NULL;
    26   char *buffer = NULL;
    27 
    27 
    28   if (DebugEnabled) {
    28   if (DebugEnabled) {
    29     fp = fopen("/tmp/mcabberlog", "a+");
    29     fp = fopen("/tmp/mcabberlog", "a+");
    30     buffer = (char *) calloc(1, 8192);
    30     buffer = (char *) calloc(1, 64);
    31 
    31 
    32     ahora = time(NULL);
    32     ahora = time(NULL);
    33     strftime(buffer, 1024, "[%H:%M:%S] ", localtime(&ahora));
    33     strftime(buffer, 64, "[%H:%M:%S] ", localtime(&ahora));
    34     fprintf(fp, "%s", buffer);
    34     fprintf(fp, "%s", buffer);
    35 
    35 
    36     va_start(ap, fmt);
    36     va_start(ap, fmt);
    37     vfprintf(fp, fmt, ap);
    37     vfprintf(fp, fmt, ap);
    38     va_end(ap);
    38     va_end(ap);
    40     free(buffer);
    40     free(buffer);
    41     fclose(fp);
    41     fclose(fp);
    42   }
    42   }
    43 }
    43 }
    44 
    44 
    45 char **ut_SplitMessage(char *mensaje, int *nsubmsgs, unsigned int maxlong)
    45 char **ut_SplitMessage(char *message, int *nsubmsgs, unsigned int maxlong)
    46 {
    46 {
    47   /* BUGs:    recorta la palabra si la longitud maxlong es menor que la palabra
    47   /* BUGs:    recorta la palabra si la longitud maxlong es menor que la palabra
    48      //  maxlong = 4
    48      //  maxlong = 4
    49      // mensaje = "peaso bug!"
    49      // message = "peaso bug!"
    50      // submsgs[0] = "peas"
    50      // submsgs[0] = "peas"
    51      // submsgs[1] = "bug!"
    51      // submsgs[1] = "bug!"
    52      // por lo demas, rula de arte. De todos modos, podrias verificarla ???
    52      // por lo demas, rula de arte. De todos modos, podrias verificarla ???
    53    */
    53    */
    54   char *running;
    54   char *running;
    55   char *aux;
    55   char *aux;
    56   char *aux2;
    56   char *aux2;
    57   char **submsgs;
    57   char **submsgs;
    58   char *buffer = (char *) malloc(strlen(mensaje) * 2);
    58   char *buffer = (char *) malloc(strlen(message) * 2);
    59   int i = 0;
    59   int i = 0;
    60 
    60 
    61   submsgs = (char **) malloc(50 * sizeof(char *));	/* limitamos, a priori, el maximo de lineas devueltas... */
    61   submsgs = (char **) malloc(50 * sizeof(char *));	/* limitamos, a priori, el maximo de lineas devueltas... */
    62 
    62 
    63   running = strdup(mensaje);	/* duplicamos mensaje */
    63   running = strdup(message);
    64   aux2 = strdup(mensaje);	/* hacemos otra copia */
    64   aux2 = strdup(message);
    65   while (strlen(aux2) > maxlong) {	/* mintras quede texto... */
    65 
    66     memset(buffer, 0, strlen(mensaje) * 2);	/* borramos el buffer */
    66   aux = index(running, '\n');     /* is there a CR? */
    67     running[maxlong] = '\0';	/* cortamos la cadena a la maxima longitud */
    67 
    68     aux = rindex(running, ' ');	/* posicion del ultimo blanco */
    68   while ((strlen(aux2) > maxlong) || (aux)) {
    69     if (aux != NULL)		/* hay blanco! */
    69     memset(buffer, 0, strlen(message) * 2);
       
    70     running[maxlong] = '\0';	    /* cut at $maxlong chars */
       
    71 
       
    72     if (aux != NULL) {              /* there is a CR */
    70       strncpy(buffer, running, strlen(running) - strlen(aux));
    73       strncpy(buffer, running, strlen(running) - strlen(aux));
    71     else
    74     } else {
    72       strcpy(buffer, running);	/* se supone que esto es pa evitar  el bug explicado arriba, pero no rula */
    75       aux = rindex(running, ' ');   /* look for last blank */
       
    76       if (aux != NULL)		    /* hay blanco! */
       
    77         strncpy(buffer, running, strlen(running) - strlen(aux));
       
    78       else
       
    79         strcpy(buffer, running);    /* se supone que esto es pa evitar  el bug explicado arriba, pero no rula */
       
    80     }
    73 
    81 
    74     submsgs[i] = (char *) malloc(strlen(buffer) + 1);	/*reservamos memoria */
    82     submsgs[i] = (char *) malloc(strlen(buffer) + 1);	/*reservamos memoria */
    75     strcpy(submsgs[i], buffer);	/*copiamos el buffer de arriba */
    83     strcpy(submsgs[i], buffer);	/*copiamos el buffer de arriba */
    76     i++;			/*aumentamos numero de mensajillos */
    84     i++;			/*aumentamos numero de mensajillos */
    77     aux2 += strlen(buffer) + 1;	/*eliminamos texto particionado */
    85     aux2 += strlen(buffer) + 1;	/*eliminamos texto particionado */
    78     sprintf(running, "%s", aux2);	/*y lo copiamos de nuevo a la string de "curro" */
    86     sprintf(running, "%s", aux2);	/*y lo copiamos de nuevo a la string de "curro" */
    79   }
    87     aux = index(running, '\n');     /* is there is a CR now? */
    80   /* la ultima parte del mensaje, si la hay ;-) */
    88   }
       
    89   /* last part of the message */
    81   if (strlen(aux2) > 0) {
    90   if (strlen(aux2) > 0) {
    82     submsgs[i] = (char *) malloc(strlen(aux2) + 1);
    91     submsgs[i] = (char *) malloc(strlen(aux2) + 1);
    83     strcpy(submsgs[i], aux2);
    92     strcpy(submsgs[i], aux2);
    84     i++;
    93     i++;
    85   }
    94   }