(svn r9011) -Codechange (r9003): Rework Utf8PrevChar so that it returns a pointer to the previous UTF8 character's first byte instead of a byte-length offset
This commit is contained in:
26
src/string.h
26
src/string.h
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user