mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[unicode] Fix code point serialization
This commit is contained in:
@@ -79,22 +79,22 @@ size_t UTF8Decoder::CodePointToChars(CodePoint c, char * buffer, size_t bufferSi
|
||||
buffer[i++] = c;
|
||||
} else if (charCount == 2) {
|
||||
buffer[i++] = 0b11000000 | (c >> 6);
|
||||
if (bufferSize <= i) { return i; }
|
||||
if (bufferSize <= i) { return bufferSize; }
|
||||
buffer[i++] = 0b10000000 | (c & 0b111111);
|
||||
} else if (charCount == 3) {
|
||||
buffer[i++] = 0b11100000 | (c >> 12);
|
||||
if (bufferSize <= i) { return i; }
|
||||
if (bufferSize <= i) { return bufferSize; }
|
||||
buffer[i++] = 0b10000000 | ((c >> 6) & 0b111111);
|
||||
if (bufferSize <= i) { return i; }
|
||||
if (bufferSize <= i) { return bufferSize; }
|
||||
buffer[i++] = 0b10000000 | (c & 0b111111);
|
||||
} else {
|
||||
assert(charCount == 4);
|
||||
buffer[i++] = 0b11110000 | (c >> 18);
|
||||
if (bufferSize <= i) { return i; }
|
||||
if (bufferSize <= i) { return bufferSize; }
|
||||
buffer[i++] = 0b10000000 | ((c >> 12) & 0b111111);
|
||||
if (bufferSize <= i) { return i; }
|
||||
if (bufferSize <= i) { return bufferSize; }
|
||||
buffer[i++] = 0b10000000 | ((c >> 6) & 0b111111);
|
||||
if (bufferSize <= i) { return i; }
|
||||
if (bufferSize <= i) { return bufferSize; }
|
||||
buffer[i++] = 0b10000000 | (c & 0b111111);
|
||||
}
|
||||
assert(i == charCount);
|
||||
|
||||
@@ -184,8 +184,12 @@ int SerializationHelper::CodePoint(char * buffer, int bufferSize, class CodePoin
|
||||
}
|
||||
}
|
||||
size_t size = UTF8Decoder::CodePointToChars(c, buffer, bufferSize);
|
||||
assert(size <= bufferSize - 1);
|
||||
buffer[size] = 0;
|
||||
if (size <= bufferSize - 1) {
|
||||
buffer[size] = 0;
|
||||
} else {
|
||||
assert(size -1 == bufferSize - 1);
|
||||
buffer[--size] = 0;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user