@@ -140,42 +140,18 @@ static const int __nkdb_err = ARRAY_SIZE(kdbmsgs);
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
181157static const int __nenv = ARRAY_SIZE (__env );
@@ -317,6 +293,63 @@ int kdbgetintenv(const char *match, int *value)
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)
374407 */
375408int 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)
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
458457static int kdb_check_regs (void )
@@ -2055,12 +2054,7 @@ static int kdb_lsmod(int argc, const char **argv)
20552054
20562055static 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" ,
0 commit comments