Module: wine Branch: master Commit: d534e1f3dc2322bd25dc9d14bee696ead2bea2ea URL: http://source.winehq.org/git/wine.git/?a=commit;h=d534e1f3dc2322bd25dc9d14be... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Fri Oct 5 14:54:17 2012 +0200 msvcp60: Added basic_filebuf::open implementation. --- dlls/msvcp60/ios.c | 104 +++++++++++++++++++++++++++++++++++++++++++++ dlls/msvcp60/msvcp60.spec | 16 +++--- 2 files changed, 112 insertions(+), 8 deletions(-) diff --git a/dlls/msvcp60/ios.c b/dlls/msvcp60/ios.c index cf3620a..8d7381a 100644 --- a/dlls/msvcp60/ios.c +++ b/dlls/msvcp60/ios.c @@ -2491,6 +2491,58 @@ FILE* __cdecl ___Fiopen(const char *name, int mode) return _Fiopen(name, mode, _SH_DENYNO); } +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PB_WHH@Z */ +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEB_WHH@Z */ +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBGHH@Z */ +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBGHH@Z */ +static basic_filebuf_char* basic_filebuf_char_open_wchar(basic_filebuf_char *this, const wchar_t *name, int mode, int prot) +{ + FILE *f = NULL; + + TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + + if(basic_filebuf_char_is_open(this)) + return NULL; + + if(!(f = _Fiopen_wchar(name, mode, prot))) + return NULL; + + basic_filebuf_char__Init(this, f, INITFL_open); + basic_filebuf_char__Initcvt(this, codecvt_char_use_facet(this->base.loc)); + return this; +} + +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDHH@Z */ +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDHH@Z */ +static basic_filebuf_char* basic_filebuf_char_open(basic_filebuf_char *this, const char *name, int mode, int prot) +{ + wchar_t nameW[FILENAME_MAX]; + + TRACE("(%p %s %d %d)\n", this, name, mode, prot); + + if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0) + return NULL; + return basic_filebuf_char_open_wchar(this, nameW, mode, prot); +} + +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDF@Z */ +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDF@Z */ +DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_mode_old, 12) +basic_filebuf_char* __thiscall basic_filebuf_char_open_mode_old(basic_filebuf_char *this, const char *name, short mode) +{ + TRACE("(%p %p %d)\n", this, name, mode); + return basic_filebuf_char_open(this, name, mode, _SH_DENYNO); +} + +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDH@Z */ +/* ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDH@Z */ +DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_mode, 12) +basic_filebuf_char* __thiscall basic_filebuf_char_open_mode(basic_filebuf_char *this, const char *name, int mode) +{ + TRACE("(%p %p %d)\n", this, name, mode); + return basic_filebuf_char_open(this, name, mode, _SH_DENYNO); +} + /* ?overflow@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@MAEHH(a)Z */ /* ?overflow@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@MEAAHH(a)Z */ DEFINE_THISCALL_WRAPPER(basic_filebuf_char_overflow, 8) @@ -2955,6 +3007,58 @@ MSVCP_bool __thiscall basic_filebuf_wchar_is_open(const basic_filebuf_wchar *thi return this->file != NULL; } +/* ?open@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@QAEPAV12(a)PB_WHH@Z */ +/* ?open@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@QEAAPEAV12(a)PEB_WHH@Z */ +/* ?open@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@QAEPAV12(a)PBGHH@Z */ +/* ?open@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@QEAAPEAV12(a)PEBGHH@Z */ +static basic_filebuf_wchar* basic_filebuf_wchar_open_wchar(basic_filebuf_wchar *this, const wchar_t *name, int mode, int prot) +{ + FILE *f = NULL; + + TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + + if(basic_filebuf_wchar_is_open(this)) + return NULL; + + if(!(f = _Fiopen_wchar(name, mode, prot))) + return NULL; + + basic_filebuf_wchar__Init(this, f, INITFL_open); + basic_filebuf_wchar__Initcvt(this, codecvt_wchar_use_facet(this->base.loc)); + return this; +} + +/* ?open@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@QAEPAV12(a)PBDHH@Z */ +/* ?open@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@QEAAPEAV12(a)PEBDHH@Z */ +static basic_filebuf_wchar* basic_filebuf_wchar_open(basic_filebuf_wchar *this, const char *name, int mode, int prot) +{ + wchar_t nameW[FILENAME_MAX]; + + TRACE("(%p %s %d %d)\n", this, name, mode, prot); + + if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0) + return NULL; + return basic_filebuf_wchar_open_wchar(this, nameW, mode, prot); +} + +/* ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QAEPAV12(a)PBDF@Z */ +/* ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QEAAPEAV12(a)PEBDF@Z */ +DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_mode_old, 12) +basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_mode_old(basic_filebuf_wchar *this, const char *name, short mode) +{ + TRACE("(%p %p %d)\n", this, name, mode); + return basic_filebuf_wchar_open(this, name, mode, _SH_DENYNO); +} + +/* ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QAEPAV12(a)PBDH@Z */ +/* ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QEAAPEAV12(a)PEBDH@Z */ +DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_mode, 12) +basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_mode(basic_filebuf_wchar *this, const char *name, int mode) +{ + TRACE("(%p %p %d)\n", this, name, mode); + return basic_filebuf_wchar_open(this, name, mode, _SH_DENYNO); +} + /* ?overflow@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@MAEGG(a)Z */ /* ?overflow@?$basic_filebuf(a)_WU?$char_traits(a)_W@std@@@std@@MEAAGG(a)Z */ /* ?overflow@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@MAEGG(a)Z */ diff --git a/dlls/msvcp60/msvcp60.spec b/dlls/msvcp60/msvcp60.spec index e6bf596..9301a6f 100644 --- a/dlls/msvcp60/msvcp60.spec +++ b/dlls/msvcp60/msvcp60.spec @@ -3498,14 +3498,14 @@ @ extern -arch=win64 ?npos@?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@2_KB basic_string_char_npos @ extern -arch=win32 ?npos@?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@2IB basic_string_wchar_npos @ extern -arch=win64 ?npos@?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@2_KB basic_string_wchar_npos -@ stub -arch=win32 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDF@Z -@ stub -arch=win64 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDF@Z -@ stub -arch=win32 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDH@Z -@ stub -arch=win64 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDH@Z -@ stub -arch=win32 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QAEPAV12(a)PBDF@Z -@ stub -arch=win64 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QEAAPEAV12(a)PEBDF@Z -@ stub -arch=win32 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QAEPAV12(a)PBDH@Z -@ stub -arch=win64 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QEAAPEAV12(a)PEBDH@Z +@ thiscall -arch=win32 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDF@Z(ptr str long) basic_filebuf_char_open_mode_old +@ cdecl -arch=win64 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDF@Z(ptr str long) basic_filebuf_char_open_mode_old +@ thiscall -arch=win32 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QAEPAV12(a)PBDH@Z(ptr str long) basic_filebuf_char_open_mode +@ cdecl -arch=win64 ?open@?$basic_filebuf(a)DU?$char_traits(a)D@std@@@std@@QEAAPEAV12(a)PEBDH@Z(ptr str long) basic_filebuf_char_open_mode +@ thiscall -arch=win32 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QAEPAV12(a)PBDF@Z(ptr str long) basic_filebuf_wchar_open_mode_old +@ cdecl -arch=win64 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QEAAPEAV12(a)PEBDF@Z(ptr str long) basic_filebuf_wchar_open_mode_old +@ thiscall -arch=win32 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QAEPAV12(a)PBDH@Z(ptr str long) basic_filebuf_wchar_open_mode +@ cdecl -arch=win64 ?open@?$basic_filebuf(a)GU?$char_traits(a)G@std@@@std@@QEAAPEAV12(a)PEBDH@Z(ptr str long) basic_filebuf_wchar_open_mode @ stub -arch=win32 ?open@?$basic_fstream(a)DU?$char_traits(a)D@std@@@std@@QAEXPBDF(a)Z @ stub -arch=win64 ?open@?$basic_fstream(a)DU?$char_traits(a)D@std@@@std@@QEAAXPEBDF(a)Z @ stub -arch=win32 ?open@?$basic_fstream(a)DU?$char_traits(a)D@std@@@std@@QAEXPBDH(a)Z