Thanks to Alexandre Julliard. He pointed out to me the
right method, and I hope this patch is the correct
one.
 
ChangeLog:
-dlls/commdlg/filetitle.c
  implemented GetFileTitleW
  GetFileTitleA now is a call to GetFileTitleW

liuspider

__________________________________________________
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    18 Jan 2003 14:13:02 -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,41 @@
  */
 short WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
 {
-       int i, len;
+    int ret,totalW;
+    UNICODE_STRING strWFile;
+    LPWSTR lpWTitle;
+    totalW = cbBuf * sizeof(WCHAR);
+    RtlCreateUnicodeStringFromAsciiz(&strWFile, lpFile);
+    lpWTitle = RtlAllocateHeap( GetProcessHeap(), 0, totalW);
+    ret = GetFileTitleW(strWFile.Buffer, lpWTitle, totalW);
+    if (!ret){
+        WideCharToMultiByte( CP_ACP, 0, lpWTitle, -1, lpTitle, cbBuf, NULL, NULL );
+    }
+    RtlFreeUnicodeString( &strWFile );
+    RtlFreeHeap( GetProcessHeap(), 0, lpWTitle );
+    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 +93,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;
 }
 
 

Reply via email to