Nikolay Sivov <nsivov(a)codeweavers.com> wrote:
-static HRESULT Global_DateSerial(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) +static HRESULT Global_DateSerial(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + int year, month, day; + SYSTEMTIME lt; + HRESULT hres; + double date; + UDATE ud; + + TRACE("\n"); + + assert(args_cnt == 3); + + hres = to_int(args, &year); + if (SUCCEEDED(hres)) + hres = to_int(args + 1, &month); + if (SUCCEEDED(hres)) + hres = to_int(args + 2, &day); + + if (SUCCEEDED(hres)) + { + lt.wYear = year; + lt.wMonth = month; + lt.wDay = day; + + ud.st = lt; + ud.wDayOfYear = 0; + hres = VarDateFromUdateEx(&ud, 0, 0, &date); + }
Having 'lt' as an intermediate variable seems to be redundant. Also ud.st is not fully initialized unlike in 2/2. -- Dmitry.