Thanks to Dmitry Timoshkov. This patch is the second edition, adopted his suggestions. ChangeLog: -dlls/commdlg/filetitle.c implemented GetFileTitleW GetFileTitleA now is a call to GetFileTitleW (The patch seems to be ignored without any comments. Could anyone give some clues on how to improve this patch? thanks.) liuspider __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com
Index: dlls/commdlg/filetitle.c =================================================================== RCS file: /home/wine/wine/dlls/commdlg/filetitle.c,v retrieving revision 1.12 diff -u -r1.12 filetitle.c --- dlls/commdlg/filetitle.c 31 May 2002 23:25:45 -0000 1.12 +++ dlls/commdlg/filetitle.c 12 Jan 2003 07:09:56 -0000 @@ -3,6 +3,7 @@ * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine + * Copyright 2003 liuspider * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,10 +25,10 @@ #include "winbase.h" #include "winnls.h" #include "commdlg.h" +#include "wine/unicode.h" +#include "winternl.h" #include "wine/debug.h" -#include "heap.h" /* Has to go */ - WINE_DEFAULT_DEBUG_CHANNEL(commdlg); #include "cdlg.h" @@ -38,19 +39,39 @@ */ short WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf) { - int i, len; + int ret; + UNICODE_STRING strWFile, strWTitle; + RtlCreateUnicodeStringFromAsciiz(&strWFile, lpFile); + RtlCreateUnicodeStringFromAsciiz(&strWTitle,lpTitle); + ret = GetFileTitleW(strWFile.Buffer, strWTitle.Buffer, cbBuf * sizeof(WCHAR)); + if (!ret){ + WideCharToMultiByte( CP_ACP, 0, strWTitle.Buffer, -1, lpTitle, cbBuf, NULL, NULL ); + } + RtlFreeUnicodeString( &strWFile ); + RtlFreeUnicodeString( &strWTitle ); + return ret; +} + +/*********************************************************************** + * GetFileTitleW (COMDLG32.@) + * + */ +short WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, UINT cbBuf) +{ + int i, len; + WCHAR brkpoint[] = {'*','[',']'}; TRACE("(%p %p %d); \n", lpFile, lpTitle, cbBuf); if(lpFile == NULL || lpTitle == NULL) return -1; - len = strlen(lpFile); + len = strlenW(lpFile); if (len == 0) return -1; - if(strpbrk(lpFile, "*[]")) + if(strpbrkW(lpFile, brkpoint)) return -1; len--; @@ -70,34 +91,14 @@ if(i == -1) i++; - TRACE("---> '%s' \n", &lpFile[i]); + TRACE("---> '%s' \n", debugstr_w(&lpFile[i])); - len = strlen(lpFile+i)+1; + len = strlenW(lpFile+i)+1; if(cbBuf < len) return len; - strncpy(lpTitle, &lpFile[i], len); + strncpyW(lpTitle, &lpFile[i], len); return 0; -} - - -/*********************************************************************** - * GetFileTitleW (COMDLG32.@) - * - */ -short WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, UINT cbBuf) -{ - LPSTR file = HEAP_strdupWtoA(GetProcessHeap(), 0, lpFile); /* Has to go */ - LPSTR title = HeapAlloc(GetProcessHeap(), 0, cbBuf); - short ret; - - ret = GetFileTitleA(file, title, cbBuf); - - if (cbBuf > 0 && !MultiByteToWideChar( CP_ACP, 0, title, -1, lpTitle, cbBuf )) - lpTitle[cbBuf-1] = 0; - HeapFree(GetProcessHeap(), 0, file); - HeapFree(GetProcessHeap(), 0, title); - return ret; }