From patchwork Wed Oct 28 22:53:47 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernhard Kaindl X-Patchwork-Id: 56370 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n9SN3GpZ002058 for ; Wed, 28 Oct 2009 23:03:16 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751375AbZJ1XDK (ORCPT ); Wed, 28 Oct 2009 19:03:10 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753103AbZJ1XDK (ORCPT ); Wed, 28 Oct 2009 19:03:10 -0400 Received: from mail-bw0-f227.google.com ([209.85.218.227]:62885 "EHLO mail-bw0-f227.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751375AbZJ1XDJ (ORCPT ); Wed, 28 Oct 2009 19:03:09 -0400 Received: by bwz27 with SMTP id 27so1628312bwz.21 for ; Wed, 28 Oct 2009 16:03:13 -0700 (PDT) Received: by 10.204.48.141 with SMTP id r13mr1402384bkf.0.1256770993146; Wed, 28 Oct 2009 16:03:13 -0700 (PDT) Received: from localhost.localdomain (84-119-93-210.static.xdsl-line.inode.at [84.119.93.210]) by mx.google.com with ESMTPS id 13sm413600bwz.2.2009.10.28.16.03.12 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 28 Oct 2009 16:03:12 -0700 (PDT) From: Bernhard Kaindl To: Sam Ravnborg Cc: linux-kbuild@vger.kernel.org, Bernhard Kaindl Subject: [remarks 1/4] Support loading and saving custom remarks for config symbols Date: Wed, 28 Oct 2009 23:53:47 +0100 Message-Id: <4ae8cdb0.0d1abc0a.0bd6.3d1e@mx.google.com> X-Mailer: git-send-email 1.6.5.2 In-Reply-To: References: In-Reply-To: References: Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 797a741..eee2b60 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -152,6 +152,30 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) return 0; } +/** + * Read remarks from -remarks file: + */ +void conf_read_remarks(const char *remfile) +{ + FILE *in; + char line[1024], *p, *p2; + struct symbol *sym; + + sprintf(line, "%s-remarks", remfile ? remfile : conf_get_configname()); + if (!(in = zconf_fopen(line))) + return; + while (fgets(line, sizeof(line), in)) { + if (!(p = strchr(line, ' '))) /* ' ' is our delimiter */ + continue; /* skip lines without one */ + *p++ = '\0'; /* put a \0 there, advance */ + if ((p2 = strchr(p, '\n'))) /* look for \n after remark */ + *p2 = '\0'; /* remove it, no \n in remarks */ + if ((sym = sym_find(line))) /* find the matching sym */ + sym->remark = strdup(p); /* and register the remark */ + } + fclose(in); +} + int conf_read_simple(const char *name, int def) { FILE *in = NULL; @@ -393,16 +417,18 @@ int conf_read(const char *name) sym_add_change_count(conf_warnings || conf_unsaved); + conf_read_remarks(name); return 0; } int conf_write(const char *name) { - FILE *out; + FILE *out, *rem; + struct stat sb; struct symbol *sym; struct menu *menu; const char *basename; - char dirname[128], tmpname[128], newname[128]; + char dirname[128], tmpname[128], newname[128], tmprem[128], newrem[128]; int type, l; const char *str; time_t now; @@ -432,15 +458,19 @@ int conf_write(const char *name) basename = conf_get_configname(); sprintf(newname, "%s%s", dirname, basename); + sprintf(newrem, "%s%s-remarks", dirname, basename); env = getenv("KCONFIG_OVERWRITECONFIG"); if (!env || !*env) { sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid()); out = fopen(tmpname, "w"); + sprintf(tmprem, "%s.tmpconfig-remarks.%d", dirname, (int)getpid()); + rem = fopen(tmprem, "w"); } else { *tmpname = 0; out = fopen(newname, "w"); + rem = fopen(newrem, "w"); } - if (!out) + if (!out || !rem) return 1; sym = sym_lookup("KERNELVERSION", 0); @@ -528,6 +558,8 @@ int conf_write(const char *name) } next: + if (sym && sym->remark) + fprintf(rem, "%s %s\n", sym->name, sym->remark); if (menu->list) { menu = menu->list; continue; @@ -542,6 +574,7 @@ int conf_write(const char *name) } } fclose(out); + fclose(rem); if (*tmpname) { strcat(dirname, basename); @@ -549,7 +582,13 @@ int conf_write(const char *name) rename(newname, dirname); if (rename(tmpname, newname)) return 1; + sprintf(dirname, "%s.old", newrem); + rename(newrem, dirname); + if (rename(tmprem, newrem)) + conf_warning("moving %s to %s failed!", tmprem, newrem); } + if (!stat(newrem, &sb) && !sb.st_size) + unlink(newrem); printf(_("#\n" "# configuration written to %s\n" diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h index 6408fef..217e8cb 100644 --- a/scripts/kconfig/expr.h +++ b/scripts/kconfig/expr.h @@ -77,6 +77,7 @@ enum { struct symbol { struct symbol *next; char *name; + char *remark; enum symbol_type type; struct symbol_value curr; struct symbol_value def[S_DEF_COUNT];