Piotr Caban : msvcp100: Add time_get<char>::get_fmt implementation.
Alexandre Julliard
julliard at winehq.org
Tue Nov 20 15:39:51 CST 2018
Module: wine
Branch: master
Commit: ba7cf8cf8fdbb279f2849f109fbe97f57ec2cc61
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ba7cf8cf8fdbb279f2849f109fbe97f57ec2cc61
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Nov 20 18:30:46 2018 +0100
msvcp100: Add time_get<char>::get_fmt implementation.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcp90/locale.c | 58 ++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 48 insertions(+), 10 deletions(-)
diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 64f7de2..7755ddf 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -10019,16 +10019,6 @@ dateorder __thiscall time_get_char_date_order(const time_get_char *this)
return call_time_get_char_do_date_order(this);
}
-/* ?get@?$time_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@0AEAVios_base at 2@AEAHPEAUtm@@PEBD4 at Z */
-DEFINE_THISCALL_WRAPPER(time_get_char_get_fmt, 44)
-istreambuf_iterator_char* __thiscall time_get_char_get_fmt(const time_get_char *this,
- istreambuf_iterator_char *ret, istreambuf_iterator_char s, istreambuf_iterator_char e,
- ios_base *base, int *err, struct tm *t, const char *fmtstart, const char *fmtend)
-{
- FIXME("(%p %p %p %p %p %p %p) stub\n", this, ret, base, err, t, fmtstart, fmtend);
- return NULL;
-}
-
static int find_longest_match(istreambuf_iterator_char *iter, const char *str)
{
int i, len = 0, last_match = -1, match = -1;
@@ -10590,6 +10580,54 @@ istreambuf_iterator_char* __thiscall time_get_char_get(const time_get_char *this
return call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod);
}
+/* ?get@?$time_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@0AEAVios_base at 2@AEAHPEAUtm@@PEBD4 at Z */
+DEFINE_THISCALL_WRAPPER(time_get_char_get_fmt, 44)
+istreambuf_iterator_char* __thiscall time_get_char_get_fmt(const time_get_char *this,
+ istreambuf_iterator_char *ret, istreambuf_iterator_char s, istreambuf_iterator_char e,
+ ios_base *base, int *err, struct tm *t, const char *fmtstart, const char *fmtend)
+{
+ ctype_char *ctype;
+
+ TRACE("(%p %p %p %p %p %s)\n", this, ret, base, err, t, wine_dbgstr_an(fmtstart, fmtend-fmtstart));
+
+ ctype = ctype_char_use_facet(IOS_LOCALE(base));
+ istreambuf_iterator_char_val(&s);
+
+ while(fmtstart < fmtend) {
+ if(ctype_char_is_ch(ctype, _SPACE, *fmtstart)) {
+ skip_ws(ctype, &s);
+ fmtstart++;
+ continue;
+ }
+
+ if(!s.strbuf) {
+ *err |= IOSTATE_failbit;
+ break;
+ }
+
+ if(*fmtstart != '%' || fmtstart+1 >= fmtend || fmtstart[1] == '%') {
+ if(s.val != *fmtstart)
+ *err |= IOSTATE_failbit;
+ else
+ istreambuf_iterator_char_inc(&s);
+ if(*fmtstart == '%')
+ fmtstart++;
+ } else {
+ fmtstart++;
+ time_get_char_get(this, &s, s, e, base, err, t, *fmtstart, 0);
+ }
+
+ if(*err & IOSTATE_failbit)
+ break;
+ fmtstart++;
+ }
+
+ if(!s.strbuf)
+ *err |= IOSTATE_eofbit;
+ *ret = s;
+ return ret;
+}
+
/* ?get@?$time_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@0AAVios_base at 2@AAHPAUtm@@PBD4 at Z */
/* ??_7_Locimp at locale@std@@6B@ */
extern const vtable_ptr MSVCP_locale__Locimp_vtable;
More information about the wine-cvs
mailing list