cmd.exe: Make 'set t' show all vars starting with 't'.

This commit is contained in:
Jason Edmeades 2007-02-26 23:06:11 +00:00 committed by Alexandre Julliard
parent 69194ce0d7
commit 1c632cd0fb
1 changed files with 16 additions and 18 deletions

View File

@ -939,12 +939,16 @@ static int WCMD_compare( const void *a, const void *b )
* WCMD_setshow_sortenv * WCMD_setshow_sortenv
* *
* sort variables into order for display * sort variables into order for display
* Optionally only display those who start with a stub
* returns the count displayed
*/ */
static void WCMD_setshow_sortenv(const char *s) static int WCMD_setshow_sortenv(const char *s, const char *stub)
{ {
UINT count=0, len=0, i; UINT count=0, len=0, i, displayedcount=0, stublen=0;
const char **str; const char **str;
if (stub) stublen = strlen(stub);
/* count the number of strings, and the total length */ /* count the number of strings, and the total length */
while ( s[len] ) { while ( s[len] ) {
len += (lstrlen(&s[len]) + 1); len += (lstrlen(&s[len]) + 1);
@ -954,7 +958,7 @@ static void WCMD_setshow_sortenv(const char *s)
/* add the strings to an array */ /* add the strings to an array */
str = LocalAlloc (LMEM_FIXED | LMEM_ZEROINIT, count * sizeof (char*) ); str = LocalAlloc (LMEM_FIXED | LMEM_ZEROINIT, count * sizeof (char*) );
if( !str ) if( !str )
return; return 0;
str[0] = s; str[0] = s;
for( i=1; i<count; i++ ) for( i=1; i<count; i++ )
str[i] = str[i-1] + lstrlen(str[i-1]) + 1; str[i] = str[i-1] + lstrlen(str[i-1]) + 1;
@ -964,11 +968,17 @@ static void WCMD_setshow_sortenv(const char *s)
/* print it */ /* print it */
for( i=0; i<count; i++ ) { for( i=0; i<count; i++ ) {
if (!stub || CompareString (LOCALE_USER_DEFAULT,
NORM_IGNORECASE | SORT_STRINGSORT,
str[i], stublen, stub, -1) == 2) {
WCMD_output_asis(str[i]); WCMD_output_asis(str[i]);
WCMD_output_asis("\n"); WCMD_output_asis("\n");
displayedcount++;
}
} }
LocalFree( str ); LocalFree( str );
return displayedcount;
} }
/**************************************************************************** /****************************************************************************
@ -982,27 +992,16 @@ void WCMD_setshow_env (char *s) {
LPVOID env; LPVOID env;
char *p; char *p;
int status; int status;
char buffer[1048];
if (strlen(param1) == 0) { if (strlen(param1) == 0) {
env = GetEnvironmentStrings (); env = GetEnvironmentStrings ();
WCMD_setshow_sortenv( env ); WCMD_setshow_sortenv( env, NULL );
} }
else { else {
p = strchr (s, '='); p = strchr (s, '=');
if (p == NULL) { if (p == NULL) {
env = GetEnvironmentStrings ();
/* FIXME: Emulate Win98 for now, ie "SET C" looks ONLY for an if (WCMD_setshow_sortenv( env, s ) == 0) {
environment variable C, whereas on NT it shows ALL variables
starting with C.
*/
status = GetEnvironmentVariable(s, buffer, sizeof(buffer));
if (status) {
WCMD_output_asis( s);
WCMD_output_asis( "=");
WCMD_output_asis( buffer);
WCMD_output_asis( "\n");
} else {
WCMD_output ("Environment variable %s not defined\n", s); WCMD_output ("Environment variable %s not defined\n", s);
} }
return; return;
@ -1013,7 +1012,6 @@ char buffer[1048];
status = SetEnvironmentVariable (s, p); status = SetEnvironmentVariable (s, p);
if ((!status) & (GetLastError() != ERROR_ENVVAR_NOT_FOUND)) WCMD_print_error(); if ((!status) & (GetLastError() != ERROR_ENVVAR_NOT_FOUND)) WCMD_print_error();
} }
/* WCMD_output (newline); @JED*/
} }
/**************************************************************************** /****************************************************************************