1*cf5a6c84SAndroid Build Coastguard Worker /*
2*cf5a6c84SAndroid Build Coastguard Worker * Copyright (C) 2002 Roman Zippel <[email protected]>
3*cf5a6c84SAndroid Build Coastguard Worker * Released under the terms of the GNU GPL v2.0.
4*cf5a6c84SAndroid Build Coastguard Worker */
5*cf5a6c84SAndroid Build Coastguard Worker
6*cf5a6c84SAndroid Build Coastguard Worker #include <ctype.h>
7*cf5a6c84SAndroid Build Coastguard Worker #include <stdlib.h>
8*cf5a6c84SAndroid Build Coastguard Worker #include <stdio.h>
9*cf5a6c84SAndroid Build Coastguard Worker #include <string.h>
10*cf5a6c84SAndroid Build Coastguard Worker #include <unistd.h>
11*cf5a6c84SAndroid Build Coastguard Worker #include <time.h>
12*cf5a6c84SAndroid Build Coastguard Worker #include <sys/stat.h>
13*cf5a6c84SAndroid Build Coastguard Worker
14*cf5a6c84SAndroid Build Coastguard Worker #define LKC_DIRECT_LINK
15*cf5a6c84SAndroid Build Coastguard Worker #include "lkc.h"
16*cf5a6c84SAndroid Build Coastguard Worker
17*cf5a6c84SAndroid Build Coastguard Worker static void conf(struct menu *menu);
18*cf5a6c84SAndroid Build Coastguard Worker static void check_conf(struct menu *menu);
19*cf5a6c84SAndroid Build Coastguard Worker
20*cf5a6c84SAndroid Build Coastguard Worker enum {
21*cf5a6c84SAndroid Build Coastguard Worker ask_all,
22*cf5a6c84SAndroid Build Coastguard Worker ask_new,
23*cf5a6c84SAndroid Build Coastguard Worker ask_silent,
24*cf5a6c84SAndroid Build Coastguard Worker set_default,
25*cf5a6c84SAndroid Build Coastguard Worker set_yes,
26*cf5a6c84SAndroid Build Coastguard Worker set_mod,
27*cf5a6c84SAndroid Build Coastguard Worker set_no,
28*cf5a6c84SAndroid Build Coastguard Worker set_random
29*cf5a6c84SAndroid Build Coastguard Worker } input_mode = ask_all;
30*cf5a6c84SAndroid Build Coastguard Worker char *defconfig_file;
31*cf5a6c84SAndroid Build Coastguard Worker
32*cf5a6c84SAndroid Build Coastguard Worker static int indent = 1;
33*cf5a6c84SAndroid Build Coastguard Worker static int valid_stdin = 1;
34*cf5a6c84SAndroid Build Coastguard Worker static int conf_cnt;
35*cf5a6c84SAndroid Build Coastguard Worker static char line[128];
36*cf5a6c84SAndroid Build Coastguard Worker static struct menu *rootEntry;
37*cf5a6c84SAndroid Build Coastguard Worker
38*cf5a6c84SAndroid Build Coastguard Worker static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
39*cf5a6c84SAndroid Build Coastguard Worker
strip(char * str)40*cf5a6c84SAndroid Build Coastguard Worker static void strip(char *str)
41*cf5a6c84SAndroid Build Coastguard Worker {
42*cf5a6c84SAndroid Build Coastguard Worker char *p = str;
43*cf5a6c84SAndroid Build Coastguard Worker int l;
44*cf5a6c84SAndroid Build Coastguard Worker
45*cf5a6c84SAndroid Build Coastguard Worker while ((isspace(*p)))
46*cf5a6c84SAndroid Build Coastguard Worker p++;
47*cf5a6c84SAndroid Build Coastguard Worker l = strlen(p);
48*cf5a6c84SAndroid Build Coastguard Worker if (p != str)
49*cf5a6c84SAndroid Build Coastguard Worker memmove(str, p, l + 1);
50*cf5a6c84SAndroid Build Coastguard Worker if (!l)
51*cf5a6c84SAndroid Build Coastguard Worker return;
52*cf5a6c84SAndroid Build Coastguard Worker p = str + l - 1;
53*cf5a6c84SAndroid Build Coastguard Worker while ((isspace(*p)))
54*cf5a6c84SAndroid Build Coastguard Worker *p-- = 0;
55*cf5a6c84SAndroid Build Coastguard Worker }
56*cf5a6c84SAndroid Build Coastguard Worker
check_stdin(void)57*cf5a6c84SAndroid Build Coastguard Worker static void check_stdin(void)
58*cf5a6c84SAndroid Build Coastguard Worker {
59*cf5a6c84SAndroid Build Coastguard Worker if (!valid_stdin && input_mode == ask_silent) {
60*cf5a6c84SAndroid Build Coastguard Worker printf(_("aborted!\n\n"));
61*cf5a6c84SAndroid Build Coastguard Worker printf(_("Console input/output is redirected. "));
62*cf5a6c84SAndroid Build Coastguard Worker printf(_("Run 'make oldconfig' to update configuration.\n\n"));
63*cf5a6c84SAndroid Build Coastguard Worker exit(1);
64*cf5a6c84SAndroid Build Coastguard Worker }
65*cf5a6c84SAndroid Build Coastguard Worker }
66*cf5a6c84SAndroid Build Coastguard Worker
conf_askvalue(struct symbol * sym,const char * def)67*cf5a6c84SAndroid Build Coastguard Worker static void conf_askvalue(struct symbol *sym, const char *def)
68*cf5a6c84SAndroid Build Coastguard Worker {
69*cf5a6c84SAndroid Build Coastguard Worker enum symbol_type type = sym_get_type(sym);
70*cf5a6c84SAndroid Build Coastguard Worker tristate val;
71*cf5a6c84SAndroid Build Coastguard Worker
72*cf5a6c84SAndroid Build Coastguard Worker if (!sym_has_value(sym))
73*cf5a6c84SAndroid Build Coastguard Worker printf("(NEW) ");
74*cf5a6c84SAndroid Build Coastguard Worker
75*cf5a6c84SAndroid Build Coastguard Worker line[0] = '\n';
76*cf5a6c84SAndroid Build Coastguard Worker line[1] = 0;
77*cf5a6c84SAndroid Build Coastguard Worker
78*cf5a6c84SAndroid Build Coastguard Worker if (!sym_is_changable(sym)) {
79*cf5a6c84SAndroid Build Coastguard Worker printf("%s\n", def);
80*cf5a6c84SAndroid Build Coastguard Worker line[0] = '\n';
81*cf5a6c84SAndroid Build Coastguard Worker line[1] = 0;
82*cf5a6c84SAndroid Build Coastguard Worker return;
83*cf5a6c84SAndroid Build Coastguard Worker }
84*cf5a6c84SAndroid Build Coastguard Worker
85*cf5a6c84SAndroid Build Coastguard Worker switch (input_mode) {
86*cf5a6c84SAndroid Build Coastguard Worker case set_no:
87*cf5a6c84SAndroid Build Coastguard Worker case set_mod:
88*cf5a6c84SAndroid Build Coastguard Worker case set_yes:
89*cf5a6c84SAndroid Build Coastguard Worker case set_random:
90*cf5a6c84SAndroid Build Coastguard Worker if (sym_has_value(sym)) {
91*cf5a6c84SAndroid Build Coastguard Worker printf("%s\n", def);
92*cf5a6c84SAndroid Build Coastguard Worker return;
93*cf5a6c84SAndroid Build Coastguard Worker }
94*cf5a6c84SAndroid Build Coastguard Worker break;
95*cf5a6c84SAndroid Build Coastguard Worker case ask_new:
96*cf5a6c84SAndroid Build Coastguard Worker case ask_silent:
97*cf5a6c84SAndroid Build Coastguard Worker if (sym_has_value(sym)) {
98*cf5a6c84SAndroid Build Coastguard Worker printf("%s\n", def);
99*cf5a6c84SAndroid Build Coastguard Worker return;
100*cf5a6c84SAndroid Build Coastguard Worker }
101*cf5a6c84SAndroid Build Coastguard Worker check_stdin();
102*cf5a6c84SAndroid Build Coastguard Worker case ask_all:
103*cf5a6c84SAndroid Build Coastguard Worker fflush(stdout);
104*cf5a6c84SAndroid Build Coastguard Worker fgets(line, 128, stdin);
105*cf5a6c84SAndroid Build Coastguard Worker return;
106*cf5a6c84SAndroid Build Coastguard Worker case set_default:
107*cf5a6c84SAndroid Build Coastguard Worker printf("%s\n", def);
108*cf5a6c84SAndroid Build Coastguard Worker return;
109*cf5a6c84SAndroid Build Coastguard Worker default:
110*cf5a6c84SAndroid Build Coastguard Worker break;
111*cf5a6c84SAndroid Build Coastguard Worker }
112*cf5a6c84SAndroid Build Coastguard Worker
113*cf5a6c84SAndroid Build Coastguard Worker switch (type) {
114*cf5a6c84SAndroid Build Coastguard Worker case S_INT:
115*cf5a6c84SAndroid Build Coastguard Worker case S_HEX:
116*cf5a6c84SAndroid Build Coastguard Worker case S_STRING:
117*cf5a6c84SAndroid Build Coastguard Worker printf("%s\n", def);
118*cf5a6c84SAndroid Build Coastguard Worker return;
119*cf5a6c84SAndroid Build Coastguard Worker default:
120*cf5a6c84SAndroid Build Coastguard Worker ;
121*cf5a6c84SAndroid Build Coastguard Worker }
122*cf5a6c84SAndroid Build Coastguard Worker switch (input_mode) {
123*cf5a6c84SAndroid Build Coastguard Worker case set_yes:
124*cf5a6c84SAndroid Build Coastguard Worker if (sym_tristate_within_range(sym, yes)) {
125*cf5a6c84SAndroid Build Coastguard Worker line[0] = 'y';
126*cf5a6c84SAndroid Build Coastguard Worker line[1] = '\n';
127*cf5a6c84SAndroid Build Coastguard Worker line[2] = 0;
128*cf5a6c84SAndroid Build Coastguard Worker break;
129*cf5a6c84SAndroid Build Coastguard Worker }
130*cf5a6c84SAndroid Build Coastguard Worker case set_mod:
131*cf5a6c84SAndroid Build Coastguard Worker if (type == S_TRISTATE) {
132*cf5a6c84SAndroid Build Coastguard Worker if (sym_tristate_within_range(sym, mod)) {
133*cf5a6c84SAndroid Build Coastguard Worker line[0] = 'm';
134*cf5a6c84SAndroid Build Coastguard Worker line[1] = '\n';
135*cf5a6c84SAndroid Build Coastguard Worker line[2] = 0;
136*cf5a6c84SAndroid Build Coastguard Worker break;
137*cf5a6c84SAndroid Build Coastguard Worker }
138*cf5a6c84SAndroid Build Coastguard Worker } else {
139*cf5a6c84SAndroid Build Coastguard Worker if (sym_tristate_within_range(sym, yes)) {
140*cf5a6c84SAndroid Build Coastguard Worker line[0] = 'y';
141*cf5a6c84SAndroid Build Coastguard Worker line[1] = '\n';
142*cf5a6c84SAndroid Build Coastguard Worker line[2] = 0;
143*cf5a6c84SAndroid Build Coastguard Worker break;
144*cf5a6c84SAndroid Build Coastguard Worker }
145*cf5a6c84SAndroid Build Coastguard Worker }
146*cf5a6c84SAndroid Build Coastguard Worker case set_no:
147*cf5a6c84SAndroid Build Coastguard Worker if (sym_tristate_within_range(sym, no)) {
148*cf5a6c84SAndroid Build Coastguard Worker line[0] = 'n';
149*cf5a6c84SAndroid Build Coastguard Worker line[1] = '\n';
150*cf5a6c84SAndroid Build Coastguard Worker line[2] = 0;
151*cf5a6c84SAndroid Build Coastguard Worker break;
152*cf5a6c84SAndroid Build Coastguard Worker }
153*cf5a6c84SAndroid Build Coastguard Worker case set_random:
154*cf5a6c84SAndroid Build Coastguard Worker do {
155*cf5a6c84SAndroid Build Coastguard Worker val = (tristate)(random() % 3);
156*cf5a6c84SAndroid Build Coastguard Worker } while (!sym_tristate_within_range(sym, val));
157*cf5a6c84SAndroid Build Coastguard Worker switch (val) {
158*cf5a6c84SAndroid Build Coastguard Worker case no: line[0] = 'n'; break;
159*cf5a6c84SAndroid Build Coastguard Worker case mod: line[0] = 'm'; break;
160*cf5a6c84SAndroid Build Coastguard Worker case yes: line[0] = 'y'; break;
161*cf5a6c84SAndroid Build Coastguard Worker }
162*cf5a6c84SAndroid Build Coastguard Worker line[1] = '\n';
163*cf5a6c84SAndroid Build Coastguard Worker line[2] = 0;
164*cf5a6c84SAndroid Build Coastguard Worker break;
165*cf5a6c84SAndroid Build Coastguard Worker default:
166*cf5a6c84SAndroid Build Coastguard Worker break;
167*cf5a6c84SAndroid Build Coastguard Worker }
168*cf5a6c84SAndroid Build Coastguard Worker printf("%s", line);
169*cf5a6c84SAndroid Build Coastguard Worker }
170*cf5a6c84SAndroid Build Coastguard Worker
conf_string(struct menu * menu)171*cf5a6c84SAndroid Build Coastguard Worker int conf_string(struct menu *menu)
172*cf5a6c84SAndroid Build Coastguard Worker {
173*cf5a6c84SAndroid Build Coastguard Worker struct symbol *sym = menu->sym;
174*cf5a6c84SAndroid Build Coastguard Worker const char *def, *help;
175*cf5a6c84SAndroid Build Coastguard Worker
176*cf5a6c84SAndroid Build Coastguard Worker while (1) {
177*cf5a6c84SAndroid Build Coastguard Worker printf("%*s%s ", indent - 1, "", menu->prompt->text);
178*cf5a6c84SAndroid Build Coastguard Worker printf("(%s) ", sym->name);
179*cf5a6c84SAndroid Build Coastguard Worker def = sym_get_string_value(sym);
180*cf5a6c84SAndroid Build Coastguard Worker if (sym_get_string_value(sym))
181*cf5a6c84SAndroid Build Coastguard Worker printf("[%s] ", def);
182*cf5a6c84SAndroid Build Coastguard Worker conf_askvalue(sym, def);
183*cf5a6c84SAndroid Build Coastguard Worker switch (line[0]) {
184*cf5a6c84SAndroid Build Coastguard Worker case '\n':
185*cf5a6c84SAndroid Build Coastguard Worker break;
186*cf5a6c84SAndroid Build Coastguard Worker case '?':
187*cf5a6c84SAndroid Build Coastguard Worker /* print help */
188*cf5a6c84SAndroid Build Coastguard Worker if (line[1] == '\n') {
189*cf5a6c84SAndroid Build Coastguard Worker help = nohelp_text;
190*cf5a6c84SAndroid Build Coastguard Worker if (menu->sym->help)
191*cf5a6c84SAndroid Build Coastguard Worker help = menu->sym->help;
192*cf5a6c84SAndroid Build Coastguard Worker printf("\n%s\n", menu->sym->help);
193*cf5a6c84SAndroid Build Coastguard Worker def = NULL;
194*cf5a6c84SAndroid Build Coastguard Worker break;
195*cf5a6c84SAndroid Build Coastguard Worker }
196*cf5a6c84SAndroid Build Coastguard Worker default:
197*cf5a6c84SAndroid Build Coastguard Worker line[strlen(line)-1] = 0;
198*cf5a6c84SAndroid Build Coastguard Worker def = line;
199*cf5a6c84SAndroid Build Coastguard Worker }
200*cf5a6c84SAndroid Build Coastguard Worker if (def && sym_set_string_value(sym, def))
201*cf5a6c84SAndroid Build Coastguard Worker return 0;
202*cf5a6c84SAndroid Build Coastguard Worker }
203*cf5a6c84SAndroid Build Coastguard Worker }
204*cf5a6c84SAndroid Build Coastguard Worker
conf_sym(struct menu * menu)205*cf5a6c84SAndroid Build Coastguard Worker static int conf_sym(struct menu *menu)
206*cf5a6c84SAndroid Build Coastguard Worker {
207*cf5a6c84SAndroid Build Coastguard Worker struct symbol *sym = menu->sym;
208*cf5a6c84SAndroid Build Coastguard Worker int type;
209*cf5a6c84SAndroid Build Coastguard Worker tristate oldval, newval;
210*cf5a6c84SAndroid Build Coastguard Worker const char *help;
211*cf5a6c84SAndroid Build Coastguard Worker
212*cf5a6c84SAndroid Build Coastguard Worker while (1) {
213*cf5a6c84SAndroid Build Coastguard Worker printf("%*s%s ", indent - 1, "", menu->prompt->text);
214*cf5a6c84SAndroid Build Coastguard Worker if (sym->name)
215*cf5a6c84SAndroid Build Coastguard Worker printf("(%s) ", sym->name);
216*cf5a6c84SAndroid Build Coastguard Worker type = sym_get_type(sym);
217*cf5a6c84SAndroid Build Coastguard Worker putchar('[');
218*cf5a6c84SAndroid Build Coastguard Worker oldval = sym_get_tristate_value(sym);
219*cf5a6c84SAndroid Build Coastguard Worker switch (oldval) {
220*cf5a6c84SAndroid Build Coastguard Worker case no:
221*cf5a6c84SAndroid Build Coastguard Worker putchar('N');
222*cf5a6c84SAndroid Build Coastguard Worker break;
223*cf5a6c84SAndroid Build Coastguard Worker case mod:
224*cf5a6c84SAndroid Build Coastguard Worker putchar('M');
225*cf5a6c84SAndroid Build Coastguard Worker break;
226*cf5a6c84SAndroid Build Coastguard Worker case yes:
227*cf5a6c84SAndroid Build Coastguard Worker putchar('Y');
228*cf5a6c84SAndroid Build Coastguard Worker break;
229*cf5a6c84SAndroid Build Coastguard Worker }
230*cf5a6c84SAndroid Build Coastguard Worker if (oldval != no && sym_tristate_within_range(sym, no))
231*cf5a6c84SAndroid Build Coastguard Worker printf("/n");
232*cf5a6c84SAndroid Build Coastguard Worker if (oldval != mod && sym_tristate_within_range(sym, mod))
233*cf5a6c84SAndroid Build Coastguard Worker printf("/m");
234*cf5a6c84SAndroid Build Coastguard Worker if (oldval != yes && sym_tristate_within_range(sym, yes))
235*cf5a6c84SAndroid Build Coastguard Worker printf("/y");
236*cf5a6c84SAndroid Build Coastguard Worker if (sym->help)
237*cf5a6c84SAndroid Build Coastguard Worker printf("/?");
238*cf5a6c84SAndroid Build Coastguard Worker printf("] ");
239*cf5a6c84SAndroid Build Coastguard Worker conf_askvalue(sym, sym_get_string_value(sym));
240*cf5a6c84SAndroid Build Coastguard Worker strip(line);
241*cf5a6c84SAndroid Build Coastguard Worker
242*cf5a6c84SAndroid Build Coastguard Worker switch (line[0]) {
243*cf5a6c84SAndroid Build Coastguard Worker case 'n':
244*cf5a6c84SAndroid Build Coastguard Worker case 'N':
245*cf5a6c84SAndroid Build Coastguard Worker newval = no;
246*cf5a6c84SAndroid Build Coastguard Worker if (!line[1] || !strcmp(&line[1], "o"))
247*cf5a6c84SAndroid Build Coastguard Worker break;
248*cf5a6c84SAndroid Build Coastguard Worker continue;
249*cf5a6c84SAndroid Build Coastguard Worker case 'm':
250*cf5a6c84SAndroid Build Coastguard Worker case 'M':
251*cf5a6c84SAndroid Build Coastguard Worker newval = mod;
252*cf5a6c84SAndroid Build Coastguard Worker if (!line[1])
253*cf5a6c84SAndroid Build Coastguard Worker break;
254*cf5a6c84SAndroid Build Coastguard Worker continue;
255*cf5a6c84SAndroid Build Coastguard Worker case 'y':
256*cf5a6c84SAndroid Build Coastguard Worker case 'Y':
257*cf5a6c84SAndroid Build Coastguard Worker newval = yes;
258*cf5a6c84SAndroid Build Coastguard Worker if (!line[1] || !strcmp(&line[1], "es"))
259*cf5a6c84SAndroid Build Coastguard Worker break;
260*cf5a6c84SAndroid Build Coastguard Worker continue;
261*cf5a6c84SAndroid Build Coastguard Worker case 0:
262*cf5a6c84SAndroid Build Coastguard Worker newval = oldval;
263*cf5a6c84SAndroid Build Coastguard Worker break;
264*cf5a6c84SAndroid Build Coastguard Worker case '?':
265*cf5a6c84SAndroid Build Coastguard Worker goto help;
266*cf5a6c84SAndroid Build Coastguard Worker default:
267*cf5a6c84SAndroid Build Coastguard Worker continue;
268*cf5a6c84SAndroid Build Coastguard Worker }
269*cf5a6c84SAndroid Build Coastguard Worker if (sym_set_tristate_value(sym, newval))
270*cf5a6c84SAndroid Build Coastguard Worker return 0;
271*cf5a6c84SAndroid Build Coastguard Worker help:
272*cf5a6c84SAndroid Build Coastguard Worker help = nohelp_text;
273*cf5a6c84SAndroid Build Coastguard Worker if (sym->help)
274*cf5a6c84SAndroid Build Coastguard Worker help = sym->help;
275*cf5a6c84SAndroid Build Coastguard Worker printf("\n%s\n", help);
276*cf5a6c84SAndroid Build Coastguard Worker }
277*cf5a6c84SAndroid Build Coastguard Worker }
278*cf5a6c84SAndroid Build Coastguard Worker
conf_choice(struct menu * menu)279*cf5a6c84SAndroid Build Coastguard Worker static int conf_choice(struct menu *menu)
280*cf5a6c84SAndroid Build Coastguard Worker {
281*cf5a6c84SAndroid Build Coastguard Worker struct symbol *sym, *def_sym;
282*cf5a6c84SAndroid Build Coastguard Worker struct menu *child;
283*cf5a6c84SAndroid Build Coastguard Worker int type;
284*cf5a6c84SAndroid Build Coastguard Worker bool is_new;
285*cf5a6c84SAndroid Build Coastguard Worker
286*cf5a6c84SAndroid Build Coastguard Worker sym = menu->sym;
287*cf5a6c84SAndroid Build Coastguard Worker type = sym_get_type(sym);
288*cf5a6c84SAndroid Build Coastguard Worker is_new = !sym_has_value(sym);
289*cf5a6c84SAndroid Build Coastguard Worker if (sym_is_changable(sym)) {
290*cf5a6c84SAndroid Build Coastguard Worker conf_sym(menu);
291*cf5a6c84SAndroid Build Coastguard Worker sym_calc_value(sym);
292*cf5a6c84SAndroid Build Coastguard Worker switch (sym_get_tristate_value(sym)) {
293*cf5a6c84SAndroid Build Coastguard Worker case no:
294*cf5a6c84SAndroid Build Coastguard Worker return 1;
295*cf5a6c84SAndroid Build Coastguard Worker case mod:
296*cf5a6c84SAndroid Build Coastguard Worker return 0;
297*cf5a6c84SAndroid Build Coastguard Worker case yes:
298*cf5a6c84SAndroid Build Coastguard Worker break;
299*cf5a6c84SAndroid Build Coastguard Worker }
300*cf5a6c84SAndroid Build Coastguard Worker } else {
301*cf5a6c84SAndroid Build Coastguard Worker switch (sym_get_tristate_value(sym)) {
302*cf5a6c84SAndroid Build Coastguard Worker case no:
303*cf5a6c84SAndroid Build Coastguard Worker return 1;
304*cf5a6c84SAndroid Build Coastguard Worker case mod:
305*cf5a6c84SAndroid Build Coastguard Worker printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
306*cf5a6c84SAndroid Build Coastguard Worker return 0;
307*cf5a6c84SAndroid Build Coastguard Worker case yes:
308*cf5a6c84SAndroid Build Coastguard Worker break;
309*cf5a6c84SAndroid Build Coastguard Worker }
310*cf5a6c84SAndroid Build Coastguard Worker }
311*cf5a6c84SAndroid Build Coastguard Worker
312*cf5a6c84SAndroid Build Coastguard Worker while (1) {
313*cf5a6c84SAndroid Build Coastguard Worker int cnt, def;
314*cf5a6c84SAndroid Build Coastguard Worker
315*cf5a6c84SAndroid Build Coastguard Worker printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
316*cf5a6c84SAndroid Build Coastguard Worker def_sym = sym_get_choice_value(sym);
317*cf5a6c84SAndroid Build Coastguard Worker cnt = def = 0;
318*cf5a6c84SAndroid Build Coastguard Worker line[0] = 0;
319*cf5a6c84SAndroid Build Coastguard Worker for (child = menu->list; child; child = child->next) {
320*cf5a6c84SAndroid Build Coastguard Worker if (!menu_is_visible(child))
321*cf5a6c84SAndroid Build Coastguard Worker continue;
322*cf5a6c84SAndroid Build Coastguard Worker if (!child->sym) {
323*cf5a6c84SAndroid Build Coastguard Worker printf("%*c %s\n", indent, '*', menu_get_prompt(child));
324*cf5a6c84SAndroid Build Coastguard Worker continue;
325*cf5a6c84SAndroid Build Coastguard Worker }
326*cf5a6c84SAndroid Build Coastguard Worker cnt++;
327*cf5a6c84SAndroid Build Coastguard Worker if (child->sym == def_sym) {
328*cf5a6c84SAndroid Build Coastguard Worker def = cnt;
329*cf5a6c84SAndroid Build Coastguard Worker printf("%*c", indent, '>');
330*cf5a6c84SAndroid Build Coastguard Worker } else
331*cf5a6c84SAndroid Build Coastguard Worker printf("%*c", indent, ' ');
332*cf5a6c84SAndroid Build Coastguard Worker printf(" %d. %s", cnt, menu_get_prompt(child));
333*cf5a6c84SAndroid Build Coastguard Worker if (child->sym->name)
334*cf5a6c84SAndroid Build Coastguard Worker printf(" (%s)", child->sym->name);
335*cf5a6c84SAndroid Build Coastguard Worker if (!sym_has_value(child->sym))
336*cf5a6c84SAndroid Build Coastguard Worker printf(" (NEW)");
337*cf5a6c84SAndroid Build Coastguard Worker printf("\n");
338*cf5a6c84SAndroid Build Coastguard Worker }
339*cf5a6c84SAndroid Build Coastguard Worker printf("%*schoice", indent - 1, "");
340*cf5a6c84SAndroid Build Coastguard Worker if (cnt == 1) {
341*cf5a6c84SAndroid Build Coastguard Worker printf("[1]: 1\n");
342*cf5a6c84SAndroid Build Coastguard Worker goto conf_childs;
343*cf5a6c84SAndroid Build Coastguard Worker }
344*cf5a6c84SAndroid Build Coastguard Worker printf("[1-%d", cnt);
345*cf5a6c84SAndroid Build Coastguard Worker if (sym->help)
346*cf5a6c84SAndroid Build Coastguard Worker printf("?");
347*cf5a6c84SAndroid Build Coastguard Worker printf("]: ");
348*cf5a6c84SAndroid Build Coastguard Worker switch (input_mode) {
349*cf5a6c84SAndroid Build Coastguard Worker case ask_new:
350*cf5a6c84SAndroid Build Coastguard Worker case ask_silent:
351*cf5a6c84SAndroid Build Coastguard Worker if (!is_new) {
352*cf5a6c84SAndroid Build Coastguard Worker cnt = def;
353*cf5a6c84SAndroid Build Coastguard Worker printf("%d\n", cnt);
354*cf5a6c84SAndroid Build Coastguard Worker break;
355*cf5a6c84SAndroid Build Coastguard Worker }
356*cf5a6c84SAndroid Build Coastguard Worker check_stdin();
357*cf5a6c84SAndroid Build Coastguard Worker case ask_all:
358*cf5a6c84SAndroid Build Coastguard Worker fflush(stdout);
359*cf5a6c84SAndroid Build Coastguard Worker fgets(line, 128, stdin);
360*cf5a6c84SAndroid Build Coastguard Worker strip(line);
361*cf5a6c84SAndroid Build Coastguard Worker if (line[0] == '?') {
362*cf5a6c84SAndroid Build Coastguard Worker printf("\n%s\n", menu->sym->help ?
363*cf5a6c84SAndroid Build Coastguard Worker menu->sym->help : nohelp_text);
364*cf5a6c84SAndroid Build Coastguard Worker continue;
365*cf5a6c84SAndroid Build Coastguard Worker }
366*cf5a6c84SAndroid Build Coastguard Worker if (!line[0])
367*cf5a6c84SAndroid Build Coastguard Worker cnt = def;
368*cf5a6c84SAndroid Build Coastguard Worker else if (isdigit(line[0]))
369*cf5a6c84SAndroid Build Coastguard Worker cnt = atoi(line);
370*cf5a6c84SAndroid Build Coastguard Worker else
371*cf5a6c84SAndroid Build Coastguard Worker continue;
372*cf5a6c84SAndroid Build Coastguard Worker break;
373*cf5a6c84SAndroid Build Coastguard Worker case set_random:
374*cf5a6c84SAndroid Build Coastguard Worker def = (random() % cnt) + 1;
375*cf5a6c84SAndroid Build Coastguard Worker case set_default:
376*cf5a6c84SAndroid Build Coastguard Worker case set_yes:
377*cf5a6c84SAndroid Build Coastguard Worker case set_mod:
378*cf5a6c84SAndroid Build Coastguard Worker case set_no:
379*cf5a6c84SAndroid Build Coastguard Worker cnt = def;
380*cf5a6c84SAndroid Build Coastguard Worker printf("%d\n", cnt);
381*cf5a6c84SAndroid Build Coastguard Worker break;
382*cf5a6c84SAndroid Build Coastguard Worker }
383*cf5a6c84SAndroid Build Coastguard Worker
384*cf5a6c84SAndroid Build Coastguard Worker conf_childs:
385*cf5a6c84SAndroid Build Coastguard Worker for (child = menu->list; child; child = child->next) {
386*cf5a6c84SAndroid Build Coastguard Worker if (!child->sym || !menu_is_visible(child))
387*cf5a6c84SAndroid Build Coastguard Worker continue;
388*cf5a6c84SAndroid Build Coastguard Worker if (!--cnt)
389*cf5a6c84SAndroid Build Coastguard Worker break;
390*cf5a6c84SAndroid Build Coastguard Worker }
391*cf5a6c84SAndroid Build Coastguard Worker if (!child)
392*cf5a6c84SAndroid Build Coastguard Worker continue;
393*cf5a6c84SAndroid Build Coastguard Worker if (line[strlen(line) - 1] == '?') {
394*cf5a6c84SAndroid Build Coastguard Worker printf("\n%s\n", child->sym->help ?
395*cf5a6c84SAndroid Build Coastguard Worker child->sym->help : nohelp_text);
396*cf5a6c84SAndroid Build Coastguard Worker continue;
397*cf5a6c84SAndroid Build Coastguard Worker }
398*cf5a6c84SAndroid Build Coastguard Worker sym_set_choice_value(sym, child->sym);
399*cf5a6c84SAndroid Build Coastguard Worker if (child->list) {
400*cf5a6c84SAndroid Build Coastguard Worker indent += 2;
401*cf5a6c84SAndroid Build Coastguard Worker conf(child->list);
402*cf5a6c84SAndroid Build Coastguard Worker indent -= 2;
403*cf5a6c84SAndroid Build Coastguard Worker }
404*cf5a6c84SAndroid Build Coastguard Worker return 1;
405*cf5a6c84SAndroid Build Coastguard Worker }
406*cf5a6c84SAndroid Build Coastguard Worker }
407*cf5a6c84SAndroid Build Coastguard Worker
conf(struct menu * menu)408*cf5a6c84SAndroid Build Coastguard Worker static void conf(struct menu *menu)
409*cf5a6c84SAndroid Build Coastguard Worker {
410*cf5a6c84SAndroid Build Coastguard Worker struct symbol *sym;
411*cf5a6c84SAndroid Build Coastguard Worker struct property *prop;
412*cf5a6c84SAndroid Build Coastguard Worker struct menu *child;
413*cf5a6c84SAndroid Build Coastguard Worker
414*cf5a6c84SAndroid Build Coastguard Worker if (!menu_is_visible(menu))
415*cf5a6c84SAndroid Build Coastguard Worker return;
416*cf5a6c84SAndroid Build Coastguard Worker
417*cf5a6c84SAndroid Build Coastguard Worker sym = menu->sym;
418*cf5a6c84SAndroid Build Coastguard Worker prop = menu->prompt;
419*cf5a6c84SAndroid Build Coastguard Worker if (prop) {
420*cf5a6c84SAndroid Build Coastguard Worker const char *prompt;
421*cf5a6c84SAndroid Build Coastguard Worker
422*cf5a6c84SAndroid Build Coastguard Worker switch (prop->type) {
423*cf5a6c84SAndroid Build Coastguard Worker case P_MENU:
424*cf5a6c84SAndroid Build Coastguard Worker if (input_mode == ask_silent && rootEntry != menu) {
425*cf5a6c84SAndroid Build Coastguard Worker check_conf(menu);
426*cf5a6c84SAndroid Build Coastguard Worker return;
427*cf5a6c84SAndroid Build Coastguard Worker }
428*cf5a6c84SAndroid Build Coastguard Worker case P_COMMENT:
429*cf5a6c84SAndroid Build Coastguard Worker prompt = menu_get_prompt(menu);
430*cf5a6c84SAndroid Build Coastguard Worker if (prompt)
431*cf5a6c84SAndroid Build Coastguard Worker printf("%*c\n%*c %s\n%*c\n",
432*cf5a6c84SAndroid Build Coastguard Worker indent, '*',
433*cf5a6c84SAndroid Build Coastguard Worker indent, '*', prompt,
434*cf5a6c84SAndroid Build Coastguard Worker indent, '*');
435*cf5a6c84SAndroid Build Coastguard Worker default:
436*cf5a6c84SAndroid Build Coastguard Worker ;
437*cf5a6c84SAndroid Build Coastguard Worker }
438*cf5a6c84SAndroid Build Coastguard Worker }
439*cf5a6c84SAndroid Build Coastguard Worker
440*cf5a6c84SAndroid Build Coastguard Worker if (!sym)
441*cf5a6c84SAndroid Build Coastguard Worker goto conf_childs;
442*cf5a6c84SAndroid Build Coastguard Worker
443*cf5a6c84SAndroid Build Coastguard Worker if (sym_is_choice(sym)) {
444*cf5a6c84SAndroid Build Coastguard Worker conf_choice(menu);
445*cf5a6c84SAndroid Build Coastguard Worker if (sym->curr.tri != mod)
446*cf5a6c84SAndroid Build Coastguard Worker return;
447*cf5a6c84SAndroid Build Coastguard Worker goto conf_childs;
448*cf5a6c84SAndroid Build Coastguard Worker }
449*cf5a6c84SAndroid Build Coastguard Worker
450*cf5a6c84SAndroid Build Coastguard Worker switch (sym->type) {
451*cf5a6c84SAndroid Build Coastguard Worker case S_INT:
452*cf5a6c84SAndroid Build Coastguard Worker case S_HEX:
453*cf5a6c84SAndroid Build Coastguard Worker case S_STRING:
454*cf5a6c84SAndroid Build Coastguard Worker conf_string(menu);
455*cf5a6c84SAndroid Build Coastguard Worker break;
456*cf5a6c84SAndroid Build Coastguard Worker default:
457*cf5a6c84SAndroid Build Coastguard Worker conf_sym(menu);
458*cf5a6c84SAndroid Build Coastguard Worker break;
459*cf5a6c84SAndroid Build Coastguard Worker }
460*cf5a6c84SAndroid Build Coastguard Worker
461*cf5a6c84SAndroid Build Coastguard Worker conf_childs:
462*cf5a6c84SAndroid Build Coastguard Worker if (sym)
463*cf5a6c84SAndroid Build Coastguard Worker indent += 2;
464*cf5a6c84SAndroid Build Coastguard Worker for (child = menu->list; child; child = child->next)
465*cf5a6c84SAndroid Build Coastguard Worker conf(child);
466*cf5a6c84SAndroid Build Coastguard Worker if (sym)
467*cf5a6c84SAndroid Build Coastguard Worker indent -= 2;
468*cf5a6c84SAndroid Build Coastguard Worker }
469*cf5a6c84SAndroid Build Coastguard Worker
check_conf(struct menu * menu)470*cf5a6c84SAndroid Build Coastguard Worker static void check_conf(struct menu *menu)
471*cf5a6c84SAndroid Build Coastguard Worker {
472*cf5a6c84SAndroid Build Coastguard Worker struct symbol *sym;
473*cf5a6c84SAndroid Build Coastguard Worker struct menu *child;
474*cf5a6c84SAndroid Build Coastguard Worker
475*cf5a6c84SAndroid Build Coastguard Worker if (!menu_is_visible(menu))
476*cf5a6c84SAndroid Build Coastguard Worker return;
477*cf5a6c84SAndroid Build Coastguard Worker
478*cf5a6c84SAndroid Build Coastguard Worker sym = menu->sym;
479*cf5a6c84SAndroid Build Coastguard Worker if (sym && !sym_has_value(sym)) {
480*cf5a6c84SAndroid Build Coastguard Worker if (sym_is_changable(sym) ||
481*cf5a6c84SAndroid Build Coastguard Worker (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
482*cf5a6c84SAndroid Build Coastguard Worker if (!conf_cnt++)
483*cf5a6c84SAndroid Build Coastguard Worker printf(_("*\n* Restart config...\n*\n"));
484*cf5a6c84SAndroid Build Coastguard Worker rootEntry = menu_get_parent_menu(menu);
485*cf5a6c84SAndroid Build Coastguard Worker conf(rootEntry);
486*cf5a6c84SAndroid Build Coastguard Worker }
487*cf5a6c84SAndroid Build Coastguard Worker }
488*cf5a6c84SAndroid Build Coastguard Worker
489*cf5a6c84SAndroid Build Coastguard Worker for (child = menu->list; child; child = child->next)
490*cf5a6c84SAndroid Build Coastguard Worker check_conf(child);
491*cf5a6c84SAndroid Build Coastguard Worker }
492*cf5a6c84SAndroid Build Coastguard Worker
main(int ac,char ** av)493*cf5a6c84SAndroid Build Coastguard Worker int main(int ac, char **av)
494*cf5a6c84SAndroid Build Coastguard Worker {
495*cf5a6c84SAndroid Build Coastguard Worker int i = 1;
496*cf5a6c84SAndroid Build Coastguard Worker const char *name;
497*cf5a6c84SAndroid Build Coastguard Worker struct stat tmpstat;
498*cf5a6c84SAndroid Build Coastguard Worker
499*cf5a6c84SAndroid Build Coastguard Worker if (ac > i && av[i][0] == '-') {
500*cf5a6c84SAndroid Build Coastguard Worker switch (av[i++][1]) {
501*cf5a6c84SAndroid Build Coastguard Worker case 'o':
502*cf5a6c84SAndroid Build Coastguard Worker input_mode = ask_new;
503*cf5a6c84SAndroid Build Coastguard Worker break;
504*cf5a6c84SAndroid Build Coastguard Worker case 's':
505*cf5a6c84SAndroid Build Coastguard Worker input_mode = ask_silent;
506*cf5a6c84SAndroid Build Coastguard Worker valid_stdin = isatty(0) && isatty(1) && isatty(2);
507*cf5a6c84SAndroid Build Coastguard Worker break;
508*cf5a6c84SAndroid Build Coastguard Worker case 'd':
509*cf5a6c84SAndroid Build Coastguard Worker input_mode = set_default;
510*cf5a6c84SAndroid Build Coastguard Worker break;
511*cf5a6c84SAndroid Build Coastguard Worker case 'D':
512*cf5a6c84SAndroid Build Coastguard Worker input_mode = set_default;
513*cf5a6c84SAndroid Build Coastguard Worker defconfig_file = av[i++];
514*cf5a6c84SAndroid Build Coastguard Worker if (!defconfig_file) {
515*cf5a6c84SAndroid Build Coastguard Worker printf(_("%s: No default config file specified\n"),
516*cf5a6c84SAndroid Build Coastguard Worker av[0]);
517*cf5a6c84SAndroid Build Coastguard Worker exit(1);
518*cf5a6c84SAndroid Build Coastguard Worker }
519*cf5a6c84SAndroid Build Coastguard Worker break;
520*cf5a6c84SAndroid Build Coastguard Worker case 'n':
521*cf5a6c84SAndroid Build Coastguard Worker input_mode = set_no;
522*cf5a6c84SAndroid Build Coastguard Worker break;
523*cf5a6c84SAndroid Build Coastguard Worker case 'm':
524*cf5a6c84SAndroid Build Coastguard Worker input_mode = set_mod;
525*cf5a6c84SAndroid Build Coastguard Worker break;
526*cf5a6c84SAndroid Build Coastguard Worker case 'y':
527*cf5a6c84SAndroid Build Coastguard Worker input_mode = set_yes;
528*cf5a6c84SAndroid Build Coastguard Worker break;
529*cf5a6c84SAndroid Build Coastguard Worker case 'r':
530*cf5a6c84SAndroid Build Coastguard Worker input_mode = set_random;
531*cf5a6c84SAndroid Build Coastguard Worker srandom(time(NULL));
532*cf5a6c84SAndroid Build Coastguard Worker break;
533*cf5a6c84SAndroid Build Coastguard Worker case 'h':
534*cf5a6c84SAndroid Build Coastguard Worker case '?':
535*cf5a6c84SAndroid Build Coastguard Worker fprintf(stderr, "See README for usage info\n");
536*cf5a6c84SAndroid Build Coastguard Worker exit(0);
537*cf5a6c84SAndroid Build Coastguard Worker }
538*cf5a6c84SAndroid Build Coastguard Worker }
539*cf5a6c84SAndroid Build Coastguard Worker name = av[i];
540*cf5a6c84SAndroid Build Coastguard Worker if (!name) {
541*cf5a6c84SAndroid Build Coastguard Worker printf(_("%s: Kconfig file missing\n"), av[0]);
542*cf5a6c84SAndroid Build Coastguard Worker exit(1);
543*cf5a6c84SAndroid Build Coastguard Worker }
544*cf5a6c84SAndroid Build Coastguard Worker conf_parse(name);
545*cf5a6c84SAndroid Build Coastguard Worker //zconfdump(stdout);
546*cf5a6c84SAndroid Build Coastguard Worker switch (input_mode) {
547*cf5a6c84SAndroid Build Coastguard Worker case set_default:
548*cf5a6c84SAndroid Build Coastguard Worker if (!defconfig_file)
549*cf5a6c84SAndroid Build Coastguard Worker defconfig_file = conf_get_default_confname();
550*cf5a6c84SAndroid Build Coastguard Worker if (conf_read(defconfig_file)) {
551*cf5a6c84SAndroid Build Coastguard Worker printf("***\n"
552*cf5a6c84SAndroid Build Coastguard Worker "*** Can't find default configuration \"%s\"!\n"
553*cf5a6c84SAndroid Build Coastguard Worker "***\n", defconfig_file);
554*cf5a6c84SAndroid Build Coastguard Worker exit(1);
555*cf5a6c84SAndroid Build Coastguard Worker }
556*cf5a6c84SAndroid Build Coastguard Worker break;
557*cf5a6c84SAndroid Build Coastguard Worker case ask_silent:
558*cf5a6c84SAndroid Build Coastguard Worker if (stat(".config", &tmpstat)) {
559*cf5a6c84SAndroid Build Coastguard Worker printf(_("***\n"
560*cf5a6c84SAndroid Build Coastguard Worker "*** You have not yet configured your "PROJECT_NAME"!\n"
561*cf5a6c84SAndroid Build Coastguard Worker "***\n"
562*cf5a6c84SAndroid Build Coastguard Worker "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
563*cf5a6c84SAndroid Build Coastguard Worker "*** \"make menuconfig\" or \"make xconfig\").\n"
564*cf5a6c84SAndroid Build Coastguard Worker "***\n"));
565*cf5a6c84SAndroid Build Coastguard Worker exit(1);
566*cf5a6c84SAndroid Build Coastguard Worker }
567*cf5a6c84SAndroid Build Coastguard Worker case ask_all:
568*cf5a6c84SAndroid Build Coastguard Worker case ask_new:
569*cf5a6c84SAndroid Build Coastguard Worker conf_read(NULL);
570*cf5a6c84SAndroid Build Coastguard Worker break;
571*cf5a6c84SAndroid Build Coastguard Worker case set_no:
572*cf5a6c84SAndroid Build Coastguard Worker case set_mod:
573*cf5a6c84SAndroid Build Coastguard Worker case set_yes:
574*cf5a6c84SAndroid Build Coastguard Worker case set_random:
575*cf5a6c84SAndroid Build Coastguard Worker name = getenv("KCONFIG_ALLCONFIG");
576*cf5a6c84SAndroid Build Coastguard Worker if (name && !stat(name, &tmpstat)) {
577*cf5a6c84SAndroid Build Coastguard Worker conf_read_simple(name, S_DEF_USER);
578*cf5a6c84SAndroid Build Coastguard Worker break;
579*cf5a6c84SAndroid Build Coastguard Worker }
580*cf5a6c84SAndroid Build Coastguard Worker switch (input_mode) {
581*cf5a6c84SAndroid Build Coastguard Worker case set_no: name = "allno.config"; break;
582*cf5a6c84SAndroid Build Coastguard Worker case set_mod: name = "allmod.config"; break;
583*cf5a6c84SAndroid Build Coastguard Worker case set_yes: name = "allyes.config"; break;
584*cf5a6c84SAndroid Build Coastguard Worker case set_random: name = "allrandom.config"; break;
585*cf5a6c84SAndroid Build Coastguard Worker default: break;
586*cf5a6c84SAndroid Build Coastguard Worker }
587*cf5a6c84SAndroid Build Coastguard Worker if (!stat(name, &tmpstat))
588*cf5a6c84SAndroid Build Coastguard Worker conf_read_simple(name, S_DEF_USER);
589*cf5a6c84SAndroid Build Coastguard Worker else if (!stat("all.config", &tmpstat))
590*cf5a6c84SAndroid Build Coastguard Worker conf_read_simple("all.config", S_DEF_USER);
591*cf5a6c84SAndroid Build Coastguard Worker break;
592*cf5a6c84SAndroid Build Coastguard Worker default:
593*cf5a6c84SAndroid Build Coastguard Worker break;
594*cf5a6c84SAndroid Build Coastguard Worker }
595*cf5a6c84SAndroid Build Coastguard Worker
596*cf5a6c84SAndroid Build Coastguard Worker if (input_mode != ask_silent) {
597*cf5a6c84SAndroid Build Coastguard Worker rootEntry = &rootmenu;
598*cf5a6c84SAndroid Build Coastguard Worker conf(&rootmenu);
599*cf5a6c84SAndroid Build Coastguard Worker if (input_mode == ask_all) {
600*cf5a6c84SAndroid Build Coastguard Worker input_mode = ask_silent;
601*cf5a6c84SAndroid Build Coastguard Worker valid_stdin = 1;
602*cf5a6c84SAndroid Build Coastguard Worker }
603*cf5a6c84SAndroid Build Coastguard Worker } else if (sym_change_count) {
604*cf5a6c84SAndroid Build Coastguard Worker name = getenv("KCONFIG_NOSILENTUPDATE");
605*cf5a6c84SAndroid Build Coastguard Worker if (name && *name) {
606*cf5a6c84SAndroid Build Coastguard Worker fprintf(stderr, _("\n*** "PROJECT_NAME" configuration requires explicit update.\n\n"));
607*cf5a6c84SAndroid Build Coastguard Worker return 1;
608*cf5a6c84SAndroid Build Coastguard Worker }
609*cf5a6c84SAndroid Build Coastguard Worker } else
610*cf5a6c84SAndroid Build Coastguard Worker goto skip_check;
611*cf5a6c84SAndroid Build Coastguard Worker
612*cf5a6c84SAndroid Build Coastguard Worker do {
613*cf5a6c84SAndroid Build Coastguard Worker conf_cnt = 0;
614*cf5a6c84SAndroid Build Coastguard Worker check_conf(&rootmenu);
615*cf5a6c84SAndroid Build Coastguard Worker } while (conf_cnt);
616*cf5a6c84SAndroid Build Coastguard Worker
617*cf5a6c84SAndroid Build Coastguard Worker if (!conf_write(NULL)) {
618*cf5a6c84SAndroid Build Coastguard Worker skip_check:
619*cf5a6c84SAndroid Build Coastguard Worker if (!(input_mode == ask_silent && conf_write_autoconf()))
620*cf5a6c84SAndroid Build Coastguard Worker return 0;
621*cf5a6c84SAndroid Build Coastguard Worker }
622*cf5a6c84SAndroid Build Coastguard Worker fprintf(stderr, _("\n*** Error writing "PROJECT_NAME" configuration.\n\n"));
623*cf5a6c84SAndroid Build Coastguard Worker return 1;
624*cf5a6c84SAndroid Build Coastguard Worker }
625