diff src/c/driver.c @ 742:43553c93dd8c

Reading blobs from the database
author Adam Chlipala <adamc@hcoop.net>
date Sun, 26 Apr 2009 10:45:59 -0400
parents f7e2026dd5ae
children 3e5d1c6ae30c
line wrap: on
line diff
--- a/src/c/driver.c	Sun Apr 26 09:02:17 2009 -0400
+++ b/src/c/driver.c	Sun Apr 26 10:45:59 2009 -0400
@@ -148,7 +148,7 @@
 static void *worker(void *data) {
   int me = *(int *)data, retries_left = MAX_RETRIES;
   uw_context ctx = new_context();
-  size_t buf_size = 1;
+  size_t buf_size = 2;
   char *buf = malloc(buf_size);
 
   while (1) {
@@ -167,7 +167,7 @@
       unsigned retries_left = MAX_RETRIES;
       int r;
 
-      if (back - buf == buf_size) {
+      if (back - buf == buf_size - 1) {
         char *new_buf;
         buf_size *= 2;
         new_buf = realloc(buf, buf_size);
@@ -175,7 +175,7 @@
         buf = new_buf;
       }
 
-      r = recv(sock, back, buf_size - (back - buf), 0);
+      r = recv(sock, back, buf_size - 1 - (back - buf), 0);
 
       if (r < 0) {
         fprintf(stderr, "Recv failed\n");
@@ -235,15 +235,21 @@
           }
 
           while (back - after_headers < clen) {
-            if (back - buf == buf_size) {
+            if (back - buf == buf_size - 1) {
               char *new_buf;
               buf_size *= 2;
               new_buf = realloc(buf, buf_size);
+
               back = new_buf + (back - buf);
+              headers = new_buf + (headers - buf);
+              uw_headers_moved(ctx, headers);
+              after_headers = new_buf + (after_headers - buf);
+              s = new_buf + (s - buf);
+
               buf = new_buf;
             }
 
-            r = recv(sock, back, buf_size - (back - buf), 0);
+            r = recv(sock, back, buf_size - 1 - (back - buf), 0);
 
             if (r < 0) {
               fprintf(stderr, "Recv failed\n");