Kbuild updates for v4.16 (2nd)
Makefile changes: - enable unused-variable warning that was wrongly disabled for clang Kconfig changes: - warn blank 'help' and fix existing instances - fix 'choice' behavior to not write out invisible symbols - fix misc weirdness Coccinell changes: - fix false positive of free after managed memory alloc detection - improve performance of NULL dereference detection -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJafl86AAoJED2LAQed4NsGrBEP/23mRl+8dSYkTmlczP7stZHL tGkMQIOj85usPV4JIxYHgge6XhU0CBFXNGnDnxGeNEtwnBr5QQNxuS2nPh7rHJIN zX5rX/vwO9lzn2FFEdKrk8bito1IgnUHUvN/d0ikPWzY7GaMy6WrIWgyThllsLNE W7hp3cpUQOhLL9PKXwglZ/oS4iTpEs0DwN93UXU7cp7zyRa0XtFfPf7/IJ2KY+Yl a2TEsUuZ/slJoxLhacr6+TBAgqUyewWIs0nAGdjP2EVlSjxZJQYFEQq4KnLUO2gV wLHH2snsZSBDfPDp0M9OOb737HE17NRmuLjWxUZZOMFz8tvfUT1454zhVAN2OtSQ cP0RqVRrFiS721oxacZpAxKFrd7o4ugUHpftJMPQAq70T9JFFbapfCLvd+OblOb/ CWmDOOR37tvop5OCuaqaSMq7a+ZQt2cO5fogiEDdnjZkk2AH5GgsAHJIrl7hH4OT P9UMcxaWSGbutdVkM4cMUmYMuAJjiFhx1fiD+hevB1KvemXRXrqhCb0wV+GRdcoU MXGvOGVw5WyF/vFdjpjkY7KeCgpU3BTWH3pFC2a5vUCDqgD8yndwFghJMDfSjl6d 46DIqknyveq234GK/Yz5khlbY094yL8JrJU2duva/9fGV86tgOr29xgMK28Lpyh8 AYRGO9XgmehZrEHcAQ57 =jy5l -----END PGP SIGNATURE----- Merge tag 'kbuild-v4.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull more Kbuild updates from Masahiro Yamada: "Makefile changes: - enable unused-variable warning that was wrongly disabled for clang Kconfig changes: - warn about blank 'help' and fix existing instances - fix 'choice' behavior to not write out invisible symbols - fix misc weirdness Coccinell changes: - fix false positive of free after managed memory alloc detection - improve performance of NULL dereference detection" * tag 'kbuild-v4.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (21 commits) kconfig: remove const qualifier from sym_expand_string_value() kconfig: add xrealloc() helper kconfig: send error messages to stderr kconfig: echo stdin to stdout if either is redirected kconfig: remove check_stdin() kconfig: remove 'config*' pattern from .gitignnore kconfig: show '?' prompt even if no help text is available kconfig: do not write choice values when their dependency becomes n coccinelle: deref_null: avoid useless computation coccinelle: devm_free: reduce false positives kbuild: clang: disable unused variable warnings only when constant kconfig: Warn if help text is blank nios2: kconfig: Remove blank help text arm: vt8500: kconfig: Remove blank help text MIPS: kconfig: Remove blank help text MIPS: BCM63XX: kconfig: Remove blank help text lib/Kconfig.debug: Remove blank help text Staging: rtl8192e: kconfig: Remove blank help text Staging: rtl8192u: kconfig: Remove blank help text mmc: kconfig: Remove blank help text ...
This commit is contained in:
commit
9a61df9e5f
23 changed files with 121 additions and 77 deletions
3
Makefile
3
Makefile
|
@ -729,7 +729,6 @@ endif
|
|||
|
||||
ifeq ($(cc-name),clang)
|
||||
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||
|
@ -747,9 +746,9 @@ else
|
|||
# These warnings generated too much noise in a regular build.
|
||||
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
||||
endif
|
||||
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
||||
ifdef CONFIG_FRAME_POINTER
|
||||
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||
else
|
||||
|
|
|
@ -13,7 +13,6 @@ config ARCH_WM8505
|
|||
depends on ARCH_MULTI_V5
|
||||
select ARCH_VT8500
|
||||
select CPU_ARM926T
|
||||
help
|
||||
|
||||
config ARCH_WM8750
|
||||
bool "WonderMedia WM8750"
|
||||
|
|
|
@ -2333,7 +2333,6 @@ config MIPS_VPE_LOADER_TOM
|
|||
config MIPS_VPE_APSP_API
|
||||
bool "Enable support for AP/SP API (RTLX)"
|
||||
depends on MIPS_VPE_LOADER
|
||||
help
|
||||
|
||||
config MIPS_VPE_APSP_API_CMP
|
||||
bool
|
||||
|
|
|
@ -7,6 +7,5 @@ choice
|
|||
config BOARD_BCM963XX
|
||||
bool "Generic Broadcom 963xx boards"
|
||||
select SSB
|
||||
help
|
||||
|
||||
endchoice
|
||||
|
|
|
@ -152,7 +152,6 @@ menu "Advanced setup"
|
|||
|
||||
config ADVANCED_OPTIONS
|
||||
bool "Prompt for advanced kernel configuration options"
|
||||
help
|
||||
|
||||
comment "Default settings for advanced configuration options are used"
|
||||
depends on !ADVANCED_OPTIONS
|
||||
|
|
|
@ -874,7 +874,6 @@ config MMC_CQHCI
|
|||
config MMC_TOSHIBA_PCI
|
||||
tristate "Toshiba Type A SD/MMC Card Interface Driver"
|
||||
depends on PCI
|
||||
help
|
||||
|
||||
config MMC_BCM2835
|
||||
tristate "Broadcom BCM2835 SDHOST MMC Controller support"
|
||||
|
|
|
@ -6,4 +6,3 @@ config RTL8192E
|
|||
select WEXT_PRIV
|
||||
select CRYPTO
|
||||
select FW_LOADER
|
||||
---help---
|
||||
|
|
|
@ -5,4 +5,3 @@ config RTL8192U
|
|||
select WIRELESS_EXT
|
||||
select WEXT_PRIV
|
||||
select CRYPTO
|
||||
---help---
|
||||
|
|
|
@ -1156,7 +1156,6 @@ config FB_I810_I2C
|
|||
bool "Enable DDC Support"
|
||||
depends on FB_I810 && FB_I810_GTF
|
||||
select FB_DDC
|
||||
help
|
||||
|
||||
config FB_LE80578
|
||||
tristate "Intel LE80578 (Vermilion) support"
|
||||
|
|
|
@ -351,7 +351,6 @@ config SECTION_MISMATCH_WARN_ONLY
|
|||
#
|
||||
config ARCH_WANT_FRAME_POINTERS
|
||||
bool
|
||||
help
|
||||
|
||||
config FRAME_POINTER
|
||||
bool "Compile the kernel with frame pointers"
|
||||
|
|
|
@ -56,9 +56,62 @@ expression x;
|
|||
x = devm_ioport_map(...)
|
||||
)
|
||||
|
||||
@safe depends on context || org || report exists@
|
||||
expression x;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(
|
||||
x = kmalloc(...)
|
||||
|
|
||||
x = kvasprintf(...)
|
||||
|
|
||||
x = kasprintf(...)
|
||||
|
|
||||
x = kzalloc(...)
|
||||
|
|
||||
x = kmalloc_array(...)
|
||||
|
|
||||
x = kcalloc(...)
|
||||
|
|
||||
x = kstrdup(...)
|
||||
|
|
||||
x = kmemdup(...)
|
||||
|
|
||||
x = get_free_pages(...)
|
||||
|
|
||||
x = request_irq(...)
|
||||
|
|
||||
x = ioremap(...)
|
||||
|
|
||||
x = ioremap_nocache(...)
|
||||
|
|
||||
x = ioport_map(...)
|
||||
)
|
||||
...
|
||||
(
|
||||
kfree@p(x)
|
||||
|
|
||||
kzfree@p(x)
|
||||
|
|
||||
__krealloc@p(x, ...)
|
||||
|
|
||||
krealloc@p(x, ...)
|
||||
|
|
||||
free_pages@p(x, ...)
|
||||
|
|
||||
free_page@p(x)
|
||||
|
|
||||
free_irq@p(x)
|
||||
|
|
||||
iounmap@p(x)
|
||||
|
|
||||
ioport_unmap@p(x)
|
||||
)
|
||||
|
||||
@pb@
|
||||
expression r.x;
|
||||
position p;
|
||||
position p != safe.p;
|
||||
@@
|
||||
|
||||
(
|
||||
|
|
|
@ -212,7 +212,7 @@ else S3
|
|||
// The following three rules are duplicates of ifm, pr1 and pr2 respectively.
|
||||
// It is need because the previous rule as already made a "change".
|
||||
|
||||
@ifm1@
|
||||
@ifm1 depends on context && !org && !report@
|
||||
expression *E;
|
||||
statement S1,S2;
|
||||
position p1;
|
||||
|
@ -220,7 +220,7 @@ position p1;
|
|||
|
||||
if@p1 ((E == NULL && ...) || ...) S1 else S2
|
||||
|
||||
@pr11 expression@
|
||||
@pr11 depends on context && !org && !report expression@
|
||||
expression *ifm1.E;
|
||||
identifier f;
|
||||
position p1;
|
||||
|
@ -228,7 +228,7 @@ position p1;
|
|||
|
||||
(E != NULL && ...) ? <+...E->f@p1...+> : ...
|
||||
|
||||
@pr12 expression@
|
||||
@pr12 depends on context && !org && !report expression@
|
||||
expression *ifm1.E;
|
||||
identifier f;
|
||||
position p2;
|
||||
|
|
1
scripts/kconfig/.gitignore
vendored
1
scripts/kconfig/.gitignore
vendored
|
@ -1,7 +1,6 @@
|
|||
#
|
||||
# Generated files
|
||||
#
|
||||
config*
|
||||
*.lex.c
|
||||
*.tab.c
|
||||
*.tab.h
|
||||
|
|
|
@ -39,7 +39,6 @@ static enum input_mode input_mode = oldaskconfig;
|
|||
|
||||
static int indent = 1;
|
||||
static int tty_stdio;
|
||||
static int valid_stdin = 1;
|
||||
static int sync_kconfig;
|
||||
static int conf_cnt;
|
||||
static char line[PATH_MAX];
|
||||
|
@ -72,21 +71,14 @@ static void strip(char *str)
|
|||
*p-- = 0;
|
||||
}
|
||||
|
||||
static void check_stdin(void)
|
||||
{
|
||||
if (!valid_stdin) {
|
||||
printf(_("aborted!\n\n"));
|
||||
printf(_("Console input/output is redirected. "));
|
||||
printf(_("Run 'make oldconfig' to update configuration.\n\n"));
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Helper function to facilitate fgets() by Jean Sacren. */
|
||||
static void xfgets(char *str, int size, FILE *in)
|
||||
{
|
||||
if (!fgets(str, size, in))
|
||||
fprintf(stderr, "\nError in reading or end of file.\n");
|
||||
|
||||
if (!tty_stdio)
|
||||
printf("%s", str);
|
||||
}
|
||||
|
||||
static int conf_askvalue(struct symbol *sym, const char *def)
|
||||
|
@ -113,13 +105,10 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
|||
printf("%s\n", def);
|
||||
return 0;
|
||||
}
|
||||
check_stdin();
|
||||
/* fall through */
|
||||
case oldaskconfig:
|
||||
fflush(stdout);
|
||||
xfgets(line, sizeof(line), stdin);
|
||||
if (!tty_stdio)
|
||||
printf("\n");
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
|
@ -199,9 +188,7 @@ static int conf_sym(struct menu *menu)
|
|||
printf("/m");
|
||||
if (oldval != yes && sym_tristate_within_range(sym, yes))
|
||||
printf("/y");
|
||||
if (menu_has_help(menu))
|
||||
printf("/?");
|
||||
printf("] ");
|
||||
printf("/?] ");
|
||||
if (!conf_askvalue(sym, sym_get_string_value(sym)))
|
||||
return 0;
|
||||
strip(line);
|
||||
|
@ -303,10 +290,7 @@ static int conf_choice(struct menu *menu)
|
|||
printf("[1]: 1\n");
|
||||
goto conf_childs;
|
||||
}
|
||||
printf("[1-%d", cnt);
|
||||
if (menu_has_help(menu))
|
||||
printf("?");
|
||||
printf("]: ");
|
||||
printf("[1-%d?]: ", cnt);
|
||||
switch (input_mode) {
|
||||
case oldconfig:
|
||||
case silentoldconfig:
|
||||
|
@ -315,7 +299,6 @@ static int conf_choice(struct menu *menu)
|
|||
printf("%d\n", cnt);
|
||||
break;
|
||||
}
|
||||
check_stdin();
|
||||
/* fall through */
|
||||
case oldaskconfig:
|
||||
fflush(stdout);
|
||||
|
@ -508,7 +491,7 @@ int main(int ac, char **av)
|
|||
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||
textdomain(PACKAGE);
|
||||
|
||||
tty_stdio = isatty(0) && isatty(1) && isatty(2);
|
||||
tty_stdio = isatty(0) && isatty(1);
|
||||
|
||||
while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
|
||||
if (opt == 's') {
|
||||
|
@ -565,7 +548,7 @@ int main(int ac, char **av)
|
|||
}
|
||||
}
|
||||
if (ac == optind) {
|
||||
printf(_("%s: Kconfig file missing\n"), av[0]);
|
||||
fprintf(stderr, _("%s: Kconfig file missing\n"), av[0]);
|
||||
conf_usage(progname);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -590,9 +573,11 @@ int main(int ac, char **av)
|
|||
if (!defconfig_file)
|
||||
defconfig_file = conf_get_default_confname();
|
||||
if (conf_read(defconfig_file)) {
|
||||
printf(_("***\n"
|
||||
"*** Can't find default configuration \"%s\"!\n"
|
||||
"***\n"), defconfig_file);
|
||||
fprintf(stderr,
|
||||
_("***\n"
|
||||
"*** Can't find default configuration \"%s\"!\n"
|
||||
"***\n"),
|
||||
defconfig_file);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
|
@ -650,7 +635,6 @@ int main(int ac, char **av)
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
valid_stdin = tty_stdio;
|
||||
}
|
||||
|
||||
switch (input_mode) {
|
||||
|
|
|
@ -201,7 +201,7 @@ static int add_byte(int c, char **lineptr, size_t slen, size_t *n)
|
|||
if (new_size > *n) {
|
||||
new_size += LINE_GROWTH - 1;
|
||||
new_size *= 2;
|
||||
nline = realloc(*lineptr, new_size);
|
||||
nline = xrealloc(*lineptr, new_size);
|
||||
if (!nline)
|
||||
return -1;
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ struct expr *expr_copy(const struct expr *org)
|
|||
e->right.expr = expr_copy(org->right.expr);
|
||||
break;
|
||||
default:
|
||||
printf("can't copy type %d\n", e->type);
|
||||
fprintf(stderr, "can't copy type %d\n", e->type);
|
||||
free(e);
|
||||
e = NULL;
|
||||
break;
|
||||
|
@ -127,7 +127,7 @@ void expr_free(struct expr *e)
|
|||
expr_free(e->right.expr);
|
||||
break;
|
||||
default:
|
||||
printf("how to free type %d?\n", e->type);
|
||||
fprintf(stderr, "how to free type %d?\n", e->type);
|
||||
break;
|
||||
}
|
||||
free(e);
|
||||
|
|
|
@ -114,6 +114,7 @@ struct file *file_lookup(const char *name);
|
|||
int file_write_dep(const char *name);
|
||||
void *xmalloc(size_t size);
|
||||
void *xcalloc(size_t nmemb, size_t size);
|
||||
void *xrealloc(void *p, size_t size);
|
||||
|
||||
struct gstr {
|
||||
size_t len;
|
||||
|
|
|
@ -31,7 +31,7 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
|
|||
|
||||
struct symbol * sym_lookup(const char *name, int flags);
|
||||
struct symbol * sym_find(const char *name);
|
||||
const char * sym_expand_string_value(const char *in);
|
||||
char *sym_expand_string_value(const char *in);
|
||||
const char * sym_escape_string_value(const char *in);
|
||||
struct symbol ** sym_re_search(const char *pattern);
|
||||
const char * sym_type_name(enum symbol_type type);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*
|
||||
*/
|
||||
#include "nconf.h"
|
||||
#include "lkc.h"
|
||||
|
||||
/* a list of all the different widgets we use */
|
||||
attributes_t attributes[ATTR_MAX+1] = {0};
|
||||
|
@ -374,7 +375,7 @@ int dialog_inputbox(WINDOW *main_window,
|
|||
|
||||
if (strlen(init)+1 > *result_len) {
|
||||
*result_len = strlen(init)+1;
|
||||
*resultp = result = realloc(result, *result_len);
|
||||
*resultp = result = xrealloc(result, *result_len);
|
||||
}
|
||||
|
||||
/* find the widest line of msg: */
|
||||
|
|
|
@ -371,11 +371,13 @@ void sym_calc_value(struct symbol *sym)
|
|||
sym->curr.tri = no;
|
||||
return;
|
||||
}
|
||||
if (!sym_is_choice_value(sym))
|
||||
sym->flags &= ~SYMBOL_WRITE;
|
||||
sym->flags &= ~SYMBOL_WRITE;
|
||||
|
||||
sym_calc_visibility(sym);
|
||||
|
||||
if (sym->visible != no)
|
||||
sym->flags |= SYMBOL_WRITE;
|
||||
|
||||
/* set default if recursively called */
|
||||
sym->curr = newval;
|
||||
|
||||
|
@ -390,7 +392,6 @@ void sym_calc_value(struct symbol *sym)
|
|||
/* if the symbol is visible use the user value
|
||||
* if available, otherwise try the default value
|
||||
*/
|
||||
sym->flags |= SYMBOL_WRITE;
|
||||
if (sym_has_value(sym)) {
|
||||
newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
|
||||
sym->visible);
|
||||
|
@ -433,12 +434,9 @@ void sym_calc_value(struct symbol *sym)
|
|||
case S_STRING:
|
||||
case S_HEX:
|
||||
case S_INT:
|
||||
if (sym->visible != no) {
|
||||
sym->flags |= SYMBOL_WRITE;
|
||||
if (sym_has_value(sym)) {
|
||||
newval.val = sym->def[S_DEF_USER].val;
|
||||
break;
|
||||
}
|
||||
if (sym->visible != no && sym_has_value(sym)) {
|
||||
newval.val = sym->def[S_DEF_USER].val;
|
||||
break;
|
||||
}
|
||||
prop = sym_get_default_prop(sym);
|
||||
if (prop) {
|
||||
|
@ -901,7 +899,7 @@ struct symbol *sym_find(const char *name)
|
|||
* name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
|
||||
* the empty string.
|
||||
*/
|
||||
const char *sym_expand_string_value(const char *in)
|
||||
char *sym_expand_string_value(const char *in)
|
||||
{
|
||||
const char *src;
|
||||
char *res;
|
||||
|
@ -938,7 +936,7 @@ const char *sym_expand_string_value(const char *in)
|
|||
newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
|
||||
if (newlen > reslen) {
|
||||
reslen = newlen;
|
||||
res = realloc(res, reslen);
|
||||
res = xrealloc(res, reslen);
|
||||
}
|
||||
|
||||
strcat(res, symval);
|
||||
|
@ -1223,7 +1221,7 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
printf("Oops! How to check %d?\n", e->type);
|
||||
fprintf(stderr, "Oops! How to check %d?\n", e->type);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
struct file *file_lookup(const char *name)
|
||||
{
|
||||
struct file *file;
|
||||
const char *file_name = sym_expand_string_value(name);
|
||||
char *file_name = sym_expand_string_value(name);
|
||||
|
||||
for (file = file_list; file; file = file->next) {
|
||||
if (!strcmp(name, file->name)) {
|
||||
free((void *)file_name);
|
||||
free(file_name);
|
||||
return file;
|
||||
}
|
||||
}
|
||||
|
@ -104,7 +104,7 @@ void str_append(struct gstr *gs, const char *s)
|
|||
if (s) {
|
||||
l = strlen(gs->s) + strlen(s) + 1;
|
||||
if (l > gs->len) {
|
||||
gs->s = realloc(gs->s, l);
|
||||
gs->s = xrealloc(gs->s, l);
|
||||
gs->len = l;
|
||||
}
|
||||
strcat(gs->s, s);
|
||||
|
@ -145,3 +145,12 @@ void *xcalloc(size_t nmemb, size_t size)
|
|||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void *xrealloc(void *p, size_t size)
|
||||
{
|
||||
p = realloc(p, size);
|
||||
if (p)
|
||||
return p;
|
||||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ static void append_string(const char *str, int size)
|
|||
if (new_size > text_asize) {
|
||||
new_size += START_STRSIZE - 1;
|
||||
new_size &= -START_STRSIZE;
|
||||
text = realloc(text, new_size);
|
||||
text = xrealloc(text, new_size);
|
||||
text_asize = new_size;
|
||||
}
|
||||
memcpy(text + text_size, str, size);
|
||||
|
@ -184,7 +184,9 @@ n [A-Za-z0-9_-]
|
|||
append_string(yytext, 1);
|
||||
}
|
||||
\n {
|
||||
printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
|
||||
fprintf(stderr,
|
||||
"%s:%d:warning: multi-line strings not supported\n",
|
||||
zconf_curname(), zconf_lineno());
|
||||
current_file->lineno++;
|
||||
BEGIN(INITIAL);
|
||||
return T_EOL;
|
||||
|
@ -294,7 +296,7 @@ void zconf_initscan(const char *name)
|
|||
{
|
||||
yyin = zconf_fopen(name);
|
||||
if (!yyin) {
|
||||
printf("can't find file %s\n", name);
|
||||
fprintf(stderr, "can't find file %s\n", name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -315,8 +317,8 @@ void zconf_nextfile(const char *name)
|
|||
current_buf->state = YY_CURRENT_BUFFER;
|
||||
yyin = zconf_fopen(file->name);
|
||||
if (!yyin) {
|
||||
printf("%s:%d: can't open file \"%s\"\n",
|
||||
zconf_curname(), zconf_lineno(), file->name);
|
||||
fprintf(stderr, "%s:%d: can't open file \"%s\"\n",
|
||||
zconf_curname(), zconf_lineno(), file->name);
|
||||
exit(1);
|
||||
}
|
||||
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
|
||||
|
@ -325,20 +327,21 @@ void zconf_nextfile(const char *name)
|
|||
|
||||
for (iter = current_file->parent; iter; iter = iter->parent ) {
|
||||
if (!strcmp(current_file->name,iter->name) ) {
|
||||
printf("%s:%d: recursive inclusion detected. "
|
||||
"Inclusion path:\n current file : '%s'\n",
|
||||
zconf_curname(), zconf_lineno(),
|
||||
zconf_curname());
|
||||
fprintf(stderr,
|
||||
"%s:%d: recursive inclusion detected. "
|
||||
"Inclusion path:\n current file : '%s'\n",
|
||||
zconf_curname(), zconf_lineno(),
|
||||
zconf_curname());
|
||||
iter = current_file->parent;
|
||||
while (iter && \
|
||||
strcmp(iter->name,current_file->name)) {
|
||||
printf(" included from: '%s:%d'\n",
|
||||
iter->name, iter->lineno-1);
|
||||
fprintf(stderr, " included from: '%s:%d'\n",
|
||||
iter->name, iter->lineno-1);
|
||||
iter = iter->parent;
|
||||
}
|
||||
if (iter)
|
||||
printf(" included from: '%s:%d'\n",
|
||||
iter->name, iter->lineno+1);
|
||||
fprintf(stderr, " included from: '%s:%d'\n",
|
||||
iter->name, iter->lineno+1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -436,6 +436,12 @@ help: help_start T_HELPTEXT
|
|||
zconfprint("warning: '%s' defined with more than one help text -- only the last one will be used",
|
||||
current_entry->sym->name ?: "<choice>");
|
||||
}
|
||||
|
||||
/* Is the help text empty or all whitespace? */
|
||||
if ($2[strspn($2, " \f\n\r\t\v")] == '\0')
|
||||
zconfprint("warning: '%s' defined with blank help text",
|
||||
current_entry->sym->name ?: "<choice>");
|
||||
|
||||
current_entry->help = $2;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue