History

kdb: Refactor env variables get/set code

Add two new kdb environment access methods as kdb_setenv() and kdb_printenv() in order to abstract out environment access code from kdb command functions. Also, replace (char *)0 with NULL as an initializer for environment variables array.

Sumit Garg committed 5 years ago

Commit 83fa2d11 parent 2bbd9b01 file · +68 −74Browse files

Showing the changes to kernel/debug (1 of 1 file). Show all

Unified · Split

kernel/debug/kdb/kdb_main.c+68−74
@@ -140,42 +140,18 @@ static const int __nkdb_err = ARRAY_SIZE(kdbmsgs); · 139 unmodified lines
140140 * KDB_ENVBUFSIZE if required).
141141 */
142142
143−static char *__env[] = {
143+static char *__env[31] = {
144144 #if defined(CONFIG_SMP)
145− "PROMPT=[%d]kdb> ",
145+ "PROMPT=[%d]kdb> ",
146146 #else
147− "PROMPT=kdb> ",
147+ "PROMPT=kdb> ",
148148 #endif
149− "MOREPROMPT=more> ",
150− "RADIX=16",
151− "MDCOUNT=8", /* lines of md output */
152− KDB_PLATFORM_ENV,
153− "DTABCOUNT=30",
154− "NOSECT=1",
155− (char *)0,
156− (char *)0,
157− (char *)0,
158− (char *)0,
159− (char *)0,
160− (char *)0,
161− (char *)0,
162− (char *)0,
163− (char *)0,
164− (char *)0,
165− (char *)0,
166− (char *)0,
167− (char *)0,
168− (char *)0,
169− (char *)0,
170− (char *)0,
171− (char *)0,
172− (char *)0,
173− (char *)0,
174− (char *)0,
175− (char *)0,
176− (char *)0,
177− (char *)0,
178− (char *)0,
149+ "MOREPROMPT=more> ",
150+ "RADIX=16",
151+ "MDCOUNT=8", /* lines of md output */
152+ KDB_PLATFORM_ENV,
153+ "DTABCOUNT=30",
154+ "NOSECT=1",
179155 };
180156
181157 static const int __nenv = ARRAY_SIZE(__env);
@@ -317,6 +293,63 @@ int kdbgetintenv(const char *match, int *value) · 135 unmodified lines
317293 return diag;
318294 }
319295
296+/*
297+ * kdb_setenv() - Alter an existing environment variable or create a new one.
298+ * @var: Name of the variable
299+ * @val: Value of the variable
300+ *
301+ * Return: Zero on success, a kdb diagnostic on failure.
302+ */
303+static int kdb_setenv(const char *var, const char *val)
304+{
305+ int i;
306+ char *ep;
307+ size_t varlen, vallen;
308+
309+ varlen = strlen(var);
310+ vallen = strlen(val);
311+ ep = kdballocenv(varlen + vallen + 2);
312+ if (ep == (char *)0)
313+ return KDB_ENVBUFFULL;
314+
315+ sprintf(ep, "%s=%s", var, val);
316+
317+ for (i = 0; i < __nenv; i++) {
318+ if (__env[i]
319+ && ((strncmp(__env[i], var, varlen) == 0)
320+ && ((__env[i][varlen] == '\0')
321+ || (__env[i][varlen] == '=')))) {
322+ __env[i] = ep;
323+ return 0;
324+ }
325+ }
326+
327+ /*
328+ * Wasn't existing variable. Fit into slot.
329+ */
330+ for (i = 0; i < __nenv-1; i++) {
331+ if (__env[i] == (char *)0) {
332+ __env[i] = ep;
333+ return 0;
334+ }
335+ }
336+
337+ return KDB_ENVFULL;
338+}
339+
340+/*
341+ * kdb_printenv() - Display the current environment variables.
342+ */
343+static void kdb_printenv(void)
344+{
345+ int i;
346+
347+ for (i = 0; i < __nenv; i++) {
348+ if (__env[i])
349+ kdb_printf("%s\n", __env[i]);
350+ }
351+}
352+
320353 /*
321354 * kdbgetularg - This function will convert a numeric string into an
322355 * unsigned long value.
@@ -374,10 +407,6 @@ int kdbgetu64arg(const char *arg, u64 *value) · 51 unmodified lines
374407 */
375408 int kdb_set(int argc, const char **argv)
376409 {
377− int i;
378− char *ep;
379− size_t varlen, vallen;
380−
381410 /*
382411 * we can be invoked two ways:
383412 * set var=value argv[1]="var", argv[2]="value"
@@ -422,37 +451,7 @@ int kdb_set(int argc, const char **argv) · 38 unmodified lines
422451 * Tokenizer squashed the '=' sign. argv[1] is variable
423452 * name, argv[2] = value.
424453 */
425− varlen = strlen(argv[1]);
426− vallen = strlen(argv[2]);
427− ep = kdballocenv(varlen + vallen + 2);
428− if (ep == (char *)0)
429− return KDB_ENVBUFFULL;
430−
431− sprintf(ep, "%s=%s", argv[1], argv[2]);
432−
433− ep[varlen+vallen+1] = '\0';
434−
435− for (i = 0; i < __nenv; i++) {
436− if (__env[i]
437− && ((strncmp(__env[i], argv[1], varlen) == 0)
438− && ((__env[i][varlen] == '\0')
439− || (__env[i][varlen] == '=')))) {
440− __env[i] = ep;
441− return 0;
442− }
443− }
444−
445− /*
446− * Wasn't existing variable. Fit into slot.
447− */
448− for (i = 0; i < __nenv-1; i++) {
449− if (__env[i] == (char *)0) {
450− __env[i] = ep;
451− return 0;
452− }
453− }
454−
455− return KDB_ENVFULL;
454+ return kdb_setenv(argv[1], argv[2]);
456455 }
457456
458457 static int kdb_check_regs(void)
@@ -2055,12 +2054,7 @@ static int kdb_lsmod(int argc, const char **argv) · 1596 unmodified lines
20552054
20562055 static int kdb_env(int argc, const char **argv)
20572056 {
2058− int i;
2059−
2060− for (i = 0; i < __nenv; i++) {
2061− if (__env[i])
2062− kdb_printf("%s\n", __env[i]);
2063− }
2057+ kdb_printenv();
20642058
20652059 if (KDB_DEBUG(MASK))
20662060 kdb_printf("KDBDEBUG=0x%x\n",