Commit 1d3fe4a7 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6

* 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6: (25 commits)
  kconfig: Introduce IS_ENABLED(), IS_BUILTIN() and IS_MODULE()
  xconfig: Abort close if configuration cannot be saved
  kconfig: fix missing "0x" prefix from S_HEX symbol in autoconf.h
  kconfig/nconf: remove useless conditionnal
  kconfig/nconf: prevent segfault on empty menu
  kconfig/nconf: use the generic menu_get_ext_help()
  nconfig: Avoid Wunused-but-set warning
  kconfig/conf: mark xfgets() private
  kconfig: remove pending prototypes for kconfig_load()
  kconfig/conf: add command line options' description
  kconfig/conf: reduce the scope of `defconfig_file'
  kconfig: use calloc() for expr allocation
  kconfig: introduce specialized printer
  kconfig: do not overwrite symbol direct dependency in assignment
  kconfig/gconf: silent missing prototype warnings
  kconfig/gconf: kill deadcode
  kconfig: nuke LKC_DIRECT_LINK cruft
  kconfig: nuke reference to SWIG
  kconfig: add missing <stdlib.h> inclusion
  kconfig: add missing <ctype.h> inclusion
  ...

Fix up conflicts in scripts/kconfig/Makefile
parents 664a41b8 2a11c8ea
...@@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage ...@@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \ LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
-Iarch/$(hdr-arch)/include/generated -Iinclude \ -Iarch/$(hdr-arch)/include/generated -Iinclude \
$(if $(KBUILD_SRC), -I$(srctree)/include) \ $(if $(KBUILD_SRC), -I$(srctree)/include) \
-include include/generated/autoconf.h -include $(srctree)/include/linux/kconfig.h
KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_CPPFLAGS := -D__KERNEL__
......
#ifndef __LINUX_KCONFIG_H
#define __LINUX_KCONFIG_H
#include <generated/autoconf.h>
/*
* Helper macros to use CONFIG_ options in C expressions. Note that
* these only work with boolean and tristate options.
*/
/*
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
* 0 otherwise.
*
*/
#define IS_ENABLED(option) \
(__enabled_ ## option || __enabled_ ## option ## _MODULE)
/*
* IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
* otherwise. For boolean options, this is equivalent to
* IS_ENABLED(CONFIG_FOO).
*/
#define IS_BUILTIN(option) __enabled_ ## option
/*
* IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0
* otherwise.
*/
#define IS_MODULE(option) __enabled_ ## option ## _MODULE
#endif /* __LINUX_KCONFIG_H */
...@@ -170,8 +170,8 @@ mconf-objs := mconf.o zconf.tab.o $(lxdialog) ...@@ -170,8 +170,8 @@ mconf-objs := mconf.o zconf.tab.o $(lxdialog)
nconf-objs := nconf.o zconf.tab.o nconf.gui.o nconf-objs := nconf.o zconf.tab.o nconf.gui.o
kxgettext-objs := kxgettext.o zconf.tab.o kxgettext-objs := kxgettext.o zconf.tab.o
qconf-cxxobjs := qconf.o qconf-cxxobjs := qconf.o
qconf-objs := kconfig_load.o zconf.tab.o qconf-objs := zconf.tab.o
gconf-objs := gconf.o kconfig_load.o zconf.tab.o gconf-objs := gconf.o zconf.tab.o
hostprogs-y := conf hostprogs-y := conf
...@@ -203,7 +203,7 @@ ifeq ($(gconf-target),1) ...@@ -203,7 +203,7 @@ ifeq ($(gconf-target),1)
hostprogs-y += gconf hostprogs-y += gconf
endif endif
clean-files := lkc_defs.h qconf.moc .tmp_qtcheck .tmp_gtkcheck clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
clean-files += mconf qconf gconf nconf clean-files += mconf qconf gconf nconf
clean-files += config.pot linux.pot clean-files += config.pot linux.pot
...@@ -226,12 +226,12 @@ HOSTCFLAGS_zconf.tab.o := -I$(src) ...@@ -226,12 +226,12 @@ HOSTCFLAGS_zconf.tab.o := -I$(src)
LEX_PREFIX_zconf := zconf LEX_PREFIX_zconf := zconf
YACC_PREFIX_zconf := zconf YACC_PREFIX_zconf := zconf
HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl HOSTLOADLIBES_qconf = $(KC_QT_LIBS)
HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS)
HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \ HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
-D LKC_DIRECT_LINK -Wno-missing-prototypes
HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC)) HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
...@@ -321,18 +321,11 @@ endif ...@@ -321,18 +321,11 @@ endif
$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c $(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
$(obj)/kconfig_load.o: $(obj)/lkc_defs.h $(obj)/qconf.o: $(obj)/qconf.moc
$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
$(obj)/gconf.o: $(obj)/lkc_defs.h
$(obj)/%.moc: $(src)/%.h $(obj)/%.moc: $(src)/%.h
$(KC_QT_MOC) -i $< -o $@ $(KC_QT_MOC) -i $< -o $@
$(obj)/lkc_defs.h: $(src)/lkc_proto.h
$(Q)sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
# Extract gconf menu items for I18N support # Extract gconf menu items for I18N support
$(obj)/gconf.glade.h: $(obj)/gconf.glade $(obj)/gconf.glade.h: $(obj)/gconf.glade
$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \ $(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
......
...@@ -14,11 +14,11 @@ ...@@ -14,11 +14,11 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h> #include <sys/time.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
static void conf(struct menu *menu); static void conf(struct menu *menu);
static void check_conf(struct menu *menu); static void check_conf(struct menu *menu);
static void xfgets(char *str, int size, FILE *in);
enum input_mode { enum input_mode {
oldaskconfig, oldaskconfig,
...@@ -35,8 +35,6 @@ enum input_mode { ...@@ -35,8 +35,6 @@ enum input_mode {
oldnoconfig, oldnoconfig,
} input_mode = oldaskconfig; } input_mode = oldaskconfig;
char *defconfig_file;
static int indent = 1; static int indent = 1;
static int valid_stdin = 1; static int valid_stdin = 1;
static int sync_kconfig; static int sync_kconfig;
...@@ -106,6 +104,7 @@ static int conf_askvalue(struct symbol *sym, const char *def) ...@@ -106,6 +104,7 @@ static int conf_askvalue(struct symbol *sym, const char *def)
return 0; return 0;
} }
check_stdin(); check_stdin();
/* fall through */
case oldaskconfig: case oldaskconfig:
fflush(stdout); fflush(stdout);
xfgets(line, 128, stdin); xfgets(line, 128, stdin);
...@@ -150,6 +149,7 @@ static int conf_string(struct menu *menu) ...@@ -150,6 +149,7 @@ static int conf_string(struct menu *menu)
def = NULL; def = NULL;
break; break;
} }
/* fall through */
default: default:
line[strlen(line)-1] = 0; line[strlen(line)-1] = 0;
def = line; def = line;
...@@ -304,6 +304,7 @@ static int conf_choice(struct menu *menu) ...@@ -304,6 +304,7 @@ static int conf_choice(struct menu *menu)
break; break;
} }
check_stdin(); check_stdin();
/* fall through */
case oldaskconfig: case oldaskconfig:
fflush(stdout); fflush(stdout);
xfgets(line, 128, stdin); xfgets(line, 128, stdin);
...@@ -369,6 +370,7 @@ static void conf(struct menu *menu) ...@@ -369,6 +370,7 @@ static void conf(struct menu *menu)
check_conf(menu); check_conf(menu);
return; return;
} }
/* fall through */
case P_COMMENT: case P_COMMENT:
prompt = menu_get_prompt(menu); prompt = menu_get_prompt(menu);
if (prompt) if (prompt)
...@@ -456,10 +458,30 @@ static struct option long_opts[] = { ...@@ -456,10 +458,30 @@ static struct option long_opts[] = {
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
static void conf_usage(const char *progname)
{
printf("Usage: %s [option] <kconfig-file>\n", progname);
printf("[option] is _one_ of the following:\n");
printf(" --listnewconfig List new options\n");
printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
printf(" --oldconfig Update a configuration using a provided .config as base\n");
printf(" --silentoldconfig Same as oldconfig, but quietly, additionally update deps\n");
printf(" --oldnoconfig Same as silentoldconfig but set new symbols to no\n");
printf(" --defconfig <file> New config with default defined in <file>\n");
printf(" --savedefconfig <file> Save the minimal current configuration to <file>\n");
printf(" --allnoconfig New config where all options are answered with no\n");
printf(" --allyesconfig New config where all options are answered with yes\n");
printf(" --allmodconfig New config where all options are answered with mod\n");
printf(" --alldefconfig New config with all symbols set to default\n");
printf(" --randconfig New config with random answer to all options\n");
}
int main(int ac, char **av) int main(int ac, char **av)
{ {
const char *progname = av[0];
int opt; int opt;
const char *name; const char *name, *defconfig_file = NULL /* gcc uninit */;
struct stat tmpstat; struct stat tmpstat;
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
...@@ -491,14 +513,24 @@ int main(int ac, char **av) ...@@ -491,14 +513,24 @@ int main(int ac, char **av)
srand(seed); srand(seed);
break; break;
} }
case oldaskconfig:
case oldconfig:
case allnoconfig:
case allyesconfig:
case allmodconfig:
case alldefconfig:
case listnewconfig:
case oldnoconfig:
break;
case '?': case '?':
fprintf(stderr, _("See README for usage info\n")); conf_usage(progname);
exit(1); exit(1);
break; break;
} }
} }
if (ac == optind) { if (ac == optind) {
printf(_("%s: Kconfig file missing\n"), av[0]); printf(_("%s: Kconfig file missing\n"), av[0]);
conf_usage(progname);
exit(1); exit(1);
} }
name = av[optind]; name = av[optind];
...@@ -641,13 +673,11 @@ int main(int ac, char **av) ...@@ -641,13 +673,11 @@ int main(int ac, char **av)
} }
return 0; return 0;
} }
/* /*
* Helper function to facilitate fgets() by Jean Sacren. * Helper function to facilitate fgets() by Jean Sacren.
*/ */
void xfgets(str, size, in) void xfgets(char *str, int size, FILE *in)
char *str;
int size;
FILE *in;
{ {
if (fgets(str, size, in) == NULL) if (fgets(str, size, in) == NULL)
fprintf(stderr, "\nError in reading or end of file.\n"); fprintf(stderr, "\nError in reading or end of file.\n");
......
This diff is collapsed.
...@@ -7,15 +7,13 @@ ...@@ -7,15 +7,13 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#define DEBUG_EXPR 0 #define DEBUG_EXPR 0
struct expr *expr_alloc_symbol(struct symbol *sym) struct expr *expr_alloc_symbol(struct symbol *sym)
{ {
struct expr *e = malloc(sizeof(*e)); struct expr *e = calloc(1, sizeof(*e));
memset(e, 0, sizeof(*e));
e->type = E_SYMBOL; e->type = E_SYMBOL;
e->left.sym = sym; e->left.sym = sym;
return e; return e;
...@@ -23,8 +21,7 @@ struct expr *expr_alloc_symbol(struct symbol *sym) ...@@ -23,8 +21,7 @@ struct expr *expr_alloc_symbol(struct symbol *sym)
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
{ {
struct expr *e = malloc(sizeof(*e)); struct expr *e = calloc(1, sizeof(*e));
memset(e, 0, sizeof(*e));
e->type = type; e->type = type;
e->left.expr = ce; e->left.expr = ce;
return e; return e;
...@@ -32,8 +29,7 @@ struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) ...@@ -32,8 +29,7 @@ struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
{ {
struct expr *e = malloc(sizeof(*e)); struct expr *e = calloc(1, sizeof(*e));
memset(e, 0, sizeof(*e));
e->type = type; e->type = type;
e->left.expr = e1; e->left.expr = e1;
e->right.expr = e2; e->right.expr = e2;
...@@ -42,8 +38,7 @@ struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e ...@@ -42,8 +38,7 @@ struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e
struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
{ {
struct expr *e = malloc(sizeof(*e)); struct expr *e = calloc(1, sizeof(*e));
memset(e, 0, sizeof(*e));
e->type = type; e->type = type;
e->left.sym = s1; e->left.sym = s1;
e->right.sym = s2; e->right.sym = s2;
......
...@@ -172,8 +172,6 @@ struct menu { ...@@ -172,8 +172,6 @@ struct menu {
#define MENU_CHANGED 0x0001 #define MENU_CHANGED 0x0001
#define MENU_ROOT 0x0002 #define MENU_ROOT 0x0002
#ifndef SWIG
extern struct file *file_list; extern struct file *file_list;
extern struct file *current_file; extern struct file *current_file;
struct file *lookup_file(const char *name); struct file *lookup_file(const char *name);
...@@ -218,7 +216,6 @@ static inline int expr_is_no(struct expr *e) ...@@ -218,7 +216,6 @@ static inline int expr_is_no(struct expr *e)
{ {
return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
} }
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -285,8 +285,6 @@ void init_left_tree(void) ...@@ -285,8 +285,6 @@ void init_left_tree(void)
static void renderer_edited(GtkCellRendererText * cell, static void renderer_edited(GtkCellRendererText * cell,
const gchar * path_string, const gchar * path_string,
const gchar * new_text, gpointer user_data); const gchar * new_text, gpointer user_data);
static void renderer_toggled(GtkCellRendererToggle * cellrenderertoggle,
gchar * arg1, gpointer user_data);
void init_right_tree(void) void init_right_tree(void)
{ {
...@@ -320,8 +318,6 @@ void init_right_tree(void) ...@@ -320,8 +318,6 @@ void init_right_tree(void)
"inconsistent", COL_BTNINC, "inconsistent", COL_BTNINC,
"visible", COL_BTNVIS, "visible", COL_BTNVIS,
"radio", COL_BTNRAD, NULL); "radio", COL_BTNRAD, NULL);
/*g_signal_connect(G_OBJECT(renderer), "toggled",
G_CALLBACK(renderer_toggled), NULL); */
renderer = gtk_cell_renderer_text_new(); renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column), gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
renderer, FALSE); renderer, FALSE);
...@@ -888,35 +884,6 @@ static void toggle_sym_value(struct menu *menu) ...@@ -888,35 +884,6 @@ static void toggle_sym_value(struct menu *menu)
display_tree_part(); //fixme: keep exp/coll display_tree_part(); //fixme: keep exp/coll
} }
static void renderer_toggled(GtkCellRendererToggle * cell,
gchar * path_string, gpointer user_data)
{
GtkTreePath *path, *sel_path = NULL;
GtkTreeIter iter, sel_iter;
GtkTreeSelection *sel;
struct menu *menu;
path = gtk_tree_path_new_from_string(path_string);
if (!gtk_tree_model_get_iter(model2, &iter, path))
return;
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree2_w));
if (gtk_tree_selection_get_selected(sel, NULL, &sel_iter))
sel_path = gtk_tree_model_get_path(model2, &sel_iter);
if (!sel_path)
goto out1;
if (gtk_tree_path_compare(path, sel_path))
goto out2;
gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
toggle_sym_value(menu);
out2:
gtk_tree_path_free(sel_path);
out1:
gtk_tree_path_free(path);
}
static gint column2index(GtkTreeViewColumn * column) static gint column2index(GtkTreeViewColumn * column)
{ {
gint i; gint i;
...@@ -1172,6 +1139,7 @@ static gchar **fill_row(struct menu *menu) ...@@ -1172,6 +1139,7 @@ static gchar **fill_row(struct menu *menu)
row[COL_BTNVIS] = GINT_TO_POINTER(TRUE); row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
if (sym_is_choice(sym)) if (sym_is_choice(sym))
break; break;
/* fall through */
case S_TRISTATE: case S_TRISTATE:
val = sym_get_tristate_value(sym); val = sym_get_tristate_value(sym);
switch (val) { switch (val) {
...@@ -1506,10 +1474,6 @@ int main(int ac, char *av[]) ...@@ -1506,10 +1474,6 @@ int main(int ac, char *av[])
char *env; char *env;
gchar *glade_file; gchar *glade_file;
#ifndef LKC_DIRECT_LINK
kconfig_load();
#endif
bindtextdomain(PACKAGE, LOCALEDIR); bindtextdomain(PACKAGE, LOCALEDIR);
bind_textdomain_codeset(PACKAGE, "UTF-8"); bind_textdomain_codeset(PACKAGE, "UTF-8");
textdomain(PACKAGE); textdomain(PACKAGE);
......
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include "lkc.h"
#define P(name,type,arg) type (*name ## _p) arg
#include "lkc_proto.h"
#undef P
void kconfig_load(void)
{
void *handle;
char *error;
handle = dlopen("./libkconfig.so", RTLD_LAZY);
if (!handle) {
handle = dlopen("./scripts/kconfig/libkconfig.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(1);
}
}
#define P(name,type,arg) \
{ \
name ## _p = dlsym(handle, #name); \
if ((error = dlerror())) { \
fprintf(stderr, "%s\n", error); \
exit(1); \
} \
}
#include "lkc_proto.h"
#undef P
}
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
static char *escape(const char* text, char *bf, int len) static char *escape(const char* text, char *bf, int len)
......
...@@ -21,12 +21,7 @@ static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; ...@@ -21,12 +21,7 @@ static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c;
extern "C" { extern "C" {
#endif #endif
#ifdef LKC_DIRECT_LINK
#define P(name,type,arg) extern type name arg #define P(name,type,arg) extern type name arg
#else
#include "lkc_defs.h"
#define P(name,type,arg) extern type (*name ## _p) arg
#endif
#include "lkc_proto.h" #include "lkc_proto.h"
#undef P #undef P
...@@ -79,9 +74,6 @@ void zconf_nextfile(const char *name); ...@@ -79,9 +74,6 @@ void zconf_nextfile(const char *name);
int zconf_lineno(void); int zconf_lineno(void);
const char *zconf_curname(void); const char *zconf_curname(void);
/* conf.c */
void xfgets(char *str, int size, FILE *in);
/* confdata.c */ /* confdata.c */
const char *conf_get_configname(void); const char *conf_get_configname(void);
const char *conf_get_autoconfig_name(void); const char *conf_get_autoconfig_name(void);
...@@ -90,6 +82,11 @@ void sym_set_change_count(int count); ...@@ -90,6 +82,11 @@ void sym_set_change_count(int count);
void sym_add_change_count(int count); void sym_add_change_count(int count);
void conf_set_all_new_symbols(enum conf_def_mode mode); void conf_set_all_new_symbols(enum conf_def_mode mode);
struct conf_printer {
void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
void (*print_comment)(FILE *, const char *, void *);
};
/* confdata.c and expr.c */ /* confdata.c and expr.c */
static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out) static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
{ {
...@@ -97,9 +94,6 @@ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out) ...@@ -97,9 +94,6 @@ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
fprintf(stderr, "\nError in writing or end of file.\n"); fprintf(stderr, "\nError in writing or end of file.\n");
} }
/* kconfig_load.c */
void kconfig_load(void);
/* menu.c */ /* menu.c */
void _menu_init(void); void _menu_init(void);
void menu_warn(struct menu *menu, const char *fmt, ...); void menu_warn(struct menu *menu, const char *fmt, ...);
......
...@@ -31,6 +31,7 @@ P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); ...@@ -31,6 +31,7 @@ P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
P(sym_lookup,struct symbol *,(const char *name, int flags)); P(sym_lookup,struct symbol *,(const char *name, int flags));
P(sym_find,struct symbol *,(const char *name)); P(sym_find,struct symbol *,(const char *name));
P(sym_expand_string_value,const char *,(const char *in)); P(sym_expand_string_value,const char *,(const char *in));
P(sym_escape_string_value, const char *,(const char *in));
P(sym_re_search,struct symbol **,(const char *pattern)); P(sym_re_search,struct symbol **,(const char *pattern));
P(sym_type_name,const char *,(enum symbol_type type)); P(sym_type_name,const char *,(enum symbol_type type));
P(sym_calc_value,void,(struct symbol *sym)); P(sym_calc_value,void,(struct symbol *sym));
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <unistd.h> #include <unistd.h>
#include <locale.h> #include <locale.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#include "lxdialog/dialog.h" #include "lxdialog/dialog.h"
...@@ -845,6 +844,7 @@ int main(int ac, char **av) ...@@ -845,6 +844,7 @@ int main(int ac, char **av)
"\n\n")); "\n\n"));
return 1; return 1;
} }
/* fall through */
case -1: case -1:
printf(_("\n\n" printf(_("\n\n"
"*** End of the configuration.\n" "*** End of the configuration.\n"
......
...@@ -3,10 +3,11 @@ ...@@ -3,10 +3,11 @@
* Released under the terms of the GNU GPL v2.0. * Released under the terms of the GNU GPL v2.0.
*/ */
#include <ctype.h>
#include <stdarg.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
static const char nohelp_text[] = N_( static const char nohelp_text[] = N_(
...@@ -350,7 +351,7 @@ void menu_finalize(struct menu *parent) ...@@ -350,7 +351,7 @@ void menu_finalize(struct menu *parent)
last_menu->next = NULL; last_menu->next = NULL;
} }
sym->dir_dep.expr = parent->dep; sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep);
} }
for (menu = parent->list; menu; menu = menu->next) { for (menu = parent->list; menu; menu = menu->next) {
if (sym && sym_is_choice(sym) && if (sym && sym_is_choice(sym) &&
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
*/ */
#define _GNU_SOURCE #define _GNU_SOURCE
#include <string.h> #include <string.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#include "nconf.h" #include "nconf.h"
#include <ctype.h> #include <ctype.h>
...@@ -1067,7 +1067,6 @@ static void conf(struct menu *menu) ...@@ -1067,7 +1067,6 @@ static void conf(struct menu *menu)
struct menu *submenu = 0; struct menu *submenu = 0;
const char *prompt = menu_get_prompt(menu); const char *prompt = menu_get_prompt(menu);
struct symbol *sym; struct symbol *sym;
struct menu *active_menu = NULL;
int res; int res;
int current_index = 0; int current_index = 0;
int last_top_row = 0; int last_top_row = 0;
...@@ -1152,13 +1151,9 @@ static void conf(struct menu *menu) ...@@ -1152,13 +1151,9 @@ static void conf(struct menu *menu)
continue; continue;
submenu = (struct menu *) item_data(); submenu = (struct menu *) item_data();
active_menu = (struct menu *)item_data();
if (!submenu || !menu_is_visible(submenu)) if (!submenu || !menu_is_visible(submenu))
continue; continue;
if (submenu) sym = submenu->sym;
sym = submenu->sym;
else
sym = NULL;
switch (res) { switch (res) {
case ' ': case ' ':
...@@ -1222,20 +1217,13 @@ static void conf_message_callback(const char *fmt, va_list ap) ...@@ -1222,20 +1217,13 @@ static void conf_message_callback(const char *fmt, va_list ap)
static void show_help(struct menu *menu) static void show_help(struct menu *menu)
{ {
struct gstr help = str_new(); struct gstr help;
if (menu && menu->sym && menu_has_help(menu)) { if (!menu)
if (menu->sym->name) { return;
str_printf(&help, "%s%s:\n\n", CONFIG_, menu->sym->name);
str_append(&help, _(menu_get_help(menu))); help = str_new();
str_append(&help, "\n"); menu_get_ext_help(menu, &help);
get_symbol_str(&help, menu->sym);
} else {
str_append(&help, _(menu_get_help(menu)));
}
} else {
str_append(&help, nohelp_text);
}
show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help)); show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help));
str_free(&help); str_free(&help);
} }
......
...@@ -1478,10 +1478,13 @@ void ConfigMainWindow::loadConfig(void) ...@@ -1478,10 +1478,13 @@ void ConfigMainWindow::loadConfig(void)
ConfigView::updateListAll(); ConfigView::updateListAll();
} }
void ConfigMainWindow::saveConfig(void) bool ConfigMainWindow::saveConfig(void)
{ {
if (conf_write(NULL)) if (conf_write(NULL)) {
QMessageBox::information(this, "qconf", _("Unable to save configuration!")); QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
return false;
}
return true;
} }
void ConfigMainWindow::saveConfigAs(void) void ConfigMainWindow::saveConfigAs(void)
...@@ -1642,7 +1645,11 @@ void ConfigMainWindow::closeEvent(QCloseEvent* e) ...@@ -1642,7 +1645,11 @@ void ConfigMainWindow::closeEvent(QCloseEvent* e)
mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit")); mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit"));
switch (mb.exec()) { switch (mb.exec()) {
case QMessageBox::Yes: case QMessageBox::Yes:
saveConfig(); if (saveConfig())
e->accept();
else
e->ignore();
break;
case QMessageBox::No: case QMessageBox::No:
e->accept(); e->accept();
break; break;
...@@ -1745,10 +1752,6 @@ int main(int ac, char** av) ...@@ -1745,10 +1752,6 @@ int main(int ac, char** av)
bindtextdomain(PACKAGE, LOCALEDIR); bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE); textdomain(PACKAGE);
#ifndef LKC_DIRECT_LINK
kconfig_load();
#endif
progname = av[0]; progname = av[0];
configApp = new QApplication(ac, av); configApp = new QApplication(ac, av);
if (ac > 1 && av[1][0] == '-') { if (ac > 1 && av[1][0] == '-') {
......
...@@ -311,7 +311,7 @@ public slots: ...@@ -311,7 +311,7 @@ public slots:
void listFocusChanged(void); void listFocusChanged(void);
void goBack(void); void goBack(void);
void loadConfig(void); void loadConfig(void);
void saveConfig(void); bool saveConfig(void);
void saveConfigAs(void); void saveConfigAs(void);
void searchConfig(void); void searchConfig(void);
void showSingleView(void); void showSingleView(void);
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include <regex.h> #include <regex.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
struct symbol symbol_yes = { struct symbol symbol_yes = {
...@@ -751,7 +750,8 @@ const char *sym_get_string_value(struct symbol *sym) ...@@ -751,7 +750,8 @@ const char *sym_get_string_value(struct symbol *sym)
case no: case no:
return "n"; return "n";
case mod: case mod:
return "m"; sym_calc_value(modules_sym);
return (modules_sym->curr.tri == no) ? "n" : "m";
case yes: case yes:
return "y"; return "y";
} }
...@@ -893,6 +893,49 @@ const char *sym_expand_string_value(const char *in) ...@@ -893,6 +893,49 @@ const char *sym_expand_string_value(const char *in)
return res; return res;
} }
const char *sym_escape_string_value(const char *in)
{
const char *p;
size_t reslen;
char *res;
size_t l;
reslen = strlen(in) + strlen("\"\"") + 1;
p = in;
for (;;) {
l = strcspn(p, "\"\\");
p += l;
if (p[0] == '\0')
break;
reslen++;
p++;
}
res = malloc(reslen);
res[0] = '\0';
strcat(res, "\"");
p = in;
for (;;) {
l = strcspn(p, "\"\\");
strncat(res, p, l);
p += l;
if (p[0] == '\0')
break;
strcat(res, "\\");
strncat(res, p++, 1);
}
strcat(res, "\"");
return res;
}
struct symbol **sym_re_search(const char *pattern) struct symbol **sym_re_search(const char *pattern)
{ {
struct symbol *sym, **sym_arr = NULL; struct symbol *sym, **sym_arr = NULL;
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
* Released under the terms of the GNU GPL v2.0. * Released under the terms of the GNU GPL v2.0.
*/ */
#include <stdarg.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "lkc.h" #include "lkc.h"
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#define START_STRSIZE 16 #define START_STRSIZE 16
......
...@@ -776,7 +776,6 @@ char *zconftext; ...@@ -776,7 +776,6 @@ char *zconftext;
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#define START_STRSIZE 16 #define START_STRSIZE 16
......
...@@ -87,7 +87,6 @@ ...@@ -87,7 +87,6 @@
#include <string.h> #include <string.h>
#include <stdbool.h> #include <stdbool.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include <string.h> #include <string.h>
#include <stdbool.h> #include <stdbool.h>
#define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment