comparison mcabber/src/socket.c @ 26:8588f5a4b638

[/trunk] Changeset 42 by mikael * Potential bugfixes.
author mikael
date Mon, 28 Mar 2005 08:54:43 +0000
parents e88b15cbf2de
children 0cd8025eebee
comparison
equal deleted inserted replaced
25:bf3d6e241714 26:8588f5a4b638
62 { 62 {
63 int i = 1; 63 int i = 1;
64 int tambuffer = 128; 64 int tambuffer = 128;
65 char mtag[16]; // For tag name 65 char mtag[16]; // For tag name
66 66
67 char *buffer = malloc(tambuffer); 67 char *buffer = calloc(1, tambuffer);
68 char *retval = malloc(tambuffer + 1); 68 char *retval = calloc(1, tambuffer + 1);
69
70 memset(retval, 0, tambuffer);
71 memset(buffer, 0, tambuffer + 1);
72 69
73 while (1) { 70 while (1) {
74 char *p1; 71 char *p1;
75 int n = recv(sock, buffer, tambuffer, 0); 72 int n = recv(sock, buffer, tambuffer, 0);
76 if (n == -1) { 73 if (n == -1) {
80 return retval; 77 return retval;
81 } 78 }
82 79
83 if (i == 1) { 80 if (i == 1) {
84 char *p2; 81 char *p2;
85 strcpy(retval, buffer); 82 strncpy(retval, buffer, tambuffer);
86 p1 = retval+1; 83 p1 = retval+1;
87 p2 = mtag; 84 p2 = mtag;
88 while (('a' <= *p1) && (*p1 <= 'z') && (p2-mtag < 14)) 85 while (('a' <= *p1) && (*p1 <= 'z') && (p2-mtag < 14))
89 *p2++ = *p1++; 86 *p2++ = *p1++;
90 *p2++ = '>'; *p2++ = 0; 87 *p2++ = '>'; *p2++ = 0;
91 //fprintf(stderr, "TAG=\"%s\"\n", mtag); 88 //fprintf(stderr, "TAG=\"%s\"\n", mtag);
92 } else { 89 } else {
90 char *old_retval = retval;
93 scr_LogPrint("Realloc %d [%d]", i-1, n); 91 scr_LogPrint("Realloc %d [%d]", i-1, n);
94 if (!n) 92 if (!n)
95 break; 93 break;
96 retval = realloc(retval, (tambuffer * i) + 1); 94 retval = realloc(retval, (tambuffer * i) + 1);
97 strncat(retval, buffer, tambuffer + 1); 95 if (!retval) {
96 scr_LogPrint("Memory allocation failure!!");
97 ut_WriteLog("Memory allocation failure in sk_recv()\n", retval);
98 free(buffer);
99 return old_retval;
100 }
101 strncat(retval, buffer, tambuffer);
98 } 102 }
99 i++; 103 i++;
100 p1 = retval + strlen(retval) - strlen(mtag); 104 p1 = retval + strlen(retval) - strlen(mtag);
101 //fprintf(stderr, "buffer:[%s]\n", buffer); 105 //fprintf(stderr, "buffer:[%s]\n", buffer);
102 //fprintf(stderr, "End RET=[%s]\n", p1); 106 //fprintf(stderr, "End RET=[%s]\n", p1);