comparison 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
comparison
equal deleted inserted replaced
741:f7e2026dd5ae 742:43553c93dd8c
146 } 146 }
147 147
148 static void *worker(void *data) { 148 static void *worker(void *data) {
149 int me = *(int *)data, retries_left = MAX_RETRIES; 149 int me = *(int *)data, retries_left = MAX_RETRIES;
150 uw_context ctx = new_context(); 150 uw_context ctx = new_context();
151 size_t buf_size = 1; 151 size_t buf_size = 2;
152 char *buf = malloc(buf_size); 152 char *buf = malloc(buf_size);
153 153
154 while (1) { 154 while (1) {
155 char *back = buf, *s, *post; 155 char *back = buf, *s, *post;
156 int sock, dont_close = 0; 156 int sock, dont_close = 0;
165 165
166 while (1) { 166 while (1) {
167 unsigned retries_left = MAX_RETRIES; 167 unsigned retries_left = MAX_RETRIES;
168 int r; 168 int r;
169 169
170 if (back - buf == buf_size) { 170 if (back - buf == buf_size - 1) {
171 char *new_buf; 171 char *new_buf;
172 buf_size *= 2; 172 buf_size *= 2;
173 new_buf = realloc(buf, buf_size); 173 new_buf = realloc(buf, buf_size);
174 back = new_buf + (back - buf); 174 back = new_buf + (back - buf);
175 buf = new_buf; 175 buf = new_buf;
176 } 176 }
177 177
178 r = recv(sock, back, buf_size - (back - buf), 0); 178 r = recv(sock, back, buf_size - 1 - (back - buf), 0);
179 179
180 if (r < 0) { 180 if (r < 0) {
181 fprintf(stderr, "Recv failed\n"); 181 fprintf(stderr, "Recv failed\n");
182 break; 182 break;
183 } 183 }
233 fprintf(stderr, "Negative Content-length with POST\n"); 233 fprintf(stderr, "Negative Content-length with POST\n");
234 goto done; 234 goto done;
235 } 235 }
236 236
237 while (back - after_headers < clen) { 237 while (back - after_headers < clen) {
238 if (back - buf == buf_size) { 238 if (back - buf == buf_size - 1) {
239 char *new_buf; 239 char *new_buf;
240 buf_size *= 2; 240 buf_size *= 2;
241 new_buf = realloc(buf, buf_size); 241 new_buf = realloc(buf, buf_size);
242
242 back = new_buf + (back - buf); 243 back = new_buf + (back - buf);
244 headers = new_buf + (headers - buf);
245 uw_headers_moved(ctx, headers);
246 after_headers = new_buf + (after_headers - buf);
247 s = new_buf + (s - buf);
248
243 buf = new_buf; 249 buf = new_buf;
244 } 250 }
245 251
246 r = recv(sock, back, buf_size - (back - buf), 0); 252 r = recv(sock, back, buf_size - 1 - (back - buf), 0);
247 253
248 if (r < 0) { 254 if (r < 0) {
249 fprintf(stderr, "Recv failed\n"); 255 fprintf(stderr, "Recv failed\n");
250 goto done; 256 goto done;
251 } 257 }