mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
Update msvcrt_winetest to Wine-23052006
svn path=/trunk/; revision=21994
This commit is contained in:
parent
69713a9bc1
commit
b6a61aafb6
9 changed files with 1018 additions and 97 deletions
|
@ -117,12 +117,16 @@ static type_info* (*p__RTtypeid)(void*);
|
|||
static void* (*p__RTCastToVoid)(void*);
|
||||
static void* (*p__RTDynamicCast)(void*,int,void*,void*,int);
|
||||
|
||||
/*Demangle*/
|
||||
static char* (*p__unDName)(char*,const char*,int,void*,void*,unsigned short int);
|
||||
|
||||
|
||||
/* _very_ early native versions have serious RTTI bugs, so we check */
|
||||
static void* bAncientVersion;
|
||||
|
||||
/* Emulate a __thiscall */
|
||||
#ifdef _MSC_VER
|
||||
__inline static void* do_call_func1(void *func, void *_this)
|
||||
inline static void* do_call_func1(void *func, void *_this)
|
||||
{
|
||||
volatile void* retval = 0;
|
||||
__asm
|
||||
|
@ -136,7 +140,7 @@ __inline static void* do_call_func1(void *func, void *_this)
|
|||
return (void*)retval;
|
||||
}
|
||||
|
||||
__inline static void* do_call_func2(void *func, void *_this, void* arg)
|
||||
inline static void* do_call_func2(void *func, void *_this, void* arg)
|
||||
{
|
||||
volatile void* retval = 0;
|
||||
__asm
|
||||
|
@ -178,7 +182,7 @@ static void* do_call_func2(void *func, void *_this, void* arg)
|
|||
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y)
|
||||
#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y)
|
||||
|
||||
static void InitFunctionPtrs()
|
||||
static void InitFunctionPtrs(void)
|
||||
{
|
||||
hMsvcrt = LoadLibraryA("msvcrt.dll");
|
||||
ok(hMsvcrt != 0, "LoadLibraryA failed\n");
|
||||
|
@ -238,9 +242,7 @@ static void InitFunctionPtrs()
|
|||
|
||||
SET(ptype_info_dtor, "??1type_info@@UAE@XZ");
|
||||
SET(ptype_info_raw_name, "?raw_name@type_info@@QBEPBDXZ");
|
||||
#ifndef __REACTOS__
|
||||
SET(ptype_info_name, "?name@type_info@@QBEPBDXZ");
|
||||
#endif
|
||||
SET(ptype_info_before, "?before@type_info@@QBEHABV1@@Z");
|
||||
SET(ptype_info_opequals_equals, "??8type_info@@QBEHABV0@@Z");
|
||||
SET(ptype_info_opnot_equals, "??9type_info@@QBEHABV0@@Z");
|
||||
|
@ -249,6 +251,8 @@ static void InitFunctionPtrs()
|
|||
SET(p__RTCastToVoid, "__RTCastToVoid");
|
||||
SET(p__RTDynamicCast, "__RTDynamicCast");
|
||||
|
||||
SET(p__unDName,"__unDName");
|
||||
|
||||
/* Extremely early versions export logic_error, and crash in RTTI */
|
||||
SETNOFAIL(bAncientVersion, "??0logic_error@@QAE@ABQBD@Z");
|
||||
}
|
||||
|
@ -814,6 +818,174 @@ static void test_rtti(void)
|
|||
ok (casted == NULL, "Cast succeeded\n");
|
||||
}
|
||||
|
||||
struct _demangle {
|
||||
LPCSTR mangled;
|
||||
LPCSTR result;
|
||||
BOOL test_in_wine;
|
||||
};
|
||||
|
||||
static void test_demangle_datatype(void)
|
||||
{
|
||||
char * name;
|
||||
struct _demangle demangle[]={
|
||||
/* { "BlaBla"," ?? ::Bla", FALSE}, */
|
||||
{ "ABVVec4@ref2@dice@@","class dice::ref2::Vec4 const &",TRUE},
|
||||
{ "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0H@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,7>", TRUE},
|
||||
{ "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HO@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,126>",TRUE},
|
||||
{ "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HOA@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,2016>",TRUE},
|
||||
{ "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HOAA@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,32256>",TRUE},
|
||||
{ "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$01@@@", "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$01@@@", FALSE},
|
||||
/* { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$011@@@", "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$011@@@",FALSE}, */
|
||||
};
|
||||
int i, num_test = (sizeof(demangle)/sizeof(struct _demangle));
|
||||
|
||||
for (i = 0; i < num_test; i++)
|
||||
{
|
||||
name = p__unDName(0, demangle[i].mangled, 0, pmalloc, pfree, 0x2800);
|
||||
if (demangle[i].test_in_wine)
|
||||
ok(name != NULL && !strcmp(name,demangle[i].result), "Got name \"%s\" for %d\n", name, i);
|
||||
else
|
||||
todo_wine ok(name != NULL && !strcmp(name,demangle[i].result), "Got name %s for %d\n", name, i);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Compare two strings treating multiple spaces (' ', ascii 0x20) in s2
|
||||
as single space. Needed for test_demangle as __unDName() returns sometimes
|
||||
two spaces instead of one in some older native msvcrt dlls. */
|
||||
static int strcmp_space(const char *s1, const char *s2)
|
||||
{
|
||||
const char* s2start = s2;
|
||||
do {
|
||||
while (*s1 == *s2 && *s1) {
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
if (*s2 == ' ' && s2 > s2start && *(s2 - 1) == ' ')
|
||||
s2++;
|
||||
else
|
||||
break;
|
||||
} while (*s1 && *s2);
|
||||
return *s1 - *s2;
|
||||
}
|
||||
|
||||
static void test_demangle(void)
|
||||
{
|
||||
static struct {const char* in; const char* out;} test[] = {
|
||||
{"??0bad_alloc@std@@QAE@ABV01@@Z", "public: __thiscall std::bad_alloc::bad_alloc(class std::bad_alloc const &)"},
|
||||
{"??0bad_alloc@std@@QAE@PBD@Z", "public: __thiscall std::bad_alloc::bad_alloc(char const *)"},
|
||||
{"??0bad_cast@@AAE@PBQBD@Z", "private: __thiscall bad_cast::bad_cast(char const * const *)"},
|
||||
{"??0bad_cast@@QAE@ABQBD@Z", "public: __thiscall bad_cast::bad_cast(char const * const &)"},
|
||||
{"??0bad_cast@@QAE@ABV0@@Z", "public: __thiscall bad_cast::bad_cast(class bad_cast const &)"},
|
||||
{"??0bad_exception@std@@QAE@ABV01@@Z", "public: __thiscall std::bad_exception::bad_exception(class std::bad_exception const &)"},
|
||||
{"??0bad_exception@std@@QAE@PBD@Z", "public: __thiscall std::bad_exception::bad_exception(char const *)"},
|
||||
{"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(class std::basic_filebuf<char,struct std::char_traits<char> > const &)"},
|
||||
{"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z", "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(struct _iobuf *)"},
|
||||
{"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z", "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(enum std::_Uninitialized)"},
|
||||
{"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(class std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> > const &)"},
|
||||
{"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z", "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(struct _iobuf *)"},
|
||||
{"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z", "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(enum std::_Uninitialized)"},
|
||||
{"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
|
||||
{"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z", "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)"},
|
||||
{"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z", "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(int)"},
|
||||
{"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(class std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
|
||||
{"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z", "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &,int)"},
|
||||
{"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z", "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(int)"},
|
||||
{"??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z", "public: __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(class std::_Locinfo const &,unsigned int)"},
|
||||
{"??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z", "public: __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(unsigned int)"},
|
||||
{"??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z", "public: __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(class std::_Locinfo const &,unsigned int)"},
|
||||
{"??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z", "public: __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(unsigned int)"},
|
||||
{"??0streambuf@@QAE@ABV0@@Z", "public: __thiscall streambuf::streambuf(class streambuf const &)"},
|
||||
{"??0strstreambuf@@QAE@ABV0@@Z", "public: __thiscall strstreambuf::strstreambuf(class strstreambuf const &)"},
|
||||
{"??0strstreambuf@@QAE@H@Z", "public: __thiscall strstreambuf::strstreambuf(int)"},
|
||||
{"??0strstreambuf@@QAE@P6APAXJ@ZP6AXPAX@Z@Z", "public: __thiscall strstreambuf::strstreambuf(void * (__cdecl*)(long),void (__cdecl*)(void *))"},
|
||||
{"??0strstreambuf@@QAE@PADH0@Z", "public: __thiscall strstreambuf::strstreambuf(char *,int,char *)"},
|
||||
{"??0strstreambuf@@QAE@PAEH0@Z", "public: __thiscall strstreambuf::strstreambuf(unsigned char *,int,unsigned char *)"},
|
||||
{"??0strstreambuf@@QAE@XZ", "public: __thiscall strstreambuf::strstreambuf(void)"},
|
||||
{"??1__non_rtti_object@std@@UAE@XZ", "public: virtual __thiscall std::__non_rtti_object::~__non_rtti_object(void)"},
|
||||
{"??1__non_rtti_object@@UAE@XZ", "public: virtual __thiscall __non_rtti_object::~__non_rtti_object(void)"},
|
||||
{"??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ", "public: virtual __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::~num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(void)"},
|
||||
{"??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ", "public: virtual __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::~num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(void)"},
|
||||
{"??4istream_withassign@@QAEAAV0@ABV0@@Z", "public: class istream_withassign & __thiscall istream_withassign::operator=(class istream_withassign const &)"},
|
||||
{"??4istream_withassign@@QAEAAVistream@@ABV1@@Z", "public: class istream & __thiscall istream_withassign::operator=(class istream const &)"},
|
||||
{"??4istream_withassign@@QAEAAVistream@@PAVstreambuf@@@Z", "public: class istream & __thiscall istream_withassign::operator=(class streambuf *)"},
|
||||
{"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAC@Z", "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,signed char &)"},
|
||||
{"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z", "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,char &)"},
|
||||
{"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAE@Z", "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,unsigned char &)"},
|
||||
{"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z", "public: class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::operator<<(class std::ios_base & (__cdecl*)(class std::ios_base &))"},
|
||||
{"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z", "public: class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::operator<<(class std::basic_streambuf<unsigned short,struct std::char_traits<unsigned short> > *)"},
|
||||
{"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z", "public: class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::operator<<(void const *)"},
|
||||
{"??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@", "const std::basic_fstream<char,struct std::char_traits<char> >::`vbtable'{for `std::basic_ostream<char,struct std::char_traits<char> >'}"},
|
||||
{"??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@", "const std::basic_fstream<unsigned short,struct std::char_traits<unsigned short> >::`vbtable'{for `std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >'}"},
|
||||
{"??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@", "const std::basic_fstream<unsigned short,struct std::char_traits<unsigned short> >::`vbtable'{for `std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >'}"},
|
||||
{"??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z", "bool __cdecl std::operator!=(char const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
|
||||
{"??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z", "bool __cdecl std::operator!=(unsigned short const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
|
||||
{"??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z", "public: char & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator[](unsigned int)"},
|
||||
{"??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z", "public: char const & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator[](unsigned int)const "},
|
||||
{"??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z", "public: unsigned short & __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::operator[](unsigned int)"},
|
||||
{"??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z", "public: unsigned short const & __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::operator[](unsigned int)const "},
|
||||
{"?abs@std@@YAMABV?$complex@M@1@@Z", "float __cdecl std::abs(class std::complex<float> const &)"},
|
||||
{"?abs@std@@YANABV?$complex@N@1@@Z", "double __cdecl std::abs(class std::complex<double> const &)"},
|
||||
{"?abs@std@@YAOABV?$complex@O@1@@Z", "long double __cdecl std::abs(class std::complex<long double> const &)"},
|
||||
{"?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A", "class std::basic_istream<char,struct std::char_traits<char> > std::cin"},
|
||||
{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,unsigned short &)const "},
|
||||
{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,unsigned int &)const "},
|
||||
{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,long &)const "},
|
||||
{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,unsigned long &)const "},
|
||||
{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,float &)const "},
|
||||
{"?_query_new_handler@@YAP6AHI@ZXZ", "int (__cdecl*__cdecl _query_new_handler(void))(unsigned int)"},
|
||||
{"?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z", "public: void __thiscall std::ios_base::register_callback(void (__cdecl*)(enum std::ios_base::event,class std::ios_base &,int),int)"},
|
||||
{"?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z", "public: class std::basic_istream<char,struct std::char_traits<char> > & __thiscall std::basic_istream<char,struct std::char_traits<char> >::seekg(long,enum std::ios_base::seekdir)"},
|
||||
{"?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z", "public: class std::basic_istream<char,struct std::char_traits<char> > & __thiscall std::basic_istream<char,struct std::char_traits<char> >::seekg(class std::fpos<int>)"},
|
||||
{"?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z", "public: class std::basic_istream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >::seekg(long,enum std::ios_base::seekdir)"},
|
||||
{"?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z", "public: class std::basic_istream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >::seekg(class std::fpos<int>)"},
|
||||
{"?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z", "protected: virtual class std::fpos<int> __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::seekoff(long,enum std::ios_base::seekdir,int)"},
|
||||
{"?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z", "protected: virtual class std::fpos<int> __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::seekoff(long,enum std::ios_base::seekdir,int)"},
|
||||
{"?set_new_handler@@YAP6AXXZP6AXXZ@Z", "void (__cdecl*__cdecl set_new_handler(void (__cdecl*)(void)))(void)"},
|
||||
{"?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_istringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
|
||||
{"?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_istringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
|
||||
{"?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_istringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
|
||||
{"?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_istringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
|
||||
{"?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_ostringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
|
||||
{"?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_ostringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
|
||||
{"?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_ostringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
|
||||
{"?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_ostringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
|
||||
{"?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
|
||||
{"?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
|
||||
{"?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_stringbuf<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
|
||||
{"?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_stringbuf<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
|
||||
{"?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
|
||||
{"?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
|
||||
{"?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
|
||||
{"?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
|
||||
{"?_Sync@ios_base@std@@0_NA", "private: static bool std::ios_base::_Sync"},
|
||||
{"??_U@YAPAXI@Z", "void * __cdecl operator new[](unsigned int)"},
|
||||
{"??_V@YAXPAX@Z", "void __cdecl operator delete[](void *)"},
|
||||
{"??X?$_Complex_base@M@std@@QAEAAV01@ABM@Z", "public: class std::_Complex_base<float> & __thiscall std::_Complex_base<float>::operator*=(float const &)"},
|
||||
{"??Xstd@@YAAAV?$complex@M@0@AAV10@ABV10@@Z", "class std::complex<float> & __cdecl std::operator*=(class std::complex<float> &,class std::complex<float> const &)"},
|
||||
{"?aaa@@YAHAAUbbb@@@Z", "int __cdecl aaa(struct bbb &)"},
|
||||
{"?aaa@@YAHBAUbbb@@@Z", "int __cdecl aaa(struct bbb & volatile)"},
|
||||
{"?aaa@@YAHPAUbbb@@@Z", "int __cdecl aaa(struct bbb *)"},
|
||||
{"?aaa@@YAHQAUbbb@@@Z", "int __cdecl aaa(struct bbb * const)"},
|
||||
{"?aaa@@YAHRAUbbb@@@Z", "int __cdecl aaa(struct bbb * volatile)"},
|
||||
{"?aaa@@YAHSAUbbb@@@Z", "int __cdecl aaa(struct bbb * const volatile)"},
|
||||
{"??0aa.a@@QAE@XZ", "??0aa.a@@QAE@XZ"},
|
||||
{"??0aa$_3a@@QAE@XZ", "public: __thiscall aa$_3a::aa$_3a(void)"},
|
||||
{"??2?$aaa@AAUbbb@@AAUccc@@AAU2@@ddd@1eee@2@QAEHXZ", "public: int __thiscall eee::eee::ddd::ddd::aaa<struct bbb &,struct ccc &,struct ccc &>::operator new(void)"},
|
||||
{"?pSW@@3P6GHKPAX0PAU_tagSTACKFRAME@@0P6GH0K0KPAK@ZP6GPAX0K@ZP6GK0K@ZP6GK00PAU_tagADDRESS@@@Z@ZA", "int (__stdcall* pSW)(unsigned long,void *,void *,struct _tagSTACKFRAME *,void *,int (__stdcall*)(void *,unsigned long,void *,unsigned long,unsigned long *),void * (__stdcall*)(void *,unsigned long),unsigned long (__stdcall*)(void *,unsigned long),unsigned long (__stdcall*)(void *,void *,struct _tagADDRESS *))"},
|
||||
};
|
||||
int i, num_test = (sizeof(test)/sizeof(test[0]));
|
||||
char* name;
|
||||
|
||||
for (i = 0; i < num_test; i++)
|
||||
{
|
||||
name = p__unDName(0, test[i].in, 0, pmalloc, pfree, 0);
|
||||
ok(name != NULL && !strcmp_space(test[i].out, name),
|
||||
"Got name \"%s\" for %d\n", name, i);
|
||||
pfree(name);
|
||||
}
|
||||
}
|
||||
|
||||
START_TEST(cpp)
|
||||
{
|
||||
InitFunctionPtrs();
|
||||
|
@ -824,6 +996,8 @@ START_TEST(cpp)
|
|||
test___non_rtti_object();
|
||||
test_type_info();
|
||||
test_rtti();
|
||||
test_demangle_datatype();
|
||||
test_demangle();
|
||||
|
||||
if (hMsvcrt)
|
||||
FreeLibrary(hMsvcrt);
|
||||
|
|
|
@ -23,16 +23,13 @@
|
|||
|
||||
START_TEST(environ)
|
||||
{
|
||||
#ifndef __REACTOS__
|
||||
ok( _putenv("cat=") == 0, "_putenv failed on deletion of non-existent environment variable\n" );
|
||||
#endif
|
||||
ok( _putenv("cat=") == 0, "_putenv failed on deletion of nonexistent environment variable\n" );
|
||||
ok( _putenv("cat=dog") == 0, "failed setting cat=dog\n" );
|
||||
ok( strcmp(getenv("cat"), "dog") == 0, "getenv did not return 'dog'\n" );
|
||||
ok( _putenv("cat=") == 0, "failed deleting cat\n" );
|
||||
|
||||
ok( _putenv("=") == -1, "should not accept '=' as input\n" );
|
||||
#ifndef __REACTOS__
|
||||
ok( _putenv("=dog") == -1, "should not accept '=dog' as input\n" );
|
||||
#endif
|
||||
|
||||
ok( getenv("nonexistent") == NULL, "getenv should fail with nonexistent var name\n" );
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* Unit test suite for file functions
|
||||
*
|
||||
* Copyright 2002 Bill Currie
|
||||
* Copyright 2005 Paul Rupe
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -58,6 +59,8 @@ static void test_fileops( void )
|
|||
WCHAR wbuffer[256];
|
||||
int fd;
|
||||
FILE *file;
|
||||
fpos_t pos;
|
||||
int i, c;
|
||||
|
||||
fd = open ("fdopen.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE);
|
||||
write (fd, outbuffer, sizeof (outbuffer));
|
||||
|
@ -71,10 +74,39 @@ static void test_fileops( void )
|
|||
ok(feof(file) !=0,"feof doesn't signal EOF\n");
|
||||
rewind(file);
|
||||
ok(fgets(buffer,strlen(outbuffer),file) !=0,"fgets failed unexpected\n");
|
||||
ok(lstrlenA(buffer) == strlen(outbuffer) -1,"fgets didn't read right size\n");
|
||||
ok(lstrlenA(buffer) == lstrlenA(outbuffer) -1,"fgets didn't read right size\n");
|
||||
ok(fgets(buffer,sizeof(outbuffer),file) !=0,"fgets failed unexpected\n");
|
||||
ok(strlen(buffer) == 1,"fgets dropped chars\n");
|
||||
ok(buffer[0] == outbuffer[strlen(outbuffer)-1],"fgets exchanged chars\n");
|
||||
|
||||
rewind(file);
|
||||
for (i = 0, c = EOF; i < sizeof(outbuffer); i++)
|
||||
{
|
||||
ok((c = fgetc(file)) == outbuffer[i], "fgetc returned wrong data\n");
|
||||
}
|
||||
ok((c = fgetc(file)) == EOF, "getc did not return EOF\n");
|
||||
ok(feof(file), "feof did not return EOF\n");
|
||||
ok(ungetc(c, file) == EOF, "ungetc(EOF) did not return EOF\n");
|
||||
ok(feof(file), "feof after ungetc(EOF) did not return EOF\n");
|
||||
ok((c = fgetc(file)) == EOF, "getc did not return EOF\n");
|
||||
c = outbuffer[sizeof(outbuffer) - 1];
|
||||
ok(ungetc(c, file) == c, "ungetc did not return its input\n");
|
||||
ok(!feof(file), "feof after ungetc returned EOF\n");
|
||||
ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF\n");
|
||||
ok(c == outbuffer[sizeof(outbuffer) - 1],
|
||||
"getc did not return ungetc'd data\n");
|
||||
ok(!feof(file), "feof after getc returned EOF prematurely\n");
|
||||
ok((c = fgetc(file)) == EOF, "getc did not return EOF\n");
|
||||
ok(feof(file), "feof after getc did not return EOF\n");
|
||||
|
||||
rewind(file);
|
||||
ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n");
|
||||
ok(pos == 0, "Unexpected result of fgetpos 0x%Lx\n", pos);
|
||||
pos = (ULONGLONG)sizeof (outbuffer);
|
||||
ok(fsetpos(file, &pos) == 0, "fsetpos failed unexpected\n");
|
||||
ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n");
|
||||
ok(pos == (ULONGLONG)sizeof (outbuffer), "Unexpected result of fgetpos 0x%Lx\n", pos);
|
||||
|
||||
fclose (file);
|
||||
fd = open ("fdopen.tst", O_RDONLY | O_TEXT);
|
||||
file = fdopen (fd, "rt"); /* open in TEXT mode */
|
||||
|
@ -83,10 +115,19 @@ static void test_fileops( void )
|
|||
ok(feof(file) !=0,"feof doesn't signal EOF\n");
|
||||
rewind(file);
|
||||
ok(fgetws(wbuffer,strlen(outbuffer),file) !=0,"fgetws failed unexpected\n");
|
||||
ok(lstrlenW(wbuffer) == (strlen(outbuffer) -1),"fgetws didn't read right size\n");
|
||||
ok(lstrlenW(wbuffer) == (lstrlenA(outbuffer) -1),"fgetws didn't read right size\n");
|
||||
ok(fgetws(wbuffer,sizeof(outbuffer),file) !=0,"fgets failed unexpected\n");
|
||||
ok(lstrlenW(wbuffer) == 1,"fgets dropped chars\n");
|
||||
fclose (file);
|
||||
|
||||
file = fopen("fdopen.tst", "rb");
|
||||
ok( file != NULL, "fopen failed\n");
|
||||
/* sizeof(buffer) > content of file */
|
||||
ok(fread(buffer, sizeof(buffer), 1, file) == 0, "fread test failed\n");
|
||||
/* feof should be set now */
|
||||
ok(feof(file), "feof after fread failed\n");
|
||||
fclose (file);
|
||||
|
||||
unlink ("fdopen.tst");
|
||||
}
|
||||
|
||||
|
@ -187,10 +228,12 @@ static void test_file_write_read( void )
|
|||
static const char mytext[]= "This is test_file_write_read\nsecond line\n";
|
||||
static const char dostext[]= "This is test_file_write_read\r\nsecond line\r\n";
|
||||
char btext[LLEN];
|
||||
int ret;
|
||||
|
||||
tempf=_tempnam(".","wne");
|
||||
ok((tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_TEXT|_O_RDWR,
|
||||
_S_IREAD | _S_IWRITE)) != -1,
|
||||
tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_TEXT|_O_RDWR,
|
||||
_S_IREAD | _S_IWRITE);
|
||||
ok( tempfd != -1,
|
||||
"Can't open '%s': %d\n", tempf, errno); /* open in TEXT mode */
|
||||
ok(_write(tempfd,mytext,strlen(mytext)) == lstrlenA(mytext),
|
||||
"_write _O_TEXT bad return value\n");
|
||||
|
@ -208,10 +251,34 @@ static void test_file_write_read( void )
|
|||
ok( memcmp(mytext,btext,strlen(mytext)) == 0,
|
||||
"problems with _O_TEXT _write / _read\n");
|
||||
_close(tempfd);
|
||||
ok(unlink(tempf) !=-1 ,"Can't unlink '%s': %d\n", tempf, errno);
|
||||
|
||||
memset(btext, 0, LLEN);
|
||||
tempfd = _open(tempf,_O_APPEND|_O_RDWR); /* open for APPEND in default mode */
|
||||
ok(tell(tempfd) == 0, "bad position %lu expecting 0\n", tell(tempfd));
|
||||
ok(_read(tempfd,btext,LLEN) == lstrlenA(mytext), "_read _O_APPEND got bad length\n");
|
||||
ok( memcmp(mytext,btext,strlen(mytext)) == 0, "problems with _O_APPEND _read\n");
|
||||
_close(tempfd);
|
||||
|
||||
/* Test reading only \n or \r */
|
||||
tempfd = _open(tempf,_O_RDONLY|_O_TEXT); /* open in TEXT mode */
|
||||
_lseek(tempfd, -1, FILE_END);
|
||||
ret = _read(tempfd,btext,LLEN);
|
||||
ok(ret == 1, "_read expected 1 got bad length: %d\n", ret);
|
||||
_lseek(tempfd, -2, FILE_END);
|
||||
ret = _read(tempfd,btext,LLEN);
|
||||
ok(ret == 1 && *btext == '\n', "_read expected '\\n' got bad length: %d\n", ret);
|
||||
_lseek(tempfd, -3, FILE_END);
|
||||
ret = _read(tempfd,btext,2);
|
||||
todo_wine ok(ret == 1 && *btext == 'e', "_read expected 'e' got \"%.*s\" bad length: %d\n", ret, btext, ret);
|
||||
todo_wine ok(tell(tempfd) == 42, "bad position %lu expecting 42\n", tell(tempfd));
|
||||
_close(tempfd);
|
||||
|
||||
ret = unlink(tempf);
|
||||
ok( ret == 0 ,"Can't unlink '%s': %d\n", tempf, errno);
|
||||
|
||||
tempf=_tempnam(".","wne");
|
||||
ok((tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_BINARY|_O_RDWR,0)) != -1,
|
||||
tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_BINARY|_O_RDWR,0);
|
||||
ok( tempfd != -1,
|
||||
"Can't open '%s': %d\n", tempf, errno); /* open in BINARY mode */
|
||||
ok(_write(tempfd,dostext,strlen(dostext)) == lstrlenA(dostext),
|
||||
"_write _O_BINARY bad return value\n");
|
||||
|
@ -230,17 +297,21 @@ static void test_file_write_read( void )
|
|||
"problems with _O_BINARY _write / _O_TEXT _read\n");
|
||||
_close(tempfd);
|
||||
|
||||
ok(_chmod (tempf, _S_IREAD | _S_IWRITE) == 0,
|
||||
ret =_chmod (tempf, _S_IREAD | _S_IWRITE);
|
||||
ok( ret == 0,
|
||||
"Can't chmod '%s' to read-write: %d\n", tempf, errno);
|
||||
ok(unlink(tempf) !=-1 ,"Can't unlink '%s': %d\n", tempf, errno);
|
||||
ret = unlink(tempf);
|
||||
ok( ret == 0 ,"Can't unlink '%s': %d\n", tempf, errno);
|
||||
}
|
||||
|
||||
static void test_file_inherit_child(const char* fd_s)
|
||||
{
|
||||
int fd = atoi(fd_s);
|
||||
char buffer[32];
|
||||
int ret;
|
||||
|
||||
ok(write(fd, "Success", 8) == 8, "Couldn't write in child process on %d (%s)\n", fd, strerror(errno));
|
||||
ret =write(fd, "Success", 8);
|
||||
ok( ret == 8, "Couldn't write in child process on %d (%s)\n", fd, strerror(errno));
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
ok(read(fd, buffer, sizeof (buffer)) == 8, "Couldn't read back the data\n");
|
||||
ok(memcmp(buffer, "Success", 8) == 0, "Couldn't read back the data\n");
|
||||
|
@ -249,8 +320,10 @@ static void test_file_inherit_child(const char* fd_s)
|
|||
static void test_file_inherit_child_no(const char* fd_s)
|
||||
{
|
||||
int fd = atoi(fd_s);
|
||||
int ret;
|
||||
|
||||
ok(write(fd, "Success", 8) == -1 && errno == EBADF,
|
||||
ret = write(fd, "Success", 8);
|
||||
ok( ret == -1 && errno == EBADF,
|
||||
"Wrong write result in child process on %d (%s)\n", fd, strerror(errno));
|
||||
}
|
||||
|
||||
|
@ -261,7 +334,7 @@ static void test_file_inherit( const char* selfname )
|
|||
char buffer[16];
|
||||
|
||||
fd = open ("fdopen.tst", O_CREAT | O_RDWR | O_BINARY, _S_IREAD |_S_IWRITE);
|
||||
ok(fd != -1, "Couldn't create test file\n ");
|
||||
ok(fd != -1, "Couldn't create test file\n");
|
||||
arg_v[0] = selfname;
|
||||
arg_v[1] = "tests/file.c";
|
||||
arg_v[2] = buffer; sprintf(buffer, "%d", fd);
|
||||
|
@ -271,10 +344,10 @@ static void test_file_inherit( const char* selfname )
|
|||
lseek(fd, 0, SEEK_SET);
|
||||
ok(read(fd, buffer, sizeof (buffer)) == 8 && memcmp(buffer, "Success", 8) == 0, "Couldn't read back the data\n");
|
||||
close (fd);
|
||||
ok(unlink("fdopen.tst") != 1, "Couldn't unlink\n");
|
||||
ok(unlink("fdopen.tst") == 0, "Couldn't unlink\n");
|
||||
|
||||
fd = open ("fdopen.tst", O_CREAT | O_RDWR | O_BINARY | O_NOINHERIT, _S_IREAD |_S_IWRITE);
|
||||
ok(fd != -1, "Couldn't create test file\n ");
|
||||
ok(fd != -1, "Couldn't create test file\n");
|
||||
arg_v[0] = selfname;
|
||||
arg_v[1] = "tests/file.c";
|
||||
arg_v[2] = buffer; sprintf(buffer, "%d", fd);
|
||||
|
@ -284,7 +357,7 @@ static void test_file_inherit( const char* selfname )
|
|||
ok(tell(fd) == 0, "bad position %lu expecting 0\n", tell(fd));
|
||||
ok(read(fd, buffer, sizeof (buffer)) == 0, "Found unexpected data (%s)\n", buffer);
|
||||
close (fd);
|
||||
ok(unlink("fdopen.tst") != 1, "Couldn't unlink\n");
|
||||
ok(unlink("fdopen.tst") == 0, "Couldn't unlink\n");
|
||||
}
|
||||
|
||||
static void test_tmpnam( void )
|
||||
|
@ -306,7 +379,90 @@ static void test_tmpnam( void )
|
|||
ok(res[strlen(res)-1] != '.', "second call - last character is a dot\n");
|
||||
}
|
||||
|
||||
static void test_chsize( void )
|
||||
{
|
||||
int fd;
|
||||
long cur, pos, count;
|
||||
char temptext[] = "012345678";
|
||||
char *tempfile = _tempnam( ".", "tst" );
|
||||
|
||||
ok( tempfile != NULL, "Couldn't create test file: %s\n", tempfile );
|
||||
|
||||
fd = _open( tempfile, _O_CREAT|_O_TRUNC|_O_RDWR, _S_IREAD|_S_IWRITE );
|
||||
ok( fd > 0, "Couldn't open test file\n" );
|
||||
|
||||
count = _write( fd, temptext, sizeof(temptext) );
|
||||
ok( count > 0, "Couldn't write to test file\n" );
|
||||
|
||||
/* get current file pointer */
|
||||
cur = _lseek( fd, 0, SEEK_CUR );
|
||||
|
||||
/* make the file smaller */
|
||||
ok( _chsize( fd, sizeof(temptext) / 2 ) == 0, "_chsize() failed\n" );
|
||||
|
||||
pos = _lseek( fd, 0, SEEK_CUR );
|
||||
ok( cur == pos, "File pointer changed from: %ld to: %ld\n", cur, pos );
|
||||
ok( _filelength( fd ) == sizeof(temptext) / 2, "Wrong file size\n" );
|
||||
|
||||
/* enlarge the file */
|
||||
ok( _chsize( fd, sizeof(temptext) * 2 ) == 0, "_chsize() failed\n" );
|
||||
|
||||
pos = _lseek( fd, 0, SEEK_CUR );
|
||||
ok( cur == pos, "File pointer changed from: %ld to: %ld\n", cur, pos );
|
||||
ok( _filelength( fd ) == sizeof(temptext) * 2, "Wrong file size\n" );
|
||||
|
||||
_close( fd );
|
||||
_unlink( tempfile );
|
||||
}
|
||||
|
||||
static void test_fopen_fclose_fcloseall( void )
|
||||
{
|
||||
char fname1[] = "empty1";
|
||||
char fname2[] = "empty2";
|
||||
char fname3[] = "empty3";
|
||||
FILE *stream1, *stream2, *stream3, *stream4;
|
||||
int ret, numclosed;
|
||||
|
||||
/* testing fopen() */
|
||||
stream1 = fopen(fname1, "w+");
|
||||
ok(stream1 != NULL, "The file '%s' was not opened\n", fname1);
|
||||
stream2 = fopen(fname2, "w ");
|
||||
ok(stream2 != NULL, "The file '%s' was not opened\n", fname2 );
|
||||
_unlink(fname3);
|
||||
stream3 = fopen(fname3, "r");
|
||||
ok(stream3 == NULL, "The file '%s' shouldn't exist before\n", fname3 );
|
||||
stream3 = fopen(fname3, "w+");
|
||||
ok(stream3 != NULL, "The file '%s' should be opened now\n", fname3 );
|
||||
errno = 0xfaceabad;
|
||||
stream4 = fopen("", "w+");
|
||||
ok(stream4 == NULL && errno == ENOENT,
|
||||
"filename is empty, errno = %d (expected 2)\n", errno);
|
||||
errno = 0xfaceabad;
|
||||
stream4 = fopen(NULL, "w+");
|
||||
ok(stream4 == NULL && (errno == EINVAL || errno == ENOENT),
|
||||
"filename is NULL, errno = %d (expected 2 or 22)\n", errno);
|
||||
|
||||
/* testing fclose() */
|
||||
ret = fclose(stream2);
|
||||
ok(ret == 0, "The file '%s' was not closed\n", fname2);
|
||||
ret = fclose(stream3);
|
||||
ok(ret == 0, "The file '%s' was not closed\n", fname3);
|
||||
ret = fclose(stream2);
|
||||
ok(ret == EOF, "Closing file '%s' returned %d\n", fname2, ret);
|
||||
ret = fclose(stream3);
|
||||
ok(ret == EOF, "Closing file '%s' returned %d\n", fname3, ret);
|
||||
|
||||
/* testing fcloseall() */
|
||||
numclosed = _fcloseall();
|
||||
/* fname1 should be closed here */
|
||||
ok(numclosed == 1, "Number of files closed by fcloseall(): %u\n", numclosed);
|
||||
numclosed = _fcloseall();
|
||||
ok(numclosed == 0, "Number of files closed by fcloseall(): %u\n", numclosed);
|
||||
|
||||
ok(_unlink(fname1) == 0, "Couldn't unlink file named '%s'\n", fname1);
|
||||
ok(_unlink(fname2) == 0, "Couldn't unlink file named '%s'\n", fname2);
|
||||
ok(_unlink(fname3) == 0, "Couldn't unlink file named '%s'\n", fname3);
|
||||
}
|
||||
|
||||
START_TEST(file)
|
||||
{
|
||||
|
@ -315,17 +471,22 @@ START_TEST(file)
|
|||
|
||||
arg_c = winetest_get_mainargs( &arg_v );
|
||||
|
||||
/* testing low-level I/O */
|
||||
if (arg_c >= 3)
|
||||
{
|
||||
if (arg_c == 3) test_file_inherit_child(arg_v[2]); else test_file_inherit_child_no(arg_v[2]);
|
||||
if (arg_c == 3) test_file_inherit_child(arg_v[2]);
|
||||
else test_file_inherit_child_no(arg_v[2]);
|
||||
return;
|
||||
}
|
||||
test_file_inherit(arg_v[0]);
|
||||
test_file_write_read();
|
||||
test_chsize();
|
||||
|
||||
/* testing stream I/O */
|
||||
test_fdopen();
|
||||
test_fopen_fclose_fcloseall();
|
||||
test_fileops();
|
||||
test_fgetwc();
|
||||
test_file_put_get();
|
||||
test_file_write_read();
|
||||
test_file_inherit(arg_v[0]);
|
||||
test_tmpnam();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<define name="__USE_W32API" />
|
||||
<library>ntdll</library>
|
||||
<file>cpp.c</file>
|
||||
<file>dir.c</file>
|
||||
<file>environ.c</file>
|
||||
<file>file.c</file>
|
||||
<file>heap.c</file>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
*
|
||||
* Copyright 2002 Uwe Bonnes
|
||||
* Copyright 2004 Aneurin Price
|
||||
* Copyright 2005 Mike McCormack
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -26,54 +27,439 @@
|
|||
static void test_sprintf( void )
|
||||
{
|
||||
char buffer[100];
|
||||
const char *I64d = "%I64d";
|
||||
const char *O4c = "%04c";
|
||||
const char *O4s = "%04s";
|
||||
const char *hash012p = "%#012p";
|
||||
const char *format;
|
||||
double pnumber=789456123;
|
||||
/** WCHAR widestring[]={'w','i','d','e','s','t','r','i','n','g',0};**/
|
||||
sprintf(buffer,"%+#23.15e",pnumber);
|
||||
todo_wine
|
||||
{
|
||||
ok(strstr(buffer,"e+008") != 0,"Sprintf different \"%s\"\n",buffer);
|
||||
}
|
||||
sprintf(buffer,I64d,((ULONGLONG)0xffffffff)*0xffffffff);
|
||||
todo_wine
|
||||
{
|
||||
ok(strlen(buffer) == 11,"Problem with long long \"%s\"\n",buffer);
|
||||
}
|
||||
sprintf(buffer,"%lld",((ULONGLONG)0xffffffff)*0xffffffff);
|
||||
todo_wine
|
||||
{
|
||||
ok(strlen(buffer) == 1,"Problem with \"ll\" interpretation \"%s\"\n",buffer);
|
||||
}
|
||||
/** This one actually crashes WINE at the moment, when using builtin msvcrt.dll.
|
||||
sprintf(buffer,"%S",widestring);
|
||||
todo_wine
|
||||
{
|
||||
ok(strlen(buffer) == 10,"Problem with \"%%S\" interpretation \"%s\"\n",buffer);
|
||||
}
|
||||
**/
|
||||
sprintf(buffer,O4c,'1');
|
||||
todo_wine
|
||||
{
|
||||
ok(!strcmp(buffer,"0001"),"Character not zero-prefixed \"%s\"\n",buffer);
|
||||
}
|
||||
sprintf(buffer,"%p",(void *)57);
|
||||
todo_wine
|
||||
{
|
||||
ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
|
||||
}
|
||||
sprintf(buffer,hash012p,(void *)57);
|
||||
todo_wine
|
||||
{
|
||||
ok(!strcmp(buffer," 0X00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
|
||||
}
|
||||
sprintf(buffer,O4s,"foo");/**Warning again**/
|
||||
todo_wine
|
||||
{
|
||||
ok(!strcmp(buffer,"0foo"),"String not zero-prefixed \"%s\"\n",buffer);
|
||||
}
|
||||
int x, r;
|
||||
WCHAR wide[] = { 'w','i','d','e',0};
|
||||
|
||||
format = "%+#23.15e";
|
||||
r = sprintf(buffer,format,pnumber);
|
||||
todo_wine {
|
||||
ok(!strcmp(buffer,"+7.894561230000000e+008"),"exponent format incorrect\n");
|
||||
}
|
||||
ok( r==23, "return count wrong\n");
|
||||
|
||||
format = "%I64d";
|
||||
r = sprintf(buffer,format,((ULONGLONG)0xffffffff)*0xffffffff);
|
||||
ok(!strcmp(buffer,"-8589934591"),"Problem with long long\n");
|
||||
ok( r==11, "return count wrong\n");
|
||||
|
||||
format = "%+8I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," +100") && r==8,"+8I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%+.8I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"+00000100") && r==9,"+.8I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%+10.8I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," +00000100") && r==10,"+10.8I64d failed: '%s'\n", buffer);
|
||||
format = "%_1I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"_1I64d") && r==6,"_1I64d failed\n");
|
||||
|
||||
format = "%-1.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-00100") && r==6,"-1.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," 100") && r==5,"5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer," -100") && r==5,"5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%-5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"100 ") && r==5,"-5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%-5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-100 ") && r==5,"-5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%-.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"00100") && r==5,"-.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%-.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-00100") && r==6,"-.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%-8.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"00100 ") && r==8,"-8.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%-8.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-00100 ") && r==8,"-8.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%05I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"00100") && r==5,"05I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%05I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-0100") && r==5,"05I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "% I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," 100") && r==4,"' I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-100") && r==4,"' I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% 5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," 100") && r==5,"' 5I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% 5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer," -100") && r==5,"' 5I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% .5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," 00100") && r==6,"' .5I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% .5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"-00100") && r==6,"' .5I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% 8.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer," 00100") && r==8,"' 8.5I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "% 8.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer," -00100") && r==8,"' 8.5I64d' failed: '%s'\n", buffer);
|
||||
|
||||
format = "%.0I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)0);
|
||||
ok(r==0,".0I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#+21.18I64x";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer," 0x00ffffffffffffff9c") && r==21,"#+21.18I64x failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#.25I64o";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"0001777777777777777777634") && r==25,"#.25I64o failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#+24.20I64o";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer," 01777777777777777777634") && r==24,"#+24.20I64o failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#+18.21I64X";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"0X00000FFFFFFFFFFFFFF9C") && r==23,"#+18.21I64X failed: '%s '\n", buffer);
|
||||
|
||||
format = "%#+20.24I64o";
|
||||
r = sprintf(buffer,format,(LONGLONG)-100);
|
||||
ok(!strcmp(buffer,"001777777777777777777634") && r==24,"#+20.24I64o failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#+25.22I64u";
|
||||
r = sprintf(buffer,format,(LONGLONG)-1);
|
||||
ok(!strcmp(buffer," 0018446744073709551615") && r==25,"#+25.22I64u conversion failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#+25.22I64u";
|
||||
r = sprintf(buffer,format,(LONGLONG)-1);
|
||||
ok(!strcmp(buffer," 0018446744073709551615") && r==25,"#+25.22I64u failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#+30.25I64u";
|
||||
r = sprintf(buffer,format,(LONGLONG)-1);
|
||||
ok(!strcmp(buffer," 0000018446744073709551615") && r==30,"#+30.25I64u failed: '%s'\n", buffer);
|
||||
|
||||
format = "%+#25.22I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)-1);
|
||||
ok(!strcmp(buffer," -0000000000000000000001") && r==25,"+#25.22I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#-8.5I64o";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"00144 ") && r==8,"-8.5I64o failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#-+ 08.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"+00100 ") && r==8,"'#-+ 08.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%#-+ 08.5I64d";
|
||||
r = sprintf(buffer,format,(LONGLONG)100);
|
||||
ok(!strcmp(buffer,"+00100 ") && r==8,"#-+ 08.5I64d failed: '%s'\n", buffer);
|
||||
|
||||
format = "%lld";
|
||||
r = sprintf(buffer,format,((ULONGLONG)0xffffffff)*0xffffffff);
|
||||
ok(!strcmp(buffer, "1"), "Problem with \"ll\" interpretation\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%I";
|
||||
r = sprintf(buffer,format,1);
|
||||
ok(!strcmp(buffer, "I"), "Problem with \"I\" interpretation\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%I0d";
|
||||
r = sprintf(buffer,format,1);
|
||||
ok(!strcmp(buffer,"I0d"),"I0d failed\n");
|
||||
ok( r==3, "return count wrong\n");
|
||||
|
||||
format = "%I32d";
|
||||
r = sprintf(buffer,format,1);
|
||||
ok(!strcmp(buffer,"1"),"I32d failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%I64D";
|
||||
r = sprintf(buffer,format,(LONGLONG)-1);
|
||||
ok(!strcmp(buffer,"D"),"I64D failed: %s\n",buffer);
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "% d";
|
||||
r = sprintf(buffer,format,1);
|
||||
ok(!strcmp(buffer, " 1"),"Problem with sign place-holder: '%s'\n",buffer);
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%+ d";
|
||||
r = sprintf(buffer,format,1);
|
||||
ok(!strcmp(buffer, "+1"),"Problem with sign flags: '%s'\n",buffer);
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%S";
|
||||
r = sprintf(buffer,format,wide);
|
||||
ok(!strcmp(buffer,"wide"),"Problem with wide string format\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%04c";
|
||||
r = sprintf(buffer,format,'1');
|
||||
ok(!strcmp(buffer,"0001"),"Character not zero-prefixed \"%s\"\n",buffer);
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%-04c";
|
||||
r = sprintf(buffer,format,'1');
|
||||
ok(!strcmp(buffer,"1 "),"Character zero-padded and/or not left-adjusted \"%s\"\n",buffer);
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%p";
|
||||
r = sprintf(buffer,format,(void *)57);
|
||||
ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
|
||||
ok( r==8, "return count wrong\n");
|
||||
|
||||
format = "%#012p";
|
||||
r = sprintf(buffer,format,(void *)57);
|
||||
ok(!strcmp(buffer," 0X00000039"),"Pointer formatted incorrectly\n");
|
||||
ok( r==12, "return count wrong\n");
|
||||
|
||||
format = "%Fp";
|
||||
r = sprintf(buffer,format,(void *)57);
|
||||
ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
|
||||
ok( r==8, "return count wrong\n");
|
||||
|
||||
format = "%04s";
|
||||
r = sprintf(buffer,format,"foo");
|
||||
ok(!strcmp(buffer,"0foo"),"String not zero-prefixed \"%s\"\n",buffer);
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%.1s";
|
||||
r = sprintf(buffer,format,"foo");
|
||||
ok(!strcmp(buffer,"f"),"Precision ignored \"%s\"\n",buffer);
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%.*s";
|
||||
r = sprintf(buffer,format,1,"foo");
|
||||
ok(!strcmp(buffer,"f"),"Precision ignored \"%s\"\n",buffer);
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%#-012p";
|
||||
r = sprintf(buffer,format,(void *)57);
|
||||
ok(!strcmp(buffer,"0X00000039 "),"Pointer formatted incorrectly\n");
|
||||
ok( r==12, "return count wrong\n");
|
||||
|
||||
format = "hello";
|
||||
r = sprintf(buffer, format);
|
||||
ok(!strcmp(buffer,"hello"), "failed\n");
|
||||
ok( r==5, "return count wrong\n");
|
||||
|
||||
format = "%ws";
|
||||
r = sprintf(buffer, format, wide);
|
||||
ok(!strcmp(buffer,"wide"), "failed\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%-10ws";
|
||||
r = sprintf(buffer, format, wide );
|
||||
ok(!strcmp(buffer,"wide "), "failed\n");
|
||||
ok( r==10, "return count wrong\n");
|
||||
|
||||
format = "%10ws";
|
||||
r = sprintf(buffer, format, wide );
|
||||
ok(!strcmp(buffer," wide"), "failed\n");
|
||||
ok( r==10, "return count wrong\n");
|
||||
|
||||
format = "%#+ -03whlls";
|
||||
r = sprintf(buffer, format, wide );
|
||||
ok(!strcmp(buffer,"wide"), "failed\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%w0s";
|
||||
r = sprintf(buffer, format, wide );
|
||||
ok(!strcmp(buffer,"0s"), "failed\n");
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%w-s";
|
||||
r = sprintf(buffer, format, wide );
|
||||
ok(!strcmp(buffer,"-s"), "failed\n");
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%ls";
|
||||
r = sprintf(buffer, format, wide );
|
||||
ok(!strcmp(buffer,"wide"), "failed\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%Ls";
|
||||
r = sprintf(buffer, format, "not wide" );
|
||||
ok(!strcmp(buffer,"not wide"), "failed\n");
|
||||
ok( r==8, "return count wrong\n");
|
||||
|
||||
format = "%b";
|
||||
r = sprintf(buffer, format);
|
||||
ok(!strcmp(buffer,"b"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%3c";
|
||||
r = sprintf(buffer, format,'a');
|
||||
ok(!strcmp(buffer," a"), "failed\n");
|
||||
ok( r==3, "return count wrong\n");
|
||||
|
||||
format = "%3d";
|
||||
r = sprintf(buffer, format,1234);
|
||||
ok(!strcmp(buffer,"1234"), "failed\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%3h";
|
||||
r = sprintf(buffer, format);
|
||||
ok(!strcmp(buffer,""), "failed\n");
|
||||
ok( r==0, "return count wrong\n");
|
||||
|
||||
format = "%j%k%m%q%r%t%v%y%z";
|
||||
r = sprintf(buffer, format);
|
||||
ok(!strcmp(buffer,"jkmqrtvyz"), "failed\n");
|
||||
ok( r==9, "return count wrong\n");
|
||||
|
||||
format = "asdf%n";
|
||||
x = 0;
|
||||
r = sprintf(buffer, format, &x );
|
||||
ok(x == 4, "should write to x\n");
|
||||
ok(!strcmp(buffer,"asdf"), "failed\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%-1d";
|
||||
r = sprintf(buffer, format,2);
|
||||
ok(!strcmp(buffer,"2"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%2.4f";
|
||||
r = sprintf(buffer, format,8.6);
|
||||
ok(!strcmp(buffer,"8.6000"), "failed\n");
|
||||
ok( r==6, "return count wrong\n");
|
||||
|
||||
format = "%0f";
|
||||
r = sprintf(buffer, format,0.6);
|
||||
ok(!strcmp(buffer,"0.600000"), "failed\n");
|
||||
ok( r==8, "return count wrong\n");
|
||||
|
||||
format = "%.0f";
|
||||
r = sprintf(buffer, format,0.6);
|
||||
ok(!strcmp(buffer,"1"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
todo_wine {
|
||||
format = "%2.4e";
|
||||
r = sprintf(buffer, format,8.6);
|
||||
ok(!strcmp(buffer,"8.6000e+000"), "failed\n");
|
||||
ok( r==11, "return count wrong\n");
|
||||
}
|
||||
|
||||
format = "%2.4g";
|
||||
r = sprintf(buffer, format,8.6);
|
||||
ok(!strcmp(buffer,"8.6"), "failed\n");
|
||||
ok( r==3, "return count wrong\n");
|
||||
|
||||
format = "%-i";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,"-1"), "failed\n");
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%-i";
|
||||
r = sprintf(buffer, format,1);
|
||||
ok(!strcmp(buffer,"1"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%+i";
|
||||
r = sprintf(buffer, format,1);
|
||||
ok(!strcmp(buffer,"+1"), "failed\n");
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%o";
|
||||
r = sprintf(buffer, format,10);
|
||||
ok(!strcmp(buffer,"12"), "failed\n");
|
||||
ok( r==2, "return count wrong\n");
|
||||
|
||||
format = "%p";
|
||||
r = sprintf(buffer, format,0);
|
||||
ok(!strcmp(buffer,"00000000"), "failed\n");
|
||||
ok( r==8, "return count wrong\n");
|
||||
|
||||
format = "%s";
|
||||
r = sprintf(buffer, format,0);
|
||||
ok(!strcmp(buffer,"(null)"), "failed\n");
|
||||
ok( r==6, "return count wrong\n");
|
||||
|
||||
format = "%s";
|
||||
r = sprintf(buffer, format,"%%%%");
|
||||
ok(!strcmp(buffer,"%%%%"), "failed\n");
|
||||
ok( r==4, "return count wrong\n");
|
||||
|
||||
format = "%u";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,"4294967295"), "failed\n");
|
||||
ok( r==10, "return count wrong\n");
|
||||
|
||||
format = "%w";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,""), "failed\n");
|
||||
ok( r==0, "return count wrong\n");
|
||||
|
||||
format = "%h";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,""), "failed\n");
|
||||
ok( r==0, "return count wrong\n");
|
||||
|
||||
format = "%z";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,"z"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%j";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,"j"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "%F";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,""), "failed\n");
|
||||
ok( r==0, "return count wrong\n");
|
||||
|
||||
format = "%H";
|
||||
r = sprintf(buffer, format,-1);
|
||||
ok(!strcmp(buffer,"H"), "failed\n");
|
||||
ok( r==1, "return count wrong\n");
|
||||
|
||||
format = "x%cx";
|
||||
r = sprintf(buffer, format, 0x100+'X');
|
||||
ok(!strcmp(buffer,"xXx"), "failed\n");
|
||||
ok( r==3, "return count wrong\n");
|
||||
|
||||
format = "%%0";
|
||||
r = sprintf(buffer, format);
|
||||
ok(!strcmp(buffer,"%0"), "failed: \"%s\"\n", buffer);
|
||||
ok( r==2, "return count wrong\n");
|
||||
}
|
||||
|
||||
static void test_swprintf( void )
|
||||
|
@ -91,10 +477,7 @@ static void test_swprintf( void )
|
|||
ok(wcsstr(buffer,e008) != 0,"Sprintf different\n");
|
||||
}
|
||||
swprintf(buffer,I64d,((ULONGLONG)0xffffffff)*0xffffffff);
|
||||
todo_wine
|
||||
{
|
||||
ok(wcslen(buffer) == 11,"Problem with long long\n");
|
||||
}
|
||||
ok(wcslen(buffer) == 11,"Problem with long long\n");
|
||||
swprintf(buffer,S,string);
|
||||
ok(wcslen(buffer) == 6,"Problem with \"%%S\" interpretation\n");
|
||||
}
|
||||
|
@ -113,16 +496,12 @@ static void test_snprintf (void)
|
|||
struct snprintf_test {
|
||||
const char *format;
|
||||
int expected;
|
||||
struct {
|
||||
int retval;
|
||||
int render;
|
||||
} todo;
|
||||
};
|
||||
/* Pre-2.1 libc behaviour, not C99 compliant. */
|
||||
const struct snprintf_test tests[] = {{"short", 5, {0, 0}},
|
||||
{"justfit", 7, {0, 0}},
|
||||
{"justfits", 8, {0, 1}},
|
||||
{"muchlonger", -1, {1, 1}}};
|
||||
const struct snprintf_test tests[] = {{"short", 5},
|
||||
{"justfit", 7},
|
||||
{"justfits", 8},
|
||||
{"muchlonger", -1}};
|
||||
char buffer[8];
|
||||
const int bufsiz = sizeof buffer;
|
||||
unsigned int i;
|
||||
|
@ -133,19 +512,66 @@ static void test_snprintf (void)
|
|||
const int n = _snprintf (buffer, bufsiz, fmt);
|
||||
const int valid = n < 0 ? bufsiz : (n == bufsiz ? n : n+1);
|
||||
|
||||
todo (tests[i].todo.retval ? "wine" : "none")
|
||||
ok (n == expect, "\"%s\": expected %d, returned %d\n",
|
||||
fmt, expect, n);
|
||||
todo (tests[i].todo.render ? "wine" : "none")
|
||||
ok (!memcmp (fmt, buffer, valid),
|
||||
"\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
|
||||
ok (n == expect, "\"%s\": expected %d, returned %d\n",
|
||||
fmt, expect, n);
|
||||
ok (!memcmp (fmt, buffer, valid),
|
||||
"\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
|
||||
};
|
||||
}
|
||||
|
||||
static void test_fcvt(void)
|
||||
{
|
||||
char *str;
|
||||
int dec=100, sign=100;
|
||||
|
||||
str = _fcvt(0.0001, 1, &dec, &sign );
|
||||
todo_wine {
|
||||
ok( 0 == strcmp(str,""), "bad return\n");
|
||||
ok( -3 == dec, "dec wrong\n");
|
||||
}
|
||||
ok( 0 == sign, "dec wrong\n");
|
||||
|
||||
str = _fcvt(0.0001, -10, &dec, &sign );
|
||||
todo_wine {
|
||||
ok( 0 == strcmp(str,""), "bad return\n");
|
||||
ok( -3 == dec, "dec wrong\n");
|
||||
}
|
||||
ok( 0 == sign, "dec wrong\n");
|
||||
|
||||
str = _fcvt(0.0001, 10, &dec, &sign );
|
||||
todo_wine {
|
||||
ok( 0 == strcmp(str,"1000000"), "bad return\n");
|
||||
ok( -3 == dec, "dec wrong\n");
|
||||
}
|
||||
ok( 0 == sign, "dec wrong\n");
|
||||
|
||||
str = _fcvt(-111.0001, 5, &dec, &sign );
|
||||
todo_wine {
|
||||
ok( 0 == strcmp(str,"11100010"), "bad return\n");
|
||||
ok( 3 == dec, "dec wrong\n");
|
||||
}
|
||||
ok( 1 == sign, "dec wrong\n");
|
||||
|
||||
str = _fcvt(111.0001, 5, &dec, &sign );
|
||||
todo_wine {
|
||||
ok( 0 == strcmp(str,"11100010"), "bad return\n");
|
||||
ok( 3 == dec, "dec wrong\n");
|
||||
}
|
||||
ok( 0 == sign, "dec wrong\n");
|
||||
|
||||
str = _fcvt(0.0, 5, &dec, &sign );
|
||||
todo_wine {
|
||||
ok( 0 == strcmp(str,"00000"), "bad return\n");
|
||||
ok( 0 == dec, "dec wrong\n");
|
||||
}
|
||||
ok( 0 == sign, "dec wrong\n");
|
||||
}
|
||||
|
||||
START_TEST(printf)
|
||||
{
|
||||
test_sprintf();
|
||||
test_swprintf();
|
||||
test_fwprintf();
|
||||
test_snprintf();
|
||||
test_fcvt();
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ static void test_sscanf( void )
|
|||
char buffer[100], buffer1[100];
|
||||
char format[20];
|
||||
int result, ret;
|
||||
char c;
|
||||
float res1= -82.6267f, res2= 27.76f, res11, res12;
|
||||
static const char pname[]=" St. Petersburg, Florida\n";
|
||||
int hour=21,min=59,sec=20;
|
||||
|
@ -90,11 +91,40 @@ static void test_sscanf( void )
|
|||
/* Check %i according to bug 1878 */
|
||||
strcpy(buffer,"123");
|
||||
ret = sscanf(buffer, "%i", &result);
|
||||
ok( ret == 1 , "Wrong number of arguments read\n");
|
||||
ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
|
||||
ok(result == 123, "Wrong number read\n");
|
||||
ret = sscanf(buffer, "%d", &result);
|
||||
ok( ret == 1 , "Wrong number of arguments read\n");
|
||||
ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
|
||||
ok(result == 123, "Wrong number read\n");
|
||||
|
||||
/* Check %c */
|
||||
strcpy(buffer,"a");
|
||||
c = 0x55;
|
||||
ret = sscanf(buffer, "%c", &c);
|
||||
ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
|
||||
ok(c == 'a', "Field incorrect: '%c'\n", c);
|
||||
|
||||
strcpy(buffer," a");
|
||||
c = 0x55;
|
||||
ret = sscanf(buffer, "%c", &c);
|
||||
ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
|
||||
ok(c == ' ', "Field incorrect: '%c'\n", c);
|
||||
|
||||
strcpy(buffer,"18:59");
|
||||
c = 0x55;
|
||||
ret = sscanf(buffer, "%d:%d%c", &hour, &min, &c);
|
||||
ok(ret == 2, "Wrong number of arguments read: %d\n", ret);
|
||||
ok(hour == 18, "Field 1 incorrect: %d\n", hour);
|
||||
ok(min == 59, "Field 2 incorrect: %d\n", min);
|
||||
ok(c == 0x55, "Field 3 incorrect: 0x%02x\n", c);
|
||||
|
||||
/* Check %n (also whitespace in format strings and %s) */
|
||||
buffer[0]=0; buffer1[0]=0;
|
||||
ret = sscanf("abc def", "%s %n%s", buffer, &number_so_far, buffer1);
|
||||
ok(strcmp(buffer, "abc")==0, "First %%s read incorrectly: %s\n", buffer);
|
||||
ok(strcmp(buffer1,"def")==0, "Second %%s read incorrectly: %s\n", buffer1);
|
||||
ok(number_so_far==6, "%%n yielded wrong result: %d\n", number_so_far);
|
||||
ok(ret == 2, "%%n shouldn't count as a conversion: %d\n", ret);
|
||||
}
|
||||
|
||||
START_TEST(scanf)
|
||||
|
|
|
@ -21,7 +21,9 @@
|
|||
#include "wine/test.h"
|
||||
#include "winbase.h"
|
||||
#include <string.h>
|
||||
#include <mbstring.h>
|
||||
#include <stdlib.h>
|
||||
#include <mbctype.h>
|
||||
|
||||
static void* (*pmemcpy)(void *, const void *, size_t n);
|
||||
static int* (*pmemcmp)(void *, const void *, size_t n);
|
||||
|
@ -29,6 +31,73 @@ static int* (*pmemcmp)(void *, const void *, size_t n);
|
|||
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y)
|
||||
#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y)
|
||||
|
||||
static void test_swab( void ) {
|
||||
char original[] = "BADCFEHGJILKNMPORQTSVUXWZY@#";
|
||||
char expected1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ@#";
|
||||
char expected2[] = "ABCDEFGHIJKLMNOPQRSTUVWX$";
|
||||
char expected3[] = "$";
|
||||
|
||||
char from[30];
|
||||
char to[30];
|
||||
|
||||
int testsize;
|
||||
|
||||
/* Test 1 - normal even case */
|
||||
memset(to,'$', sizeof(to));
|
||||
memset(from,'@', sizeof(from));
|
||||
testsize = 26;
|
||||
memcpy(from, original, testsize);
|
||||
_swab( from, to, testsize );
|
||||
ok(memcmp(to,expected1,testsize) == 0, "Testing even size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
|
||||
|
||||
/* Test 2 - uneven case */
|
||||
memset(to,'$', sizeof(to));
|
||||
memset(from,'@', sizeof(from));
|
||||
testsize = 25;
|
||||
memcpy(from, original, testsize);
|
||||
_swab( from, to, testsize );
|
||||
ok(memcmp(to,expected2,testsize) == 0, "Testing odd size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
|
||||
|
||||
/* Test 3 - from = to */
|
||||
memset(to,'$', sizeof(to));
|
||||
memset(from,'@', sizeof(from));
|
||||
testsize = 26;
|
||||
memcpy(to, original, testsize);
|
||||
_swab( to, to, testsize );
|
||||
ok(memcmp(to,expected1,testsize) == 0, "Testing overlapped size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
|
||||
|
||||
/* Test 4 - 1 bytes */
|
||||
memset(to,'$', sizeof(to));
|
||||
memset(from,'@', sizeof(from));
|
||||
testsize = 1;
|
||||
memcpy(from, original, testsize);
|
||||
_swab( from, to, testsize );
|
||||
ok(memcmp(to,expected3,testsize) == 0, "Testing small size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
|
||||
}
|
||||
|
||||
void test_ismbblead(void)
|
||||
{
|
||||
unsigned int s = '\354';
|
||||
|
||||
_setmbcp(936);
|
||||
todo_wine ok(_ismbblead(s), "got result %d\n", _ismbblead(s));
|
||||
_setmbcp(1252);
|
||||
}
|
||||
|
||||
static void test_mbsspn( void)
|
||||
{
|
||||
unsigned char str1[]="cabernet";
|
||||
unsigned char str2[]="shiraz";
|
||||
unsigned char set[]="abc";
|
||||
unsigned char empty[]="";
|
||||
int ret;
|
||||
ret=_mbsspn( str1, set);
|
||||
ok( ret==3, "_mbsspn returns %d should be 3\n", ret);
|
||||
ret=_mbsspn( str2, set);
|
||||
ok( ret==0, "_mbsspn returns %d should be 0\n", ret);
|
||||
ret=_mbsspn( str1, empty);
|
||||
ok( ret==0, "_mbsspn returns %d should be 0\n", ret);
|
||||
}
|
||||
|
||||
START_TEST(string)
|
||||
{
|
||||
|
@ -48,4 +117,12 @@ START_TEST(string)
|
|||
pmemcpy((char*)mem+5, mem,nLen+1);
|
||||
ok(pmemcmp((char*)mem+5,xilstring, nLen) == 0,
|
||||
"Got result %s\n",(char*)mem+5);
|
||||
|
||||
/* Test _swab function */
|
||||
test_swab();
|
||||
|
||||
/* Test ismbblead*/
|
||||
test_ismbblead();
|
||||
/* test _mbsspn */
|
||||
test_mbsspn();
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "winbase.h"
|
||||
|
||||
extern void func_cpp(void);
|
||||
extern void func_dir(void);
|
||||
extern void func_environ(void);
|
||||
extern void func_file(void);
|
||||
extern void func_heap(void);
|
||||
|
@ -25,6 +26,7 @@ struct test
|
|||
static const struct test winetest_testlist[] =
|
||||
{
|
||||
{ "cpp", func_cpp },
|
||||
{ "dir", func_dir },
|
||||
{ "environ", func_environ },
|
||||
{ "file", func_file },
|
||||
{ "heap", func_heap },
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define MINSPERHOUR 60
|
||||
#define HOURSPERDAY 24
|
||||
|
||||
static void test_gmtime()
|
||||
static void test_gmtime(void)
|
||||
{
|
||||
time_t gmt = (time_t)NULL;
|
||||
struct tm* gmt_tm = gmtime(&gmt);
|
||||
|
@ -48,7 +48,7 @@ static void test_gmtime()
|
|||
gmt_tm->tm_hour, gmt_tm->tm_min, gmt_tm->tm_sec, gmt_tm->tm_isdst);
|
||||
|
||||
}
|
||||
static void test_mktime()
|
||||
static void test_mktime(void)
|
||||
{
|
||||
TIME_ZONE_INFORMATION tzinfo;
|
||||
DWORD res = GetTimeZoneInformation(&tzinfo);
|
||||
|
@ -146,7 +146,7 @@ static void test_mktime()
|
|||
ok(((DWORD)nulltime == SECSPERDAY),"mktime returned 0x%08lx\n",(DWORD)nulltime);
|
||||
putenv(TZ_env);
|
||||
}
|
||||
static void test_localtime()
|
||||
static void test_localtime(void)
|
||||
{
|
||||
TIME_ZONE_INFORMATION tzinfo;
|
||||
DWORD res = GetTimeZoneInformation(&tzinfo);
|
||||
|
@ -179,11 +179,64 @@ static void test_localtime()
|
|||
lt->tm_min, lt->tm_sec, lt->tm_isdst);
|
||||
putenv(TZ_env);
|
||||
}
|
||||
static void test_strdate(void)
|
||||
{
|
||||
char date[16], * result;
|
||||
int month, day, year, count, len;
|
||||
|
||||
result = _strdate(date);
|
||||
ok(result == date, "Wrong return value\n");
|
||||
len = strlen(date);
|
||||
ok(len == 8, "Wrong length: returned %d, should be 8\n", len);
|
||||
count = sscanf(date, "%02d/%02d/%02d", &month, &day, &year);
|
||||
ok(count == 3, "Wrong format: count = %d, should be 3\n", count);
|
||||
}
|
||||
static void test_strtime(void)
|
||||
{
|
||||
char time[16], * result;
|
||||
int hour, minute, second, count, len;
|
||||
|
||||
result = _strtime(time);
|
||||
ok(result == time, "Wrong return value\n");
|
||||
len = strlen(time);
|
||||
ok(len == 8, "Wrong length: returned %d, should be 8\n", len);
|
||||
count = sscanf(time, "%02d:%02d:%02d", &hour, &minute, &second);
|
||||
ok(count == 3, "Wrong format: count = %d, should be 3\n", count);
|
||||
}
|
||||
static void test_wstrdate(void)
|
||||
{
|
||||
wchar_t date[16], * result;
|
||||
int month, day, year, count, len;
|
||||
wchar_t format[] = { '%','0','2','d','/','%','0','2','d','/','%','0','2','d',0 };
|
||||
|
||||
result = _wstrdate(date);
|
||||
ok(result == date, "Wrong return value\n");
|
||||
len = wcslen(date);
|
||||
ok(len == 8, "Wrong length: returned %d, should be 8\n", len);
|
||||
count = swscanf(date, format, &month, &day, &year);
|
||||
ok(count == 3, "Wrong format: count = %d, should be 3\n", count);
|
||||
}
|
||||
static void test_wstrtime(void)
|
||||
{
|
||||
wchar_t time[16], * result;
|
||||
int hour, minute, second, count, len;
|
||||
wchar_t format[] = { '%','0','2','d',':','%','0','2','d',':','%','0','2','d',0 };
|
||||
|
||||
result = _wstrtime(time);
|
||||
ok(result == time, "Wrong return value\n");
|
||||
len = wcslen(time);
|
||||
ok(len == 8, "Wrong length: returned %d, should be 8\n", len);
|
||||
count = swscanf(time, format, &hour, &minute, &second);
|
||||
ok(count == 3, "Wrong format: count = %d, should be 3\n", count);
|
||||
}
|
||||
|
||||
START_TEST(time)
|
||||
{
|
||||
test_gmtime();
|
||||
test_mktime();
|
||||
test_localtime();
|
||||
test_strdate();
|
||||
test_strtime();
|
||||
test_wstrdate();
|
||||
test_wstrtime();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue