From: Mark Jamsek Subject: Re: gotwebd: inline got_output_file_blob To: Omar Polo Cc: gameoftrees@openbsd.org Date: Sun, 15 Jan 2023 16:53:54 +1100 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 GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68