ICU-2256 Deprecate %K and %U. Replace with %C and %S

X-SVN-Rev: 13214
This commit is contained in:
George Rhoten 2003-09-25 21:14:35 +00:00
parent 510eec40ad
commit d200f4a8e5
5 changed files with 96 additions and 161 deletions

View file

@ -73,9 +73,9 @@
#define UFMT_SPELLOUT {ufmt_double, u_scanf_spellout_handler}
/* P */
#define UFMT_PERCENT {ufmt_double, u_scanf_percent_handler}
/* K */
/* C K is old format */
#define UFMT_UCHAR {ufmt_uchar, u_scanf_uchar_handler}
/* U */
/* S U is old format */
#define UFMT_USTRING {ufmt_ustring, u_scanf_ustring_handler}
@ -889,14 +889,14 @@ static const u_sscanf_info g_u_sscanf_infos[USCANF_NUM_FMT_HANDLERS] = {
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
/* 0x40 */
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_SCIENTIFIC, UFMT_EMPTY, UFMT_SCIDBL,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_UCHAR,
UFMT_EMPTY, UFMT_SCIENTIFIC, UFMT_EMPTY, UFMT_SCIDBL,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_UCHAR/*deprecated*/,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
/* 0x50 */
UFMT_PERCENT, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_USTRING, UFMT_SPELLOUT, UFMT_EMPTY,
UFMT_PERCENT, UFMT_EMPTY, UFMT_EMPTY, UFMT_USTRING,
UFMT_EMPTY, UFMT_USTRING/*deprecated*/,UFMT_SPELLOUT, UFMT_EMPTY,
UFMT_HEX, UFMT_EMPTY, UFMT_EMPTY, UFMT_SCANSET,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
@ -972,50 +972,23 @@ u_vsscanf_u(const UChar *buffer,
if(info > ufmt_simple_percent) {
switch(info) {
case ufmt_char:
case ufmt_uchar:
case ufmt_int:
case ufmt_string:
case ufmt_ustring:
case ufmt_pointer:
case ufmt_float:
case ufmt_double:
args.ptrValue = va_arg(ap, void*);
break;
case ufmt_count:
args.intValue = va_arg(ap, int);
/* set the spec's width to the # of items converted */
spec.fInfo.fWidth = converted;
break;
case ufmt_char:
case ufmt_uchar:
case ufmt_int:
args.ptrValue = va_arg(ap, int*);
break;
case ufmt_wchar:
args.ptrValue = va_arg(ap, wchar_t*);
break;
case ufmt_string:
args.ptrValue = va_arg(ap, char*);
break;
case ufmt_wstring:
args.ptrValue = va_arg(ap, wchar_t*);
break;
case ufmt_pointer:
args.ptrValue = va_arg(ap, void*);
break;
case ufmt_float:
args.ptrValue = va_arg(ap, float*);
break;
case ufmt_double:
args.ptrValue = va_arg(ap, double*);
break;
case ufmt_date:
args.ptrValue = va_arg(ap, UDate*);
break;
case ufmt_ustring:
args.ptrValue = va_arg(ap, UChar*);
break;
default:
break; /* Should never get here */
}
@ -1052,3 +1025,4 @@ u_vsscanf_u(const UChar *buffer,
}
#endif /* #if !UCONFIG_NO_FORMATTING */

View file

@ -31,21 +31,21 @@
*/
enum ufmt_type_info
{
ufmt_empty = 0,
ufmt_simple_percent, /* %% do nothing */
ufmt_count, /* special flag for count */
ufmt_int, /* int */
ufmt_char, /* int, cast to char */
ufmt_wchar, /* wchar_t */
ufmt_string, /* char* */
ufmt_wstring, /* wchar_t* */
ufmt_pointer, /* void* */
ufmt_float, /* float */
ufmt_double, /* double */
ufmt_date, /* Date */
ufmt_uchar, /* int, cast to UChar */
ufmt_ustring, /* UChar* */
ufmt_last
ufmt_empty = 0,
ufmt_simple_percent, /* %% do nothing */
ufmt_count, /* special flag for count */
ufmt_int, /* int */
ufmt_char, /* int, cast to char */
ufmt_string, /* char* */
ufmt_pointer, /* void* */
ufmt_float, /* float */
ufmt_double, /* double */
ufmt_uchar, /* int, cast to UChar */
ufmt_ustring, /* UChar* */
/*ufmt_wchar,*/ /* wchar_t */
/*ufmt_wstring,*/ /* wchar_t* */
/*ufmt_date,*/ /* Date */
ufmt_last
};
typedef enum ufmt_type_info ufmt_type_info;
@ -53,12 +53,12 @@ typedef enum ufmt_type_info ufmt_type_info;
* Union representing a uprintf/uscanf argument
*/
union ufmt_args {
signed int intValue; /* int, UChar */ /* TODO: Should int32_t be used instead of int? */
float floatValue; /* float */
double doubleValue; /* double */
void *ptrValue; /* any pointer - void*, char*, wchar_t*, UChar* */
wchar_t wcharValue; /* wchar_t */ /* TODO: Should wchar_t be used? */
UDate dateValue; /* Date */
signed int intValue; /* int, UChar */ /* TODO: Should int32_t be used instead of int? */
float floatValue; /* float */
double doubleValue; /* double */
void *ptrValue; /* any pointer - void*, char*, wchar_t*, UChar* */
/*wchar_t wcharValue;*/ /* wchar_t */ /* TODO: Should wchar_t be used? */
/*UDate dateValue;*/ /* Date */
};
typedef union ufmt_args ufmt_args;

View file

@ -62,9 +62,9 @@
#define UFMT_SPELLOUT {ufmt_double, u_printf_spellout_handler}
/* P */
#define UFMT_PERCENT {ufmt_double, u_printf_percent_handler}
/* K */
/* C K is old format */
#define UFMT_UCHAR {ufmt_uchar, u_printf_uchar_handler}
/* U */
/* S U is old format */
#define UFMT_USTRING {ufmt_ustring, u_printf_ustring_handler}
@ -897,14 +897,14 @@ static const u_printf_info g_u_printf_infos[UPRINTF_NUM_FMT_HANDLERS] = {
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
/* 0x40 */
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_SCIENTIFIC, UFMT_EMPTY, UFMT_SCIDBL,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_UCHAR,
UFMT_EMPTY, UFMT_SCIENTIFIC, UFMT_EMPTY, UFMT_SCIDBL,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_UCHAR/*deprecated*/,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
/* 0x50 */
UFMT_PERCENT, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_USTRING, UFMT_SPELLOUT, UFMT_EMPTY,
UFMT_PERCENT, UFMT_EMPTY, UFMT_EMPTY, UFMT_USTRING,
UFMT_EMPTY, UFMT_USTRING/*deprecated*/,UFMT_SPELLOUT, UFMT_EMPTY,
UFMT_HEX, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
@ -1250,39 +1250,26 @@ u_printf_print_spec(const u_printf_stream_handler *streamHandler,
argType = g_u_printf_infos[ handlerNum ].info;
if(argType > ufmt_simple_percent) {
switch(argType) {
case ufmt_char:
case ufmt_uchar:
case ufmt_int:
args.intValue = va_arg(*ap, int);
break;
case ufmt_wchar:
args.wcharValue = va_arg(*ap, wchar_t);
break;
case ufmt_string:
args.ptrValue = va_arg(*ap, char*);
break;
case ufmt_wstring:
args.ptrValue = va_arg(*ap, wchar_t*);
break;
case ufmt_ustring:
args.ptrValue = va_arg(*ap, UChar*);
break;
case ufmt_count:
/* set the spec's width to the # of chars written */
info->fWidth = *written;
/* fall through to set the pointer */
case ufmt_string:
case ufmt_ustring:
case ufmt_pointer:
args.ptrValue = va_arg(*ap, void*);
break;
case ufmt_char:
case ufmt_uchar:
case ufmt_int:
args.intValue = va_arg(*ap, int);
break;
case ufmt_float:
args.floatValue = (float) va_arg(*ap, double);
break;
case ufmt_double:
args.doubleValue = va_arg(*ap, double);
break;
case ufmt_date:
args.dateValue = va_arg(*ap, UDate);
break;
default:
break; /* Should never get here */
}

View file

@ -75,9 +75,9 @@
#define UFMT_SPELLOUT {ufmt_double, u_scanf_spellout_handler}
/* P */
#define UFMT_PERCENT {ufmt_double, u_scanf_percent_handler}
/* K */
/* C K is old format */
#define UFMT_UCHAR {ufmt_uchar, u_scanf_uchar_handler}
/* U */
/* S U is old format */
#define UFMT_USTRING {ufmt_ustring, u_scanf_ustring_handler}
@ -916,14 +916,14 @@ static const u_scanf_info g_u_scanf_infos[USCANF_NUM_FMT_HANDLERS] = {
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
/* 0x40 */
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_SCIENTIFIC, UFMT_EMPTY, UFMT_SCIDBL,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_UCHAR,
UFMT_EMPTY, UFMT_SCIENTIFIC, UFMT_EMPTY, UFMT_SCIDBL,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_UCHAR/*deprecated*/,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
/* 0x50 */
UFMT_PERCENT, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
UFMT_EMPTY, UFMT_USTRING, UFMT_SPELLOUT, UFMT_EMPTY,
UFMT_PERCENT, UFMT_EMPTY, UFMT_EMPTY, UFMT_USTRING,
UFMT_EMPTY, UFMT_USTRING/*deprecated*/,UFMT_SPELLOUT, UFMT_EMPTY,
UFMT_HEX, UFMT_EMPTY, UFMT_EMPTY, UFMT_SCANSET,
UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY, UFMT_EMPTY,
@ -989,50 +989,23 @@ u_vfscanf_u(UFILE *f,
if(info > ufmt_simple_percent) {
switch(info) {
case ufmt_char:
case ufmt_uchar:
case ufmt_int:
case ufmt_string:
case ufmt_ustring:
case ufmt_pointer:
case ufmt_float:
case ufmt_double:
args.ptrValue = va_arg(ap, void*);
break;
case ufmt_count:
args.intValue = va_arg(ap, int);
/* set the spec's width to the # of items converted */
spec.fInfo.fWidth = converted;
break;
case ufmt_char:
case ufmt_uchar:
case ufmt_int:
args.ptrValue = va_arg(ap, int*);
break;
case ufmt_wchar:
args.ptrValue = va_arg(ap, wchar_t*);
break;
case ufmt_string:
args.ptrValue = va_arg(ap, char*);
break;
case ufmt_wstring:
args.ptrValue = va_arg(ap, wchar_t*);
break;
case ufmt_pointer:
args.ptrValue = va_arg(ap, void*);
break;
case ufmt_float:
args.ptrValue = va_arg(ap, float*);
break;
case ufmt_double:
args.ptrValue = va_arg(ap, double*);
break;
case ufmt_date:
args.ptrValue = va_arg(ap, UDate*);
break;
case ufmt_ustring:
args.ptrValue = va_arg(ap, UChar*);
break;
default:
break; /* Should never get here */
}
@ -1069,3 +1042,4 @@ u_vfscanf_u(UFILE *f,
}
#endif /* #if !UCONFIG_NO_FORMATTING */

View file

@ -83,11 +83,11 @@ static void TestFileFromICU(UFILE *myFile) {
u_fprintf(myFile, "Uppercase float %%G: %G\n", myFloat);
// u_fprintf(myFile, "Pointer %%p: %p\n", myFile);
u_fprintf(myFile, "Char %%c: %c\n", 'A');
u_fprintf(myFile, "UChar %%K (non-ANSI, should be %%C for Microsoft?): %K\n", L'A');
u_fprintf(myFile, "UChar %%C: %C\n", L'A');
u_fprintf(myFile, "String %%s: %s\n", "My-String");
u_fprintf(myFile, "NULL String %%s: %s\n", NULL);
u_fprintf(myFile, "Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U\n", L"My-String");
u_fprintf(myFile, "NULL Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U\n", NULL);
u_fprintf(myFile, "Unicode String %%S: %S\n", L"My-String");
u_fprintf(myFile, "NULL Unicode String %%S: %S\n", NULL);
u_fprintf(myFile, "Percent %%P (non-ANSI): %P\n", myFloat);
u_fprintf(myFile, "Spell Out %%V (non-ANSI): %V\n", myFloat);
@ -185,7 +185,7 @@ static void TestFileFromICU(UFILE *myFile) {
if (*myString != 'A') {
log_err("%%c Got: %c, Expected: A\n", *myString);
}
u_fscanf(myFile, "UChar %%K (non-ANSI, should be %%C for Microsoft?): %K\n", myUString);
u_fscanf(myFile, "UChar %%C: %C\n", myUString);
if (*myUString != L'A') {
log_err("%%C Got: %C, Expected: A\n", *myUString);
}
@ -197,12 +197,12 @@ static void TestFileFromICU(UFILE *myFile) {
if (strcmp(myString, "(null)")) {
log_err("%%s Got: %s, Expected: My String\n", myString);
}
u_fscanf(myFile, "Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U\n", myUString);
u_fscanf(myFile, "Unicode String %%S: %S\n", myUString);
u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString));
if (strcmp(myString, "My-String")) {
log_err("%%S Got: %S, Expected: My String\n", myUString);
}
u_fscanf(myFile, "NULL Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U\n", myUString);
u_fscanf(myFile, "NULL Unicode String %%S: %S\n", myUString);
u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString));
if (strcmp(myString, "(null)")) {
log_err("%%S Got: %S, Expected: My String\n", myUString);
@ -1021,8 +1021,8 @@ static void TestString() {
log_err("%%c Got: %c, Expected: A\n", *myString);
}
u_sprintf(uStringBuf, NULL, "UChar %%K (non-ANSI, should be %%C for Microsoft?): %K", L'A');
u_sscanf(uStringBuf, NULL, "UChar %%K (non-ANSI, should be %%C for Microsoft?): %K", myUString);
u_sprintf(uStringBuf, NULL, "UChar %%C: %C", L'A');
u_sscanf(uStringBuf, NULL, "UChar %%C: %C", myUString);
if (*myUString != L'A') {
log_err("%%C Got: %C, Expected: A\n", *myUString);
}
@ -1041,18 +1041,18 @@ static void TestString() {
log_err("%%s Got: %s, Expected: My-String\n", myString);
}
u_sprintf(uStringBuf, NULL, "Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U", L"My-String");
u_sscanf(uStringBuf, NULL, "Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U", myUString);
u_sprintf(uStringBuf, NULL, "Unicode String %%S: %S", L"My-String");
u_sscanf(uStringBuf, NULL, "Unicode String %%S: %S", myUString);
u_austrncpy(myString, myUString, sizeof(myString)/sizeof(*myString));
if (strcmp(myString, "My-String")) {
log_err("%%U Got: %s, Expected: My String\n", myString);
log_err("%%S Got: %s, Expected: My String\n", myString);
}
u_sprintf(uStringBuf, NULL, "NULL Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U", NULL);
u_sscanf(uStringBuf, NULL, "NULL Unicode String %%U (non-ANSI, should be %%S for Microsoft?): %U", myUString);
u_sprintf(uStringBuf, NULL, "NULL Unicode String %%S: %S", NULL);
u_sscanf(uStringBuf, NULL, "NULL Unicode String %%S: %S", myUString);
u_austrncpy(myString, myUString, sizeof(myString)/sizeof(*myString));
if (strcmp(myString, "(null)")) {
log_err("%%U Got: %s, Expected: (null)\n", myString);
log_err("%%S Got: %s, Expected: (null)\n", myString);
}
u_sprintf(uStringBuf, NULL, "Percent %%P (non-ANSI): %P", myFloat);
@ -1075,10 +1075,10 @@ static void TestString() {
log_err("%%V Got: %f, Expected: %f\n", *newDoubleValuePtr, myFloat);
}
u_sprintf(myUString, NULL, "This is a long test123456789012345678901234567890123456789012345678901234567890");
u_sprintf(myUString, NULL, "This is a long test1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
u_austrncpy(myString, myUString, sizeof(myString)/sizeof(*myString));
if (strcmp(myString, "This is a long test123456789012345678901234567890123456789012345678901234567890")) {
log_err("%%U Got: %s, Expected: My String\n", myString);
if (strcmp(myString, "This is a long test1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890")) {
log_err("%%S Got: %s, Expected: My String\n", myString);
}
@ -1405,11 +1405,11 @@ static void TestSScanf() {
int32_t uNumScanned;
int32_t cNumScanned;
TestSScanSetFormat("%[bc]U", abcUChars, abcChars);
TestSScanSetFormat("%[cb]U", abcUChars, abcChars);
TestSScanSetFormat("%[bc]S", abcUChars, abcChars);
TestSScanSetFormat("%[cb]S", abcUChars, abcChars);
TestSScanSetFormat("%[ab]U", abcUChars, abcChars);
TestSScanSetFormat("%[ba]U", abcUChars, abcChars);
TestSScanSetFormat("%[ab]S", abcUChars, abcChars);
TestSScanSetFormat("%[ba]S", abcUChars, abcChars);
TestSScanSetFormat("%[ab]", abcUChars, abcChars);
TestSScanSetFormat("%[ba]", abcUChars, abcChars);
@ -1452,7 +1452,7 @@ static void TestSScanf() {
u_memset(uBuffer, 0x2a, sizeof(uBuffer)/sizeof(*uBuffer));\
memset(buffer, 0x2a, sizeof(buffer)/sizeof(*buffer));\
\
u_fprintf(myFile, "%U", uValue);\
u_fprintf(myFile, "%S", uValue);\
u_fclose(myFile);\
myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL);\
uNumScanned = u_fscanf(myFile, format, uBuffer);\
@ -1480,11 +1480,11 @@ static void TestFScanf() {
int32_t uNumScanned;
int32_t cNumScanned;
TestFScanSetFormat("%[bc]U", abcUChars, abcChars);
TestFScanSetFormat("%[cb]U", abcUChars, abcChars);
TestFScanSetFormat("%[bc]S", abcUChars, abcChars);
TestFScanSetFormat("%[cb]S", abcUChars, abcChars);
TestFScanSetFormat("%[ab]U", abcUChars, abcChars);
TestFScanSetFormat("%[ba]U", abcUChars, abcChars);
TestFScanSetFormat("%[ab]S", abcUChars, abcChars);
TestFScanSetFormat("%[ba]S", abcUChars, abcChars);
TestFScanSetFormat("%[ab]", abcUChars, abcChars);
TestFScanSetFormat("%[ba]", abcUChars, abcChars);