comparison src/toc.c @ 79:bfdc427b936d

[gaim-migrate @ 89] I'll save time and just post the email :-) Summary of changes: * Misc malloc/free cleanups, use g_malloc more places and other small stuff (e.g. lineardata not being freed in the error case in sound.c) * Misc signed/unsigned cleanups (use size_t more often) * read() can return -1 at any point, check return values more rigorously (read_rv variables used for this) * In can_play_audio, stat requires a pointer to an allocated stat_buf (the address of an automatic variable) * escape_text needs a buffer at least 4 times the size of the text being passed in (not 2 times); I can force core dumps with lots of newlines otherwise * There's a debug statement in netscape_command (browser.c) that was printf("Hello%d\n"); with no int for the %d; I threw in a getppid(), but the statement should probably come out eventually. Thanks, G Sumner Hayes! committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Wed, 05 Apr 2000 05:34:08 +0000
parents aa738bb8d8d7
children 55faf2e3a134
comparison
equal deleted inserted replaced
78:66c5a24b62ec 79:bfdc427b936d
281 281
282 return write(toc_fd, obuf, slen); 282 return write(toc_fd, obuf, slen);
283 } 283 }
284 284
285 285
286 int wait_reply(char *buffer, int buflen) 286 int wait_reply(char *buffer, size_t buflen)
287 { 287 {
288 int res=6; 288 size_t res=-1;
289 int read_rv = -1;
289 struct sflap_hdr *hdr=(struct sflap_hdr *)buffer; 290 struct sflap_hdr *hdr=(struct sflap_hdr *)buffer;
290 char *c; 291 char *c;
291 292
292 while((res = read(toc_fd, buffer, 1))) { 293 if(buflen < sizeof(struct sflap_hdr)) {
293 if (res < 0) 294 do_error_dialog("Buffer too small", "Gaim - Error (internal)");
294 return res; 295 return -1;
296 }
297
298 while((read_rv = read(toc_fd, buffer, 1))) {
299 if (read_rv < 0 || read_rv > 1)
300 return -1;
295 if (buffer[0] == '*') 301 if (buffer[0] == '*')
296 break; 302 break;
297 303
298 } 304 }
299 305
300 res = read(toc_fd, buffer+1, sizeof(struct sflap_hdr) - 1); 306 read_rv = read(toc_fd, buffer+1, sizeof(struct sflap_hdr) - 1);
301 307
302 if (res < 0) 308 if (read_rv < 0)
303 return res; 309 return read_rv;
304 310
305 res += 1; 311 res = read_rv + 1;
306 312
307 313
308 sprintf(debug_buff, "Rcv: %s %s\n",print_header(buffer), ""); 314 sprintf(debug_buff, "Rcv: %s %s\n",print_header(buffer), "");
309 debug_print(debug_buff); 315 debug_print(debug_buff);
310 316
311 317
318 if(buflen < sizeof(struct sflap_hdr) + ntohs(hdr->len) + 1) {
319 do_error_dialog("Buffer too small", "Gaim - Error (internal)");
320 return -1;
321 }
312 322
313 while (res < (sizeof(struct sflap_hdr) + ntohs(hdr->len))) { 323 while (res < (sizeof(struct sflap_hdr) + ntohs(hdr->len))) {
314 res += read(toc_fd, buffer + res, (ntohs(hdr->len) + sizeof(struct sflap_hdr)) - res); 324 read_rv = read(toc_fd, buffer + res, (ntohs(hdr->len) + sizeof(struct sflap_hdr)) - res);
325 if(read_rv < 0) return read_rv;
326 res += read_rv;
315 while(gtk_events_pending()) 327 while(gtk_events_pending())
316 gtk_main_iteration(); 328 gtk_main_iteration();
317 } 329 }
318 330
319 if (res >= sizeof(struct sflap_hdr)) 331 if (res >= sizeof(struct sflap_hdr))