Mercurial > hg
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); |