MCPcopy Create free account
hub / github.com/git/git / inflate_request

Function inflate_request

http-backend.c:384–445  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

382}
383
384static void inflate_request(const char *prog_name, int out, int buffer_input, ssize_t req_len)
385{
386 git_zstream stream;
387 unsigned char *full_request = NULL;
388 unsigned char in_buf[8192];
389 unsigned char out_buf[8192];
390 unsigned long cnt = 0;
391 int req_len_defined = req_len >= 0;
392 size_t req_remaining_len = req_len;
393
394 memset(&stream, 0, sizeof(stream));
395 git_inflate_init_gzip_only(&stream);
396
397 while (1) {
398 ssize_t n;
399
400 if (buffer_input) {
401 if (full_request)
402 n = 0; /* nothing left to read */
403 else
404 n = read_request(0, &full_request, req_len);
405 stream.next_in = full_request;
406 } else {
407 ssize_t buffer_len;
408 if (req_len_defined && req_remaining_len <= sizeof(in_buf))
409 buffer_len = req_remaining_len;
410 else
411 buffer_len = sizeof(in_buf);
412 n = xread(0, in_buf, buffer_len);
413 stream.next_in = in_buf;
414 if (req_len_defined && n > 0)
415 req_remaining_len -= n;
416 }
417
418 if (n <= 0)
419 die("request ended in the middle of the gzip stream");
420 stream.avail_in = n;
421
422 while (0 < stream.avail_in) {
423 int ret;
424
425 stream.next_out = out_buf;
426 stream.avail_out = sizeof(out_buf);
427
428 ret = git_inflate(&stream, Z_NO_FLUSH);
429 if (ret != Z_OK && ret != Z_STREAM_END)
430 die("zlib error inflating request, result %d", ret);
431
432 n = stream.total_out - cnt;
433 write_to_child(out, out_buf, stream.total_out - cnt, prog_name);
434 cnt = stream.total_out;
435
436 if (ret == Z_STREAM_END)
437 goto done;
438 }
439 }
440
441done:

Callers 1

run_serviceFunction · 0.85

Calls 7

xreadFunction · 0.85
git_inflateFunction · 0.85
write_to_childFunction · 0.85
git_inflate_endFunction · 0.85
read_requestFunction · 0.70
dieFunction · 0.70

Tested by

no test coverage detected