[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AANLkTikD2EiTbqMTCK7GUCTkTig3C5H2fMHbgodMfA4w@mail.gmail.com>
Date: Fri, 25 Feb 2011 20:28:58 -0500
From: Arnaud Lacombe <lacombar@...il.com>
To: Jeff Mahoney <jeffm@...e.com>
Cc: Sam Ravnborg <sam@...nborg.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Roman Zippel <zippel@...ux-m68k.org>,
linux-kbuild@...r.kernel.org
Subject: Re: [PATCH 1/2] kconfig: add support for type handlers
Hi,
On Fri, Feb 25, 2011 at 7:44 PM, Jeff Mahoney <jeffm@...e.com> wrote:
> This patch adds type handlers for compressed config files. Initial
> support provides callouts for gzip and bzip2, but there's no reason
> others could be added if demand is there.
>
> This is intended to allow /proc/config.gz be a configuration source
> for 'make oldconfig' when .config is absent.
>
this can be trivially scripted, any reason it _has_ to be done within kconfig ?
- Arnaud
> Signed-off-by: Jeff Mahoney <jeffm@...e.com>
> ---
>
> scripts/kconfig/zconf.l | 50 ++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 48 insertions(+), 2 deletions(-)
>
> --- a/scripts/kconfig/zconf.l
> +++ b/scripts/kconfig/zconf.l
> @@ -256,6 +256,44 @@ static void zconf_endhelp(void)
> BEGIN(INITIAL);
> }
>
> +static const struct type_handler {
> + const char *suffix;
> + const char *command;
> +} type_handlers[] = {
> + {
> + .suffix = ".gz",
> + .command = "zcat",
> + },
> + {
> + .suffix = ".bz2",
> + .command = "bzcat",
> + },
> + /* Whatever other algorithms you like */
> + {}
> +};
> +
> +static const struct type_handler *get_type_handler(const char *name)
> +{
> + char *p = rindex(name, '.');
> + if (p) {
> + const struct type_handler *ops = type_handlers;
> + for (ops = type_handlers; ops->suffix; ops++) {
> + if (!strcasecmp(ops->suffix, p))
> + break;
> + }
> + if (!ops->suffix)
> + return NULL;
> + return ops;
> + }
> + return NULL;
> +}
> +
> +static FILE *zconf_popen(const char *command, const char *name)
> +{
> + char cmdbuf[PATH_MAX + strlen(command) + 2];
> + snprintf(cmdbuf, sizeof(cmdbuf), "%s %s", command, name);
> + return popen(cmdbuf, "r");
> +}
>
> /*
> * Try to open specified file with following names:
> @@ -267,15 +305,23 @@ static void zconf_endhelp(void)
> */
> FILE *zconf_fopen(const char *name)
> {
> + const struct type_handler *handler = get_type_handler(name);
> char *env, fullname[PATH_MAX+1];
> FILE *f;
>
> - f = fopen(name, "r");
> + if (handler)
> + f = zconf_popen(handler->command, name);
> + else
> + f = fopen(name, "r");
> +
> if (!f && name != NULL && name[0] != '/') {
> env = getenv(SRCTREE);
> if (env) {
> sprintf(fullname, "%s/%s", env, name);
> - f = fopen(fullname, "r");
> + if (handler)
> + f = zconf_popen(handler->command, fullname);
> + else
> + f = fopen(fullname, "r");
> }
> }
> return f;
>
> --
> Jeff Mahoney
> SUSE Labs
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists