Download raw body.
gotwebd: inline got_output_file_blob
On 23-01-13 11:36AM, Omar Polo wrote:
> Since the refactoring that split got_open_blob_for_output out of it,
> got_output_file_blob remained just a simple loop that outputs chunks
> read from a blob.
>
> IMHO it's better suited in gotweb.c along with the rest of the
> outputting routines instead that in got_operations.c, and also
> slightly gets in the way of another upcoming refactoring of the
> handling of the response code.
>
> no functional changes intended.
>
> ok?
ok
> diff /home/op/w/got
> commit - 4f473d21fd465f8b323c36a3ff05d5941c4e5ab8
> path + /home/op/w/got
> blob - 40a3d01e7cd04fb81ec28b32b86bd6b7c74fec5c
> file + gotwebd/got_operations.c
> --- gotwebd/got_operations.c
> +++ gotwebd/got_operations.c
> @@ -955,48 +955,6 @@ const struct got_error *
> return error;
> }
>
> -const struct got_error *
> -got_output_file_blob(struct request *c)
> -{
> - const struct got_error *error = NULL;
> - struct querystring *qs = c->t->qs;
> - struct got_blob_object *blob = NULL;
> - size_t len;
> - int binary, fd = -1;
> - const uint8_t *buf;
> -
> - error = got_open_blob_for_output(&blob, &fd, &binary, c);
> - if (error)
> - return error;
> -
> - if (binary)
> - error = gotweb_render_content_type_file(c,
> - "application/octet-stream", qs->file, NULL);
> - else
> - error = gotweb_render_content_type(c, "text/plain");
> -
> - if (error) {
> - log_warnx("%s: %s", __func__, error->msg);
> - goto done;
> - }
> -
> - for (;;) {
> - error = got_object_blob_read_block(&len, blob);
> - if (error)
> - goto done;
> - if (len == 0)
> - break;
> - buf = got_object_blob_get_read_buf(blob);
> - fcgi_gen_binary_response(c, buf, len);
> - }
> - done:
> - if (close(fd) == -1 && error == NULL)
> - error = got_error_from_errno("close");
> - if (blob)
> - got_object_blob_close(blob);
> - return error;
> -}
> -
> int
> got_output_blob_by_lines(struct template *tp, struct got_blob_object *blob,
> int (*cb)(struct template *, const char *, size_t))
> blob - 9571e03a832b18e48cc16b0c1904e3b0d2d687b5
> file + gotwebd/gotweb.c
> --- gotwebd/gotweb.c
> +++ gotwebd/gotweb.c
> @@ -168,14 +168,40 @@ gotweb_process_request(struct request *c)
> }
>
> if (qs->action == BLOBRAW) {
> + const uint8_t *buf;
> + size_t len;
> + int binary;
> +
> error = got_get_repo_commits(c, 1);
> if (error)
> goto done;
> - error = got_output_file_blob(c);
> +
> + error2 = got_open_blob_for_output(&blob, &fd, &binary, c);
> + if (error2)
> + goto render;
> +
> + if (binary)
> + error = gotweb_render_content_type_file(c,
> + "application/octet-stream", qs->file, NULL);
> + else
> + error = gotweb_render_content_type(c, "text/plain");
> +
> if (error) {
> log_warnx("%s: %s", __func__, error->msg);
> - goto err;
> + goto done;
> }
> +
> + for (;;) {
> + error = got_object_blob_read_block(&len, blob);
> + if (error)
> + goto done;
> + if (len == 0)
> + break;
> + buf = got_object_blob_get_read_buf(blob);
> + if (fcgi_gen_binary_response(c, buf, len) == -1)
> + goto done;
> + }
> +
> goto done;
> }
>
> blob - aaf5713ca50e3eadba54e18b2b8fef2cbcb1f7ee
> file + gotwebd/gotwebd.h
> --- gotwebd/gotwebd.h
> +++ gotwebd/gotwebd.h
> @@ -520,7 +520,6 @@ const struct got_error *got_output_file_blob(struct re
> int (*)(struct template *, struct got_tree_entry *));
> const struct got_error *got_open_blob_for_output(struct got_blob_object **,
> int *, int *, struct request *);
> -const struct got_error *got_output_file_blob(struct request *);
> int got_output_blob_by_lines(struct template *, struct got_blob_object *,
> int (*)(struct template *, const char *, size_t));
> const struct got_error *got_output_file_blame(struct request *,
>
--
Mark Jamsek <fnc.bsdbox.org>
GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
gotwebd: inline got_output_file_blob