Made wine_get_unix_file_name take a Unicode string pointer.

This commit is contained in:
Eric Pouech 2004-01-05 23:42:09 +00:00 committed by Alexandre Julliard
parent a938cbeb73
commit 5bf3a2669b
8 changed files with 36 additions and 34 deletions

View File

@ -618,7 +618,7 @@ static void LoadReplaceList(void)
}
static BOOL ReadFontDir(char *dirname)
static BOOL ReadFontDir(const char *dirname)
{
DIR *dir;
struct dirent *dent;
@ -724,17 +724,13 @@ INT WineEngAddFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
{
if (ft_handle) /* do it only if we have freetype up and running */
{
DWORD len = WideCharToMultiByte(CP_ACP, 0, file, -1, NULL, 0, NULL, NULL);
LPSTR fileA = HeapAlloc(GetProcessHeap(), 0, len);
char unixname[MAX_PATH];
WideCharToMultiByte(CP_ACP, 0, file, -1, fileA, len, NULL, NULL);
if(flags)
FIXME("Ignoring flags %lx\n", flags);
if(wine_get_unix_file_name(fileA, unixname, sizeof(unixname)))
if(wine_get_unix_file_name(file, unixname, sizeof(unixname)))
AddFontFileToList(unixname, NULL);
HeapFree(GetProcessHeap(), 0, fileA);
}
return 1;
}
@ -756,11 +752,11 @@ BOOL WineEngRemoveFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
*/
BOOL WineEngInit(void)
{
static const WCHAR fontsW[] = {'\\','F','o','n','t','s','\0'};
HKEY hkey;
DWORD valuelen, datalen, i = 0, type, dlen, vlen;
LPSTR value;
LPVOID data;
char windowsdir[MAX_PATH];
WCHAR windowsdir[MAX_PATH];
char unixname[MAX_PATH];
TRACE("\n");
@ -826,8 +822,8 @@ BOOL WineEngInit(void)
TRACE("FreeType version is %d.%d.%d\n",FT_Version.major,FT_Version.minor,FT_Version.patch);
/* load in the fonts from %WINDOWSDIR%\\Fonts first of all */
GetWindowsDirectoryA(windowsdir, sizeof(windowsdir));
strcat(windowsdir, "\\Fonts");
GetWindowsDirectoryW(windowsdir, sizeof(windowsdir) / sizeof(WCHAR));
strcatW(windowsdir, fontsW);
if(wine_get_unix_file_name(windowsdir, unixname, sizeof(unixname)))
ReadFontDir(unixname);
@ -837,19 +833,20 @@ BOOL WineEngInit(void)
if(RegOpenKeyA(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\Fonts",
&hkey) == ERROR_SUCCESS) {
RegQueryInfoKeyA(hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
LPWSTR valueW;
RegQueryInfoKeyW(hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
&valuelen, &datalen, NULL, NULL);
valuelen++; /* returned value doesn't include room for '\0' */
value = HeapAlloc(GetProcessHeap(), 0, valuelen);
data = HeapAlloc(GetProcessHeap(), 0, datalen);
valueW = HeapAlloc(GetProcessHeap(), 0, valuelen * sizeof(WCHAR));
data = HeapAlloc(GetProcessHeap(), 0, datalen * sizeof(WCHAR));
dlen = datalen;
dlen = datalen * sizeof(WCHAR);
vlen = valuelen;
while(RegEnumValueA(hkey, i++, value, &vlen, NULL, &type, data,
while(RegEnumValueW(hkey, i++, valueW, &vlen, NULL, &type, data,
&dlen) == ERROR_SUCCESS) {
if(((LPSTR)data)[0] && ((LPSTR)data)[1] == ':')
if(wine_get_unix_file_name((LPSTR)data, unixname, sizeof(unixname)))
if(((LPWSTR)data)[0] && ((LPWSTR)data)[1] == ':')
if(wine_get_unix_file_name((LPWSTR)data, unixname, sizeof(unixname)))
AddFontFileToList(unixname, NULL);
/* reset dlen and vlen */
@ -857,7 +854,7 @@ BOOL WineEngInit(void)
vlen = valuelen;
}
HeapFree(GetProcessHeap(), 0, data);
HeapFree(GetProcessHeap(), 0, value);
HeapFree(GetProcessHeap(), 0, valueW);
RegCloseKey(hkey);
}
@ -867,7 +864,7 @@ BOOL WineEngInit(void)
if(RegOpenKeyA(HKEY_LOCAL_MACHINE,
"Software\\Wine\\Wine\\Config\\FontDirs",
&hkey) == ERROR_SUCCESS) {
LPSTR value;
RegQueryInfoKeyA(hkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
&valuelen, &datalen, NULL, NULL);

View File

@ -511,6 +511,7 @@ static int CreateSpoolFile(LPCSTR pszOutput)
else
{
char buffer[MAX_PATH];
WCHAR psCmdPW[MAX_PATH];
TRACE("Just assume it's a file\n");
@ -518,7 +519,8 @@ static int CreateSpoolFile(LPCSTR pszOutput)
* The file name can be dos based, we have to find its
* Unix correspondant file name
*/
wine_get_unix_file_name(psCmdP, buffer, sizeof(buffer));
MultiByteToWideChar(CP_ACP, 0, psCmdP, -1, psCmdPW, MAX_PATH);
wine_get_unix_file_name(psCmdPW, buffer, sizeof(buffer));
if ((fd = open(buffer, O_CREAT | O_TRUNC | O_WRONLY , 0600)) < 0)
{

View File

@ -1132,7 +1132,7 @@
@ varargs __wine_call_from_16_regs()
# Unix files
@ stdcall wine_get_unix_file_name(str ptr long)
@ stdcall wine_get_unix_file_name(wstr ptr long)
# Init code
@ cdecl __wine_kernel_init()

View File

@ -456,13 +456,14 @@ static void DOSCONF_Parse(char *menuname)
DOSCONF *DOSCONF_GetConfig(void)
{
HKEY hkey;
CHAR filename[MAX_PATH];
WCHAR filename[MAX_PATH];
static const WCHAR configW[] = {'c','o','n','f','i','g','.','s','y','s',0};
if (DOSCONF_loaded)
return &DOSCONF_config;
/* default value */
strcpy( filename, "*" );
filename[0] = '*'; filename[1] = '\0';
if (!RegOpenKeyA(HKEY_LOCAL_MACHINE,
"Software\\Wine\\Wine\\Config\\wine",
@ -471,11 +472,11 @@ DOSCONF *DOSCONF_GetConfig(void)
DWORD type;
DWORD count = sizeof(filename);
RegQueryValueExA(hkey, "config.sys", 0, &type, filename, &count);
RegQueryValueExW(hkey, configW, 0, &type, (LPBYTE)filename, &count);
RegCloseKey(hkey);
}
if (strcmp(filename, "*") && *filename != '\0')
if ((filename[0] != '*' || filename[1] != '\0') && *filename != '\0')
{
CHAR fullname[MAX_PATH];
@ -492,7 +493,7 @@ DOSCONF *DOSCONF_GetConfig(void)
{
WARN( "Couldn't open config.sys file given as %s in"
" configuration file, section [wine]!\n",
filename );
debugstr_w(filename) );
}
}

View File

@ -1697,15 +1697,12 @@ DWORD WINAPI GetFullPathNameW( LPCWSTR name, DWORD len, LPWSTR buffer,
* wine_get_unix_file_name (KERNEL32.@) Not a Windows API
*
* Return the full Unix file name for a given path.
* FIXME: convert dos file name to unicode
*/
BOOL WINAPI wine_get_unix_file_name( LPCSTR dos, LPSTR buffer, DWORD len )
BOOL WINAPI wine_get_unix_file_name( LPCWSTR dosW, LPSTR buffer, DWORD len )
{
BOOL ret;
DOS_FULL_NAME path;
WCHAR dosW[MAX_PATHNAME_LEN];
MultiByteToWideChar(CP_ACP, 0, dos, -1, dosW, MAX_PATHNAME_LEN);
ret = DOSFS_GetFullName( dosW, FALSE, &path );
if (ret && len)
{

View File

@ -1868,7 +1868,7 @@ VOID WINAPI _LeaveSysLevel(SYSLEVEL*);
/* Wine internal functions */
BOOL WINAPI wine_get_unix_file_name( LPCSTR dos, LPSTR buffer, DWORD len );
BOOL WINAPI wine_get_unix_file_name( LPCWSTR dos, LPSTR buffer, DWORD len );
/* a few optimizations for i386/gcc */

View File

@ -325,9 +325,11 @@ static BOOL ExtractFromEXEDLL(const char *szFileName, int nIndex, const char *sz
/* get the Unix file name for a given path, allocating the string */
inline static char *get_unix_file_name( const char *dos )
{
WCHAR dosW[MAX_PATH];
char buffer[MAX_PATH], *ret;
if (!wine_get_unix_file_name( dos, buffer, sizeof(buffer) )) return NULL;
MultiByteToWideChar(CP_ACP, 0, dos, -1, dosW, MAX_PATH);
if (!wine_get_unix_file_name( dosW, buffer, sizeof(buffer) )) return NULL;
ret = HeapAlloc( GetProcessHeap(), 0, lstrlenA( buffer ) + 1 );
lstrcpyA( ret, buffer );
return ret;

View File

@ -36,7 +36,7 @@ static char *progname;
/* Wine specific functions */
extern BOOL process_init(char *argv[]);
typedef BOOL (WINAPI *wine_get_unix_file_name_t) ( LPCSTR dos, LPSTR buffer, DWORD len );
typedef BOOL (WINAPI *wine_get_unix_file_name_t) ( LPCWSTR dos, LPSTR buffer, DWORD len );
/*
* handle an option
*/
@ -161,7 +161,10 @@ int main(int argc, char *argv[])
printf("%s\n", path);
}
if (outputformats & UNIXFORMAT) {
wine_get_unix_file_name_ptr(argv[i], path, sizeof(path));
WCHAR dosW[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, argv[i], -1, dosW, MAX_PATH);
wine_get_unix_file_name_ptr(dosW, path, sizeof(path));
printf("%s\n", path);
}
}