stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vikas Mehta (JIRA)" <j...@apache.org>
Subject [jira] Created: (STDCXX-93) time_get crashes when calling get_date ( Visual C++ 8.0 )
Date Mon, 02 Jan 2006 02:50:01 GMT
time_get crashes when calling get_date ( Visual C++ 8.0 )
---------------------------------------------------------

         Key: STDCXX-93
         URL: http://issues.apache.org/jira/browse/STDCXX-93
     Project: STDCXX
        Type: Bug
  Components: Examples  
 Environment: Visual C++ 8.0
    Reporter: Vikas Mehta


Test case:
// Following code snippet is taken from examples\manual\time_get.cpp

// NOTE: A SunPro bug requires time.h preceed locale. PR #26255
#include <ctime>      // for struct tm
#include <locale>     // for locale, time_get
#include <sstream>    // for stringstream
#include <iostream>   // for cout, endl


// Print out a tm struct value in one atomic operation
std::ostream& operator<< (std::ostream &os, const std::tm &t)
{
    std::stringstream strm;

    strm << "Daylight Savings = "   << t.tm_isdst
         << "\nDay of year      = " << t.tm_yday
         << "\nDay of week      = " << t.tm_wday
         << "\nYear             = " << t.tm_year
         << "\nMonth            = " << t.tm_mon
         << "\nDay of month     = " << t.tm_mday
         << "\nHour             = " << t.tm_hour
         << "\nMinute           = " << t.tm_min
         << "\nSecond           = " << t.tm_sec
         << '\n';

    // guard for thread safety and output synchronization
    const std::ostream::sentry guard (os);

    if (guard)
        os.rdbuf ()->sputn (strm.str ().c_str (), strm.str ().size ());
    else
        os.setstate (os.failbit);

    return os;
}


int main ()
{
    typedef std::istreambuf_iterator<char, std::char_traits<char> > Iter;

    // time struct to parse date into
    static std::tm timeb;  // zero initialized

    // Unused, required by time_get
    std::ios_base::iostate state;

    // Stream object to read from
    std::istringstream ins ("");

    // Iterators into the stream object
    Iter begin (ins);
    Iter end;

    // Get a reference to the time_get facet in locale loc.
    const std::time_get<char, Iter> &tg =
        std::use_facet<std::time_get<char, Iter> >(std::locale ("C"));

    // Display time_base::dateorder value.
    std::cout << "time_base::dateorder == " << tg.date_order () << ".\n";
  
    // Insert date string into stream.
    ins.str ("04/07/69");

    // get_date from the stream and output tm contents.
    tg.get_date (begin, end, ins, state, &timeb);
    std::cout << "Date: Apr 7 1969\n" << timeb << std::endl;

    return 0;
}

Stack Trace:

>	msvcr80d.dll!_mbstowcs_l_helper(wchar_t * pwcs=0x008e2b78, const char * s=0x008e6008,
unsigned int n=1812, localeinfo_struct * plocinfo=0x0012f740)  Line 71	C++
 	msvcr80d.dll!_mbstowcs_s_l(unsigned int * pConvertedChars=0x0012f7b0, wchar_t * pwcs=0x008e2b78,
unsigned int sizeInWords=1812, const char * s=0x008e6008, unsigned int n=4294967295, localeinfo_struct
* plocinfo=0x0012f7d4)  Line 259 + 0x30 bytes	C++
 	msvcr80d.dll!_wcsftime_l_stat(wchar_t * wstring=0x008e2b78, unsigned int maxsize=1812, const
wchar_t * wformat=0x00473980, const tm * timeptr=0x0012f858, localeinfo_struct * plocinfo=0x0012f7d4)
 Line 101 + 0x32 bytes	C++
 	msvcr80d.dll!_wcsftime_l(wchar_t * wstring=0x008e2b78, unsigned int maxsize=1812, const
wchar_t * wformat=0x00473980, const tm * timeptr=0x0012f858, localeinfo_struct * plocinfo=0x00000000)
 Line 152 + 0x1e bytes	C++
 	msvcr80d.dll!wcsftime(wchar_t * wstring=0x008e2b78, unsigned int maxsize=1812, const wchar_t
* wformat=0x00473980, const tm * timeptr=0x0012f858)  Line 162 + 0x17 bytes	C++
 	time_get.exe!__rw::__rw_get_timepunct(const __rw::__rw_facet * pfacet=0x0049465c, int flags=64,
unsigned int inx=0)  Line 695 + 0x28 bytes	C++
 	time_get.exe!__rw::__rw_get_timepunct(const __rw::__rw_facet * pfacet=0x0049465c, int flags=64,
const void * * names=0x0012fc40, unsigned int * sizes=0x0012faa8)  Line 1115 + 0x11 bytes
C++
 	time_get.exe!__rw::__rw_get_timepunct(const __rw::__rw_facet * pfacet=0x0049465c, int *
data=0x0012fa4c, tm * tmb=0x0012fa78, int * * pmem=0x0012fa6c, const void * * names=0x0012fc40,
unsigned int * sizes=0x0012faa8)  Line 1452 + 0x23 bytes	C++
 	time_get.exe!std::time_get<char,std::istreambuf_iterator<char,std::char_traits<char>
> >::do_get(std::istreambuf_iterator<char,std::char_traits<char> > __it={...},
std::istreambuf_iterator<char,std::char_traits<char> > __end={...}, std::ios_base
& __fl={...}, __rw::__rw_iostate & __err=-858993460, tm * __tmb=0x00492518, char __fmt='x',
char __modifier=0)  Line 175 + 0x2c bytes	C++
 	time_get.exe!std::time_get<char,std::istreambuf_iterator<

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message