ICU-1043 strtok_r should work with strings ending with delimiters.
X-SVN-Rev: 5245
This commit is contained in:
parent
ec3de1fc13
commit
1f063c715d
@ -258,15 +258,23 @@ u_strtok_r(UChar *src,
|
||||
nonDelimIdx = u_strspn(tokSource, delim);
|
||||
tokSource = &tokSource[nonDelimIdx];
|
||||
|
||||
nextToken = u_strpbrk(tokSource, delim);
|
||||
if (nextToken != NULL) {
|
||||
*(nextToken++) = 0;
|
||||
*saveState = nextToken;
|
||||
return tokSource;
|
||||
if (*tokSource) {
|
||||
nextToken = u_strpbrk(tokSource, delim);
|
||||
if (nextToken != NULL) {
|
||||
/* Create a token */
|
||||
*(nextToken++) = 0;
|
||||
*saveState = nextToken;
|
||||
return tokSource;
|
||||
}
|
||||
else if (saveState && *saveState) {
|
||||
/* Return the last token */
|
||||
*saveState = NULL;
|
||||
return tokSource;
|
||||
}
|
||||
}
|
||||
else if (saveState && *saveState) {
|
||||
else {
|
||||
/* No tokens were found. Only delimiters were left. */
|
||||
*saveState = NULL;
|
||||
return tokSource;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -989,6 +989,23 @@ static void TestStringFunctions()
|
||||
if (state != NULL) {
|
||||
log_err("State should be NULL for empty string\n");
|
||||
}
|
||||
u_uastrcpy(currTokenBuf, ", ,");
|
||||
if (u_strtok_r(currTokenBuf, delimBuf, &state) != NULL) {
|
||||
log_err("Didn't get NULL for a string of delimiters\n");
|
||||
}
|
||||
if (state != NULL) {
|
||||
log_err("State should be NULL for a string of delimiters\n");
|
||||
}
|
||||
u_uastrcpy(currTokenBuf, "q, ,");
|
||||
if (u_strtok_r(currTokenBuf, delimBuf, &state) == NULL) {
|
||||
log_err("Got NULL for a string that does not begin with delimiters\n");
|
||||
}
|
||||
if (u_strtok_r(NULL, delimBuf, &state) != NULL) {
|
||||
log_err("Didn't get NULL for a string that ends in delimiters\n");
|
||||
}
|
||||
if (state != NULL) {
|
||||
log_err("State should be NULL for empty string\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* test u_strcmpCodePointOrder() */
|
||||
|
Loading…
Reference in New Issue
Block a user