> > Furthermore your solution will require close to every
> > function dealing with string to be rewritten.
>
> Any solution will, since most things are implemented W -> A now.
Here are some more statistics for the opposite case.
55 ASCII functions call Unicode functions.
dlls/advapi32/eventlog.c: advapi32: RegisterEventSourceA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/advapi32/eventlog.c: advapi32: RegisterEventSourceA: illegal call to
RegisterEventSourceW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegCreateKeyExA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegDeleteKeyA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegDeleteValueA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegEnumKeyExA: illegal call to lstrlenW
(ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegEnumValueA: illegal call to lstrlenW
(ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegLoadKeyA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegOpenKeyExA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegQueryInfoKeyA: illegal call to
lstrlenW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegQueryValueExA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegSetValueExA: illegal call to
copy_nameAtoW (ASCII -> Unicode)
dlls/advapi32/registry.c: advapi32: RegSetValueExA: illegal call to
memcpyAtoW (ASCII -> Unicode)
dlls/advapi32/security.c: advapi32: LookupPrivilegeValueA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/advapi32/security.c: advapi32: LookupPrivilegeValueA: illegal call to
LookupPrivilegeValueW (ASCII -> Unicode)
dlls/advapi32/service.c: advapi32: OpenSCManagerA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/advapi32/service.c: advapi32: OpenServiceA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/advapi32/service.c: advapi32: OpenServiceA: illegal call to
OpenServiceW (ASCII -> Unicode)
dlls/advapi32/service.c: advapi32: StartServiceA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/advapi32/service.c: advapi32: StartServiceA: illegal call to
StartServiceW (ASCII -> Unicode)
dlls/avifil32/avifile.c: avifil32: AVIFileCreateStreamA: illegal call to
lstrcpynAtoW (ASCII -> Unicode)
dlls/commdlg/colordlg.c: comdlg32: ChooseColorA: illegal call to
ChooseColorW (ASCII -> Unicode)
dlls/commdlg/colordlg.c: comdlg32: ChooseColorA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/ddraw/main.c: ddraw: DirectDrawEnumerateExA: illegal call to
createDDRAW (ASCII -> Unicode)
dlls/dplayx/dplay.c: dplayx: DirectPlayEnumerateA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
dlls/msacm32/driver.c: msacm32: acmDriverDetailsA: illegal call to
acmDriverDetailsW (ASCII -> Unicode)
dlls/shell32/pidl.c: : SHILCreateFromPathA: illegal call to lstrcpynAtoW
(ASCII -> Unicode)
graphics/enhmetafiledrv/init.c: gdi32: CreateEnhMetaFileA: illegal call to
CreateEnhMetaFileW (ASCII -> Unicode)
graphics/enhmetafiledrv/init.c: gdi32: CreateEnhMetaFileA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
graphics/enhmetafiledrv/init.c: gdi32: CreateEnhMetaFileA: illegal call to
lstrcpyAtoW (ASCII -> Unicode)
loader/pe_resource.c: : GetResDirEntryA: illegal call to GetResDirEntryW
(ASCII -> Unicode)
loader/pe_resource.c: : GetResDirEntryA: illegal call to HEAP_strdupAtoW
(ASCII -> Unicode)
loader/pe_resource.c: : PE_EnumResourceLanguagesA: illegal call to
GetResDirEntryW (ASCII -> Unicode)
loader/pe_resource.c: : PE_EnumResourceLanguagesA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
loader/pe_resource.c: : PE_EnumResourceNamesA: illegal call to
GetResDirEntryW (ASCII -> Unicode)
loader/pe_resource.c: : PE_EnumResourceNamesA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
loader/resource.c: user32: CopyAcceleratorTableA: illegal call to
CopyAcceleratorTableW (ASCII -> Unicode)
loader/resource.c: user32: LoadAcceleratorsA: illegal call to
HEAP_strdupAtoW (ASCII -> Unicode)
loader/resource.c: user32: LoadAcceleratorsA: illegal call to
LoadAcceleratorsW (ASCII -> Unicode)
loader/resource.c: : LoadMessageA: illegal call to FindResourceExW (ASCII ->
Unicode)
loader/resource.c: user32 & kernel32: LoadStringA: illegal call to
LoadStringW (ASCII -> Unicode)
memory/atom.c: user & kernel32: GlobalAddAtomA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
memory/atom.c: user & kernel32: GlobalFindAtomA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
memory/atom.c: user & kernel32: GlobalGetAtomNameA: illegal call to lstrlenW
(ASCII -> Unicode)
memory/virtual.c: kernel32: CreateFileMappingA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
memory/virtual.c: kernel32: OpenFileMappingA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
misc/ddeml.c: user32: DdeInitializeA: illegal call to DdeInitializeW (ASCII
-> Unicode)
misc/registry.c: advapi32: RegConnectRegistryA: illegal call to
RegConnectRegistryW (ASCII -> Unicode)
misc/registry.c: advapi32: RegConnectRegistryA: illegal call to strdupA2W
(ASCII -> Unicode)
misc/registry.c: advapi32: RegReplaceKeyA: illegal call to RegReplaceKeyW
(ASCII -> Unicode)
misc/registry.c: advapi32: RegReplaceKeyA: illegal call to strdupA2W (ASCII
-> Unicode)
misc/registry.c: advapi32: RegRestoreKeyA: illegal call to RegRestoreKeyW
(ASCII -> Unicode)
misc/registry.c: advapi32: RegRestoreKeyA: illegal call to strdupA2W (ASCII
-> Unicode)
misc/registry.c: advapi32: RegUnLoadKeyA: illegal call to RegUnLoadKeyW
(ASCII -> Unicode)
misc/registry.c: advapi32: RegUnLoadKeyA: illegal call to strdupA2W (ASCII
-> Unicode)
objects/enhmetafile.c: gdi32: GetEnhMetaFileDescriptionA: illegal call to
lstrlenW (ASCII -> Unicode)
objects/font.c: gdi32: GetCharABCWidthsA: illegal call to GetCharABCWidthsW
(ASCII -> Unicode)
objects/font.c: gdi32: GetTextExtentExPointA: illegal call to
GetTextExtentExPointW (ASCII -> Unicode)
objects/font.c: gdi32: GetTextExtentExPointA: illegal call to lstrcpynAtoW
(ASCII -> Unicode)
objects/font.c: gdi32: GetTextExtentPoint32A: illegal call to
GetTextExtentPoint32W (ASCII -> Unicode)
objects/text.c: gdi32: ExtTextOutA: illegal call to ExtTextOutW (ASCII ->
Unicode)
scheduler/event.c: kernel32: CreateEventA: illegal call to server_strcpyAtoW
(ASCII -> Unicode)
scheduler/event.c: kernel32: OpenEventA: illegal call to server_strcpyAtoW
(ASCII -> Unicode)
scheduler/mutex.c: kernel32: CreateMutexA: illegal call to server_strcpyAtoW
(ASCII -> Unicode)
scheduler/mutex.c: kernel32: OpenMutexA: illegal call to server_strcpyAtoW
(ASCII -> Unicode)
scheduler/semaphore.c: kernel32: CreateSemaphoreA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
scheduler/semaphore.c: kernel32: OpenSemaphoreA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
scheduler/timer.c: kernel32: CreateWaitableTimerA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
scheduler/timer.c: kernel32: OpenWaitableTimerA: illegal call to
server_strcpyAtoW (ASCII -> Unicode)
win32/newfns.c: kernel32: SetComputerNameA: illegal call to HEAP_strdupAtoW
(ASCII -> Unicode)
win32/newfns.c: kernel32: SetComputerNameA: illegal call to SetComputerNameW
(ASCII -> Unicode)
windows/cursoricon.c: user32: LoadImageA: illegal call to HEAP_strdupAtoW
(ASCII -> Unicode)
windows/cursoricon.c: user32: LoadImageA: illegal call to LoadImageW (ASCII
-> Unicode)
windows/winproc.c: : WINPROC_UnmapMsg32WTo32A: illegal call to lstrcpyAtoW
(ASCII -> Unicode)
windows/winproc.c: : WINPROC_UnmapMsg32WTo32A: illegal call to lstrcpynAtoW
(ASCII -> Unicode)