From: Petr Baudis Date: Tue, 25 Oct 2005 09:31:50 GMT Subject: Re: [PATCH] git_progname (was: Re: User-relative paths) Message-ID: <20051025093150.GB30889@pasky.or.cz> In-Reply-To: <435DF6DA.6010205@op5.se> Could you please also trim the mails you are replying to a bit? Dear diary, on Tue, Oct 25, 2005 at 11:11:54AM CEST, I got a letter where Andreas Ericsson told me that... > See the attached patch, which adds git_progname as a global variable to > daemon.c with a minimum of fuzz. The one-liner below will add it to the > rest of the programs. GNU sed >= 4.0.9 required. > > grep -l "int main" *.c | xargs -- sed -i '/^#include/i#include "main.h"' Urgh. Now this is ugly. What about making it a bit more intrusive while quite more saner? > diff --git a/cache.h b/cache.h > index d776016..db5d667 100644 > --- a/cache.h > +++ b/cache.h > @@ -45,6 +45,13 @@ > #endif > #endif > > +#if defined(__GLIBC__) > +extern const char *__progname; > +#define git_progname __progname > +#else > +extern const char *git_progname; > +#endif > + > /* > * Intensive research over the course of many years has shown that > * port 9418 is totally unused by anything else. Or Also, when you already solve this for non-__GLIBC__ systems, I doubt that there is any win in keeping the __GLIBC__-specific hack, except that most developers won't see any bugs in the generic solution since they are using glibc. > diff --git a/main.h b/main.h > new file mode 100644 > index 0000000..472f134 > --- /dev/null > +++ b/main.h > @@ -0,0 +1,22 @@ > +/* unistd.h must be available and the glibc version includes features.h > + * from it which #defines __GLIBC__ and friends */ > +#include > +#ifndef __GLIBC__ > +const char *git_progname; > +static int git_main(int, char **); > + > +int main(int argc, char **argv) > +{ > + char *p; > + git_progname = p = *argv; > + > + /* don't use any library functions. We won't have the headers */ > + while(*p) > + if(*p++ == '/') > + git_progname = p; > + > + return git_main(argc, argv); > +} > + > +#define main(argc, argv) git_main(argc, argv) > +#endif /* __GLIBC__ */ Someone said that converting main()s to git_main()s would help the libification effort, but I suspect that you actually want to set the progname to whatever you call when you call its git_main(). We can make it go into the init section, but that won't be too portable either. So I'd say just add setup_progname("foo") at the start of your main(). -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ VI has two modes: the one in which it beeps and the one in which it doesn't.