Module: wine Branch: master Commit: 73dad192b49880c9754d46ae84aa9f4a97dd2ea8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=73dad192b49880c9754d46ae8...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Apr 1 10:30:21 2020 +0200
krnl386: Avoid using toupperW().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/krnl386.exe16/file.c | 9 ++++++--- dlls/krnl386.exe16/int21.c | 23 +++++++++++++--------- dlls/krnl386.exe16/relay.c | 49 ++++++++++++++++------------------------------ 3 files changed, 37 insertions(+), 44 deletions(-)
diff --git a/dlls/krnl386.exe16/file.c b/dlls/krnl386.exe16/file.c index 4e7f7c4b33..e44455a021 100644 --- a/dlls/krnl386.exe16/file.c +++ b/dlls/krnl386.exe16/file.c @@ -461,10 +461,13 @@ LONG WINAPI _hwrite16( HFILE16 hFile, LPCSTR buffer, LONG count ) UINT WINAPI GetTempDrive( BYTE ignored ) { WCHAR buffer[MAX_PATH]; - BYTE ret; + BYTE ret = 'C';
- if (GetTempPathW( MAX_PATH, buffer )) ret = (BYTE)toupperW(buffer[0]); - else ret = 'C'; + if (GetTempPathW( MAX_PATH, buffer )) + { + ret = buffer[0]; + if (ret >= 'a' && ret <= 'z') ret += 'A' - 'a'; + } return MAKELONG( ret | (':' << 8), 1 ); }
diff --git a/dlls/krnl386.exe16/int21.c b/dlls/krnl386.exe16/int21.c index 04ae9fe8a8..feab712af0 100644 --- a/dlls/krnl386.exe16/int21.c +++ b/dlls/krnl386.exe16/int21.c @@ -264,6 +264,13 @@ typedef struct
static int brk_flag;
+static BYTE drive_number( WCHAR letter ) +{ + if (letter >= 'A' && letter <= 'Z') return letter - 'A'; + if (letter >= 'a' && letter <= 'z') return letter - 'a'; + return MAX_DOS_DRIVES; +} +
/* Many calls translate a drive argument like this: drive number (00h = default, 01h = A:, etc) @@ -300,8 +307,7 @@ static BYTE INT21_GetCurrentDrive(void) TRACE( "Failed to get current drive.\n" ); return MAX_DOS_DRIVES; } - - return toupperW( current_directory[0] ) - 'A'; + return drive_number( current_directory[0] ); }
@@ -636,7 +642,7 @@ static BOOL INT21_GetCurrentDirectory( CONTEXT *context, BOOL islong )
if (!GetCurrentDirectoryW( MAX_PATH, pathW )) return FALSE;
- if (toupperW(pathW[0]) - 'A' != drive || pathW[1] != ':') + if (drive_number( pathW[0] ) != drive || pathW[1] != ':') { /* cwd is not on the requested drive, get the environment string instead */
@@ -765,7 +771,7 @@ static BOOL INT21_SetCurrentDirectory( CONTEXT *context ) result = SetEnvironmentVariableW( env_var, dirW );
/* only set current directory if on the current drive */ - if (result && (toupperW(dirW[0]) - 'A' == drive)) result = SetCurrentDirectoryW( dirW ); + if (result && (drive_number( dirW[0] ) == drive)) result = SetCurrentDirectoryW( dirW );
return result; } @@ -3418,8 +3424,7 @@ static BOOL INT21_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer ) break; default: if (strchrW( invalid_chars, *p )) return FALSE; - buffer[i] = toupperW(*p); - p++; + buffer[i] = *p++; break; } } @@ -3455,12 +3460,12 @@ static BOOL INT21_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer ) break; default: if (strchrW( invalid_chars, *p )) return FALSE; - buffer[i] = toupperW(*p); - p++; + buffer[i] = *p++; break; } } buffer[11] = '\0'; + struprW( buffer );
/* at most 3 character of the extension are processed * is something behind this ? @@ -3514,7 +3519,7 @@ static BOOL INT21_FindFirst( CONTEXT *context ) /* we must have a fully qualified file name in dta->fullPath * (we could have a UNC path, but this would lead to some errors later on) */ - dta->drive = toupperW(dta->fullPath[0]) - 'A'; + dta->drive = drive_number( dta->fullPath[0] ); dta->count = 0; dta->search_attr = CL_reg(context); return TRUE; diff --git a/dlls/krnl386.exe16/relay.c b/dlls/krnl386.exe16/relay.c index a47e85126e..837f389230 100644 --- a/dlls/krnl386.exe16/relay.c +++ b/dlls/krnl386.exe16/relay.c @@ -59,37 +59,22 @@ typedef struct { } RELAY_Stack16;
-static const WCHAR **debug_relay_excludelist; -static const WCHAR **debug_relay_includelist; -static const WCHAR **debug_snoop_excludelist; -static const WCHAR **debug_snoop_includelist; +static const char **debug_relay_excludelist; +static const char **debug_relay_includelist; +static const char **debug_snoop_excludelist; +static const char **debug_snoop_includelist;
-/* compare an ASCII and a Unicode string without depending on the current codepage */ -static inline int strcmpiAW( const char *strA, const WCHAR *strW ) -{ - while (*strA && (toupperW((unsigned char)*strA) == toupperW(*strW))) { strA++; strW++; } - return toupperW((unsigned char)*strA) - toupperW(*strW); -} - -/* compare an ASCII and a Unicode string without depending on the current codepage */ -static inline int strncmpiAW( const char *strA, const WCHAR *strW, int n ) -{ - int ret = 0; - for ( ; n > 0; n--, strA++, strW++) - if ((ret = toupperW((unsigned char)*strA) - toupperW(*strW)) || !*strA) break; - return ret; -}
/*********************************************************************** * build_list * * Build a function list from a ';'-separated string. */ -static const WCHAR **build_list( const WCHAR *buffer ) +static const char **build_list( const WCHAR *buffer ) { int count = 1; const WCHAR *p = buffer; - const WCHAR **ret; + const char **ret;
while ((p = strchrW( p, ';' ))) { @@ -98,17 +83,17 @@ static const WCHAR **build_list( const WCHAR *buffer ) } /* allocate count+1 pointers, plus the space for a copy of the string */ if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, - (count+1) * sizeof(WCHAR*) + (strlenW(buffer)+1) * sizeof(WCHAR) ))) + (count + 1) * sizeof(char *) + (strlenW(buffer) + 1) ))) { - WCHAR *str = (WCHAR *)(ret + count + 1); - WCHAR *p = str; + char *str = (char *)(ret + count + 1); + char *p = str;
- strcpyW( str, buffer ); + while ((*str++ = *buffer++)); count = 0; for (;;) { ret[count++] = p; - if (!(p = strchrW( p, ';' ))) break; + if (!(p = strchr( p, ';' ))) break; *p++ = 0; } ret[count++] = NULL; @@ -185,25 +170,25 @@ void RELAY16_InitDebugLists(void) * * Check if a given module and function is in the list. */ -static BOOL check_list( const char *module, int ordinal, const char *func, const WCHAR **list ) +static BOOL check_list( const char *module, int ordinal, const char *func, const char **list ) { char ord_str[10];
sprintf( ord_str, "%d", ordinal ); for(; *list; list++) { - const WCHAR *p = strrchrW( *list, '.' ); + const char *p = strrchr( *list, '.' ); if (p && p > *list) /* check module and function */ { int len = p - *list; - if (strncmpiAW( module, *list, len-1 ) || module[len]) continue; + if (_strnicmp( module, *list, len-1 ) || module[len]) continue; if (p[1] == '*' && !p[2]) return TRUE; - if (!strcmpiAW( ord_str, p + 1 )) return TRUE; - if (func && !strcmpiAW( func, p + 1 )) return TRUE; + if (!strcmp( ord_str, p + 1 )) return TRUE; + if (func && !_strnicmp( func, p + 1, -1 )) return TRUE; } else /* function only */ { - if (func && !strcmpiAW( func, *list )) return TRUE; + if (func && !_strnicmp( func, *list, -1 )) return TRUE; } } return FALSE;