From mboxrd@z Thu Jan 1 00:00:00 1970 From: cgit at cryptocrack.de (Lukas Fleischer) Date: Mon, 1 Apr 2013 21:51:38 +0200 Subject: [PATCH 1/3] Return const char * in cgit_{httpscheme, hosturl, rooturl}() In-Reply-To: <20130401153535.GA2222@serenity.lan> References: <1364829075-18159-1-git-send-email-cgit@cryptocrack.de> <20130401153535.GA2222@serenity.lan> Message-ID: <20130401195138.GA18549@blizzard> On Mon, Apr 01, 2013 at 04:35:35PM +0100, John Keeping wrote: > On Mon, Apr 01, 2013 at 05:11:13PM +0200, Lukas Fleischer wrote: > > The return values of these functions are essentially constant and should > > never be modified. > > > > Note that this will introduce a compiler warning when we try to free the > > return value of any of these functions. However, given that all of these > > currently return statically allocated strings in some cases, they need > > to be refactored before this can be done anyway. > > It looks like cgit_hosturl() already returns allocated memory in one > case, and cgit_rooturl() returns a static buffer from fmt(). > > I wonder if it's sensible to just set ctx.env.http_host to something > sensible in prepare_context() and get rid of cgit_hosturl completely, > especially since it is used in all requests anyway. Yeah, patch 1/3 was just (quick and dirty) preparatory work for patches 2/3 and 3/3. You should read the commit message like "This patch does it wrong, but it helps with fixing the issues addressed in patches 2 and 3." -- I probably should have made it a bit clearer. A proper fix requires a tiny bit more work, so feel free to come up with something to base patches 2 and 3 on :) > > I think we can also remove cgit_rooturl since in main() we set > ctx.cfg.virtual_root to ctx.cfg.script_name in the same way this > function does, so there's no need to fall back to script_name when we're > rendering a page. > > > Signed-off-by: Lukas Fleischer > > --- > > ui-atom.c | 4 ++-- > > ui-shared.c | 8 ++++---- > > ui-shared.h | 6 +++--- > > 3 files changed, 9 insertions(+), 9 deletions(-) > > > > diff --git a/ui-atom.c b/ui-atom.c > > index 5b5525d..1554088 100644 > > --- a/ui-atom.c > > +++ b/ui-atom.c > > @@ -10,7 +10,7 @@ > > #include "html.h" > > #include "ui-shared.h" > > > > -static void add_entry(struct commit *commit, char *host) > > +static void add_entry(struct commit *commit, const char *host) > > { > > char delim = '&'; > > char *hex; > > @@ -79,7 +79,7 @@ static void add_entry(struct commit *commit, char *host) > > > > void cgit_print_atom(char *tip, char *path, int max_count) > > { > > - char *host; > > + const char *host; > > const char *argv[] = {NULL, tip, NULL, NULL, NULL}; > > struct commit *commit; > > struct rev_info rev; > > diff --git a/ui-shared.c b/ui-shared.c > > index d4fb3d9..7a726c1 100644 > > --- a/ui-shared.c > > +++ b/ui-shared.c > > @@ -34,7 +34,7 @@ void cgit_print_error(const char *msg) > > html("\n"); > > } > > > > -char *cgit_httpscheme() > > +const char *cgit_httpscheme() > > { > > if (ctx.env.https && !strcmp(ctx.env.https, "on")) > > return "https://"; > > @@ -42,7 +42,7 @@ char *cgit_httpscheme() > > return "http://"; > > } > > > > -char *cgit_hosturl() > > +const char *cgit_hosturl() > > { > > if (ctx.env.http_host) > > return ctx.env.http_host; > > @@ -53,7 +53,7 @@ char *cgit_hosturl() > > return xstrdup(fmt("%s:%s", ctx.env.server_name, ctx.env.server_port)); > > } > > > > -char *cgit_rooturl() > > +const char *cgit_rooturl() > > { > > if (ctx.cfg.virtual_root) > > return fmt("%s/", ctx.cfg.virtual_root); > > @@ -651,7 +651,7 @@ void cgit_print_docstart(struct cgit_context *ctx) > > return; > > } > > > > - char *host = cgit_hosturl(); > > + const char *host = cgit_hosturl(); > > html(cgit_doctype); > > html("\n"); > > html("\n"); > > diff --git a/ui-shared.h b/ui-shared.h > > index 87a7dac..0666388 100644 > > --- a/ui-shared.h > > +++ b/ui-shared.h > > @@ -1,9 +1,9 @@ > > #ifndef UI_SHARED_H > > #define UI_SHARED_H > > > > -extern char *cgit_httpscheme(); > > -extern char *cgit_hosturl(); > > -extern char *cgit_rooturl(); > > +extern const char *cgit_httpscheme(); > > +extern const char *cgit_hosturl(); > > +extern const char *cgit_rooturl(); > > extern char *cgit_repourl(const char *reponame); > > extern char *cgit_fileurl(const char *reponame, const char *pagename, > > const char *filename, const char *query); > > -- > > 1.8.2.411.g65a544e