The apr_strtok() doc says:

    the 'last' state points to the trailing NUL char of the final token, 
otherwise it points to the character following the current token (all 
successive or empty occurances of sep are skiped on the subsequent call to 
apr_strtok). Therefore it is possible to avoid a strlen() determination, with 
the following logic; toklen = last - retval; if (*last) –toklen; 

Please explain that last clause, starting with exactly what *last is supposed 
to represent (hint:  since last is declared as char**, it's a pointer, not the 
character past the end of the current token).  In any case, decrementing the 
length just calculated is clearly incorrect, whether it's an early token or the 
last token in the string.

But in fact, it's worse than that.  By analogy with strtok(), the value of last 
has to be constant across successive calls to apr_strtok().  So to calculate 
the length of the token, one would need to use

toklen = *last - retval;

instead of

toklen = last - retval;

Does that not make sense?

Reply via email to