Piotr Caban : msvcrt: Make fputwc encoding aware.
Alexandre Julliard
julliard at winehq.org
Fri Jan 11 13:46:58 CST 2013
Module: wine
Branch: master
Commit: ebfa65361819f5804934db2262b54508851ba3cb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebfa65361819f5804934db2262b54508851ba3cb
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Jan 11 11:18:44 2013 +0100
msvcrt: Make fputwc encoding aware.
---
dlls/msvcrt/file.c | 28 ++++++++++++++++++++++++----
dlls/msvcrt/msvcrt.h | 1 +
2 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index c53e061..19ad11c 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3375,10 +3375,30 @@ MSVCRT_size_t CDECL MSVCRT_fwrite(const void *ptr, MSVCRT_size_t size, MSVCRT_si
*/
MSVCRT_wint_t CDECL MSVCRT_fputwc(MSVCRT_wint_t wc, MSVCRT_FILE* file)
{
- MSVCRT_wchar_t mwc=wc;
- if (MSVCRT_fwrite( &mwc, sizeof(mwc), 1, file) != 1)
- return MSVCRT_WEOF;
- return wc;
+ MSVCRT_wchar_t mwc=wc;
+ ioinfo *fdinfo;
+ MSVCRT_wint_t ret;
+
+ MSVCRT__lock_file(file);
+ fdinfo = msvcrt_get_ioinfo(file->_file);
+
+ if((fdinfo->wxflag&WX_TEXT) && !(fdinfo->exflag&(EF_UTF8|EF_UTF16))) {
+ char buf[MSVCRT_MB_LEN_MAX];
+ int char_len;
+
+ char_len = wctomb(buf, mwc);
+ if(char_len!=-1 && MSVCRT_fwrite(buf, char_len, 1, file)==1)
+ ret = wc;
+ else
+ ret = MSVCRT_WEOF;
+ }else if(MSVCRT_fwrite(&mwc, sizeof(mwc), 1, file) == 1) {
+ ret = wc;
+ }else {
+ ret = MSVCRT_WEOF;
+ }
+
+ MSVCRT__unlock_file(file);
+ return ret;
}
/*********************************************************************
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index 1bdf393..77418e3 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -46,6 +46,7 @@
#define MSVCRT_I64_MAX (((__int64)0x7fffffff << 32) | 0xffffffff)
#define MSVCRT_I64_MIN (-MSVCRT_I64_MAX-1)
#define MSVCRT_UI64_MAX (((unsigned __int64)0xffffffff << 32) | 0xffffffff)
+#define MSVCRT_MB_LEN_MAX 2
#define MSVCRT__MAX_DRIVE 3
#define MSVCRT__MAX_DIR 256
More information about the wine-cvs
mailing list