[PATCH 3/7] ui-plain.c: Use a context structure in walk_tree()
Ferry Huberts
mailings at hupie.com
Sun Mar 3 21:04:28 CET 2013
On 03/03/13 18:06, Lukas Fleischer wrote:
> Do not misuse global variables to save the context. Instead, use the
> context pointer which was designed to share information between a
> read_tree_fn and the caller.
>
> Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
> ---
> ui-plain.c | 31 ++++++++++++++++++-------------
> 1 file changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/ui-plain.c b/ui-plain.c
> index 684d5ea..e5addb9 100644
> --- a/ui-plain.c
> +++ b/ui-plain.c
> @@ -11,8 +11,10 @@
> #include "html.h"
> #include "ui-shared.h"
>
> -int match_baselen;
> -int match;
> +struct walk_tree_context {
> + int match_baselen;
> + int match;
> +};
>
> static char *get_mimetype_from_file(const char *filename, const char *ext)
> {
> @@ -166,18 +168,20 @@ static int walk_tree(const unsigned char *sha1, const char *base, int baselen,
> const char *pathname, unsigned mode, int stage,
> void *cbdata)
> {
> - if (baselen == match_baselen) {
> + struct walk_tree_context *walk_tree_ctx = cbdata;
> +
> + if (baselen == walk_tree_ctx->match_baselen) {
> if (S_ISREG(mode)) {
> if (print_object(sha1, pathname))
> - match = 1;
> + walk_tree_ctx->match = 1;
> } else if (S_ISDIR(mode)) {
> print_dir(sha1, base, baselen, pathname);
> - match = 2;
> + walk_tree_ctx->match = 2;
> return READ_TREE_RECURSIVE;
> }
> - } else if (baselen > match_baselen) {
> + } else if (baselen > walk_tree_ctx->match_baselen) {
> print_dir_entry(sha1, base, baselen, pathname, mode);
> - match = 2;
> + walk_tree_ctx->match = 2;
> } else if (S_ISDIR(mode)) {
> return READ_TREE_RECURSIVE;
> }
> @@ -199,6 +203,7 @@ void cgit_print_plain(struct cgit_context *ctx)
> unsigned char sha1[20];
> struct commit *commit;
> const char *paths[] = {ctx->qry.path, NULL};
> + struct walk_tree_context walk_tree_ctx;
I'd prefer that you initialise the variable here
>
> if (!rev)
> rev = ctx->qry.head;
> @@ -214,15 +219,15 @@ void cgit_print_plain(struct cgit_context *ctx)
> }
> if (!paths[0]) {
> paths[0] = "";
> - match_baselen = -1;
> + walk_tree_ctx.match_baselen = -1;
> print_dir(commit->tree->object.sha1, "", 0, "");
> - match = 2;
> + walk_tree_ctx.match = 2;
> }
> else
> - match_baselen = basedir_len(paths[0]);
> - read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL);
> - if (!match)
> + walk_tree_ctx.match_baselen = basedir_len(paths[0]);
> + read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, &walk_tree_ctx);
> + if (!walk_tree_ctx.match)
> html_status(404, "Not found", 0);
> - else if (match == 2)
> + else if (walk_tree_ctx.match == 2)
> print_dir_tail();
> }
>
--
Ferry Huberts
More information about the CGit
mailing list