⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtlstr.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 5 页
字号:
    STRING ascii_str;    STRING result_str;    STRING upper_str;    for (i = 0; i <= 255; i++) {	ch = (CHAR) i;	if (ch >= 'a' && ch <= 'z') {	    upper_ch = ch - 'a' + 'A';	} else {	    upper_ch = ch;	}	ascii_buf[i] = ch;	result_buf[i] = '\0';	upper_buf[i] = upper_ch;    } /* for */    ascii_buf[i] = '\0';    result_buf[i] = '\0';    upper_buf[i] = '\0';    ascii_str.Length = 256;    ascii_str.MaximumLength = 256;    ascii_str.Buffer = ascii_buf;    result_str.Length = 256;    result_str.MaximumLength = 256;    result_str.Buffer = result_buf;    upper_str.Length = 256;    upper_str.MaximumLength = 256;    upper_str.Buffer = upper_buf;    pRtlUpperString(&result_str, &ascii_str);    ok(memcmp(result_str.Buffer, upper_str.Buffer, 256) == 0,       "RtlUpperString does not work as expected");}static void test_RtlUpcaseUnicodeChar(void){    int i;    WCHAR ch;    WCHAR upper_ch;    WCHAR expected_upper_ch;    for (i = 0; i <= 255; i++) {	ch = (WCHAR) i;	upper_ch = pRtlUpcaseUnicodeChar(ch);	if (ch >= 'a' && ch <= 'z') {	    expected_upper_ch = ch - 'a' + 'A';	} else if (ch >= 0xe0 && ch <= 0xfe && ch != 0xf7) {	    expected_upper_ch = ch - 0x20;	} else if (ch == 0xff) {	    expected_upper_ch = 0x178;	} else {	    expected_upper_ch = ch;	} /* if */	ok(upper_ch == expected_upper_ch,	   "RtlUpcaseUnicodeChar('%c'[=0x%x]) has result '%c'[=0x%x], expected: '%c'[=0x%x]",	   ch, ch, upper_ch, upper_ch, expected_upper_ch, expected_upper_ch);    } /* for */}static void test_RtlUpcaseUnicodeString(void){    int i;    WCHAR ch;    WCHAR upper_ch;    WCHAR ascii_buf[257];    WCHAR result_buf[257];    WCHAR upper_buf[257];    UNICODE_STRING ascii_str;    UNICODE_STRING result_str;    UNICODE_STRING upper_str;    for (i = 0; i <= 255; i++) {	ch = (WCHAR) i;	if (ch >= 'a' && ch <= 'z') {	    upper_ch = ch - 'a' + 'A';	} else if (ch >= 0xe0 && ch <= 0xfe && ch != 0xf7) {	    upper_ch = ch - 0x20;	} else if (ch == 0xff) {	    upper_ch = 0x178;	} else {	    upper_ch = ch;	} /* if */	ascii_buf[i] = ch;	result_buf[i] = '\0';	upper_buf[i] = upper_ch;    } /* for */    ascii_buf[i] = '\0';    result_buf[i] = '\0';    upper_buf[i] = '\0';    ascii_str.Length = 512;    ascii_str.MaximumLength = 512;    ascii_str.Buffer = ascii_buf;    result_str.Length = 512;    result_str.MaximumLength = 512;    result_str.Buffer = result_buf;    upper_str.Length = 512;    upper_str.MaximumLength = 512;    upper_str.Buffer = upper_buf;    pRtlUpcaseUnicodeString(&result_str, &ascii_str, 0);    for (i = 0; i <= 255; i++) {	ok(result_str.Buffer[i] == upper_str.Buffer[i],	   "RtlUpcaseUnicodeString works wrong: '%c'[=0x%x] is converted to '%c'[=0x%x], expected: '%c'[=0x%x]",	   ascii_str.Buffer[i], ascii_str.Buffer[i],	   result_str.Buffer[i], result_str.Buffer[i],	   upper_str.Buffer[i], upper_str.Buffer[i]);    } /* for */}static void test_RtlDowncaseUnicodeString(void){    int i;    WCHAR ch;    WCHAR lower_ch;    WCHAR source_buf[1025];    WCHAR result_buf[1025];    WCHAR lower_buf[1025];    UNICODE_STRING source_str;    UNICODE_STRING result_str;    UNICODE_STRING lower_str;    for (i = 0; i <= 1024; i++) {	ch = (WCHAR) i;	if (ch >= 'A' && ch <= 'Z') {	    lower_ch = ch - 'A' + 'a';	} else if (ch >= 0xc0 && ch <= 0xde && ch != 0xd7) {	    lower_ch = ch + 0x20;	} else if (ch >= 0x391 && ch <= 0x3ab && ch != 0x3a2) {	    lower_ch = ch + 0x20;	} else {	    switch (ch) {		case 0x178: lower_ch = 0xff; break;		case 0x181: lower_ch = 0x253; break;		case 0x186: lower_ch = 0x254; break;		case 0x189: lower_ch = 0x256; break;		case 0x18a: lower_ch = 0x257; break;		case 0x18e: lower_ch = 0x1dd; break;		case 0x18f: lower_ch = 0x259; break;		case 0x190: lower_ch = 0x25b; break;		case 0x193: lower_ch = 0x260; break;		case 0x194: lower_ch = 0x263; break;		case 0x196: lower_ch = 0x269; break;		case 0x197: lower_ch = 0x268; break;		case 0x19c: lower_ch = 0x26f; break;		case 0x19d: lower_ch = 0x272; break;		case 0x19f: lower_ch = 0x275; break;		case 0x1a9: lower_ch = 0x283; break;		case 0x1ae: lower_ch = 0x288; break;		case 0x1b1: lower_ch = 0x28a; break;		case 0x1b2: lower_ch = 0x28b; break;		case 0x1b7: lower_ch = 0x292; break;		case 0x1c4: lower_ch = 0x1c6; break;		case 0x1c7: lower_ch = 0x1c9; break;		case 0x1ca: lower_ch = 0x1cc; break;		case 0x1f1: lower_ch = 0x1f3; break;		case 0x386: lower_ch = 0x3ac; break;		case 0x388: lower_ch = 0x3ad; break;		case 0x389: lower_ch = 0x3ae; break;		case 0x38a: lower_ch = 0x3af; break;		case 0x38c: lower_ch = 0x3cc; break;		case 0x38e: lower_ch = 0x3cd; break;		case 0x38f: lower_ch = 0x3ce; break;		case 0x400: lower_ch = 0x0; break;		default: lower_ch = ch; break;	    } /* switch */	} /* if */	source_buf[i] = ch;	result_buf[i] = '\0';	lower_buf[i] = lower_ch;    } /* for */    source_buf[i] = '\0';    result_buf[i] = '\0';    lower_buf[i] = '\0';    source_str.Length = 2048;    source_str.MaximumLength = 2048;    source_str.Buffer = source_buf;    result_str.Length = 2048;    result_str.MaximumLength = 2048;    result_str.Buffer = result_buf;    lower_str.Length = 2048;    lower_str.MaximumLength = 2048;    lower_str.Buffer = lower_buf;    pRtlDowncaseUnicodeString(&result_str, &source_str, 0);    for (i = 0; i <= 1024; i++) {	ok(result_str.Buffer[i] == lower_str.Buffer[i] || result_str.Buffer[i] == source_str.Buffer[i] + 1,	   "RtlDowncaseUnicodeString works wrong: '%c'[=0x%x] is converted to '%c'[=0x%x], expected: '%c'[=0x%x]",	   source_str.Buffer[i], source_str.Buffer[i],	   result_str.Buffer[i], result_str.Buffer[i],	   lower_str.Buffer[i], lower_str.Buffer[i]);    } /* for */}typedef struct {    int ansi_Length;    int ansi_MaximumLength;    int ansi_buf_size;    const char *ansi_buf;    int uni_Length;    int uni_MaximumLength;    int uni_buf_size;    const char *uni_buf;    BOOLEAN doalloc;    int res_Length;    int res_MaximumLength;    int res_buf_size;    const char *res_buf;    NTSTATUS result;} ustr2astr_t;static const ustr2astr_t ustr2astr[] = {    { 10, 12, 12, "------------",  0,  0,  0, "",       TRUE,  0, 1, 1, "",       STATUS_SUCCESS},    { 10, 12, 12, "------------", 12, 12, 12, "abcdef", TRUE,  6, 7, 7, "abcdef", STATUS_SUCCESS},    {  0,  2, 12, "------------", 12, 12, 12, "abcdef", TRUE,  6, 7, 7, "abcdef", STATUS_SUCCESS},    { 10, 12, 12, NULL,           12, 12, 12, "abcdef", TRUE,  6, 7, 7, "abcdef", STATUS_SUCCESS},    {  0,  0, 12, "------------", 12, 12, 12, "abcdef", FALSE, 6, 0, 0, "",       STATUS_BUFFER_OVERFLOW},    {  0,  1, 12, "------------", 12, 12, 12, "abcdef", FALSE, 0, 1, 1, "",       STATUS_BUFFER_OVERFLOW},    {  0,  2, 12, "------------", 12, 12, 12, "abcdef", FALSE, 1, 2, 2, "a",      STATUS_BUFFER_OVERFLOW},    {  0,  3, 12, "------------", 12, 12, 12, "abcdef", FALSE, 2, 3, 3, "ab",     STATUS_BUFFER_OVERFLOW},    {  0,  5, 12, "------------", 12, 12, 12, "abcdef", FALSE, 4, 5, 5, "abcd",   STATUS_BUFFER_OVERFLOW},    {  8,  5, 12, "------------", 12, 12, 12, "abcdef", FALSE, 4, 5, 5, "abcd",   STATUS_BUFFER_OVERFLOW},    {  8,  6, 12, "------------", 12, 12, 12, "abcdef", FALSE, 5, 6, 6, "abcde",  STATUS_BUFFER_OVERFLOW},    {  8,  7, 12, "------------", 12, 12, 12, "abcdef", FALSE, 6, 7, 7, "abcdef", STATUS_SUCCESS},    {  8,  7, 12, "------------",  0, 12, 12,  NULL,    FALSE, 0, 7, 0, "",       STATUS_SUCCESS},    {  0,  0, 12, NULL,           10, 10, 12,  NULL,    FALSE, 5, 0, 0, NULL,     STATUS_BUFFER_OVERFLOW},};#define NB_USTR2ASTR (sizeof(ustr2astr)/sizeof(*ustr2astr))static void test_RtlUnicodeStringToAnsiString(void){    size_t pos;    CHAR ansi_buf[257];    WCHAR uni_buf[257];    STRING ansi_str;    UNICODE_STRING uni_str;    NTSTATUS result;    size_t test_num;    for (test_num = 0; test_num < NB_USTR2ASTR; test_num++) {	ansi_str.Length        = ustr2astr[test_num].ansi_Length;	ansi_str.MaximumLength = ustr2astr[test_num].ansi_MaximumLength;	if (ustr2astr[test_num].ansi_buf != NULL) {	    memcpy(ansi_buf, ustr2astr[test_num].ansi_buf, ustr2astr[test_num].ansi_buf_size);	    ansi_buf[ustr2astr[test_num].ansi_buf_size] = '\0';	    ansi_str.Buffer = ansi_buf;	} else {	    ansi_str.Buffer = NULL;	} /* if */	uni_str.Length        = ustr2astr[test_num].uni_Length;	uni_str.MaximumLength = ustr2astr[test_num].uni_MaximumLength;	if (ustr2astr[test_num].uni_buf != NULL) {	    for (pos = 0; pos < ustr2astr[test_num].uni_buf_size/sizeof(WCHAR); pos++) {		uni_buf[pos] = ustr2astr[test_num].uni_buf[pos];	    } /* for */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -