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 } |