~ubuntu-branches/ubuntu/quantal/ceph/quantal

« back to all changes in this revision

Viewing changes to src/rgw/rgw_rest.cc

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-08-27 08:23:21 UTC
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: package-import@ubuntu.com-20120827082321-2cfej6ddvk63vsqq
Tags: upstream-0.48.1
ImportĀ upstreamĀ versionĀ 0.48.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
347
347
  return ret;
348
348
}
349
349
 
 
350
static int read_all_chunked_input(req_state *s, char **pdata, int *plen)
 
351
{
 
352
#define READ_CHUNK 4096
 
353
#define MAX_READ_CHUNK (128 * 1024)
 
354
  int need_to_read = READ_CHUNK;
 
355
  int total = need_to_read;
 
356
  char *data = (char *)malloc(total + 1);
 
357
  if (!data)
 
358
    return -ENOMEM;
 
359
 
 
360
  int read_len = 0, len = 0;
 
361
  do {
 
362
    CGI_GetStr(s, data + len, need_to_read, read_len);
 
363
 
 
364
    len += read_len;
 
365
 
 
366
    if (read_len == need_to_read) {
 
367
      if (need_to_read < MAX_READ_CHUNK)
 
368
        need_to_read *= 2;
 
369
 
 
370
      total += need_to_read;
 
371
 
 
372
      void *p = realloc(data, total + 1);
 
373
      if (!p) {
 
374
        free(data);
 
375
        return -ENOMEM;
 
376
      }
 
377
      data = (char *)p;
 
378
    } else {
 
379
      break;
 
380
    }
 
381
 
 
382
  } while (true);
 
383
  data[len] = '\0';
 
384
 
 
385
  *pdata = data;
 
386
  *plen = len;
 
387
 
 
388
  return 0;
 
389
}
 
390
 
350
391
int RGWCompleteMultipart_REST::get_params()
351
392
{
352
393
  upload_id = s->args.get("uploadId");
355
396
    ret = -ENOTSUP;
356
397
    return ret;
357
398
  }
358
 
 
359
399
  size_t cl = 0;
360
400
 
361
401
  if (s->length)
369
409
    CGI_GetStr(s, data, cl, len);
370
410
    data[len] = '\0';
371
411
  } else {
372
 
    len = 0;
 
412
    const char *encoding = s->env->get("HTTP_TRANSFER_ENCODING");
 
413
    if (!encoding || strcmp(encoding, "chunked") != 0)
 
414
      return -ERR_LENGTH_REQUIRED;
 
415
 
 
416
    ret = read_all_chunked_input(s, &data, &len);
 
417
    if (ret < 0)
 
418
      return ret;
373
419
  }
374
420
 
375
421
  return ret;