@ -107,25 +107,17 @@ static inline bool IsUtf8Part(char c)
}
/**
* Retrieve the ( partial ) length of the previous UNICODE character
* in an UTF - 8 encoded string .
* @ param s char pointer pointing to the first char of the next character
* @ returns the decoded length in bytes ( size ) of the UNICODE character
* that was just before the one where ' s ' is pointing to
* @ note If ' s ' is not pointing to the first byte of the next UNICODE character
* only a partial length of the sequence will be returned .
* For example given this sequence : 0xE3 0x85 0x80 , 0xE3 0x81 0x9E
* 1. ' s ' is pointing to the second 0xE3 , return value is 3
* 2. ' s ' is pointing to 0x80 , return value is 2.
* So take care with the return values of this function . To get the real length
* for an ( invalid ) sequence , pass the string offset of this function ' s return
* value to Utf8EncodedCharLen ( ) or Utf8Decode ( )
* Retrieve the previous UNICODE character in an UTF - 8 encoded string .
* @ param s char pointer pointing to ( the first char of ) the next character
* @ returns a pointer in ' s ' to the previous UNICODE character ' s first byte
* @ note The function should not be used to determine the length of the previous
* encoded char because it might be an invalid / corrupt start - sequence
*/
static inline size_t Utf8PrevCharLen ( const char * s )
static inline char * Utf8PrevChar ( const char * s )
{
size_t len = 1 ;
while ( IsUtf8Part ( * - - s) ) len + + ;
return len ;
const char * ret = s ;
while ( IsUtf8Part ( * - - ret ) ) ;
return ( char * ) ret ;
}