ObjFW  Diff

Differences From Artifact [2ba568e7fc]:

To Artifact [0b43a03a38]:


141
142
143
144
145
146
147
148

149
150
151

152
153
154
155
156
157

158


159
160
161
162
163

164


165
166
167
168
169
170
171
141
142
143
144
145
146
147

148
149
150

151


152
153
154
155
156

157
158
159
160
161
162
163
164

165
166
167
168
169
170
171
172
173







-
+


-
+
-
-




+
-
+
+





+
-
+
+







}

of_unichar_t
of_string_utf8_to_unicode(const char *buf_, size_t len)
{
	const uint8_t *buf = (const uint8_t*)buf_;

	if (*buf < 0x80)
	if (!(*buf & 0x80))
		return buf[0];

	switch (*buf & 0xF0) {
	if ((*buf & 0xE0) == 0xC0) {
	case 0xC0:
	case 0xD0:
		if (OF_UNLIKELY(len < 2))
			return OF_INVALID_UNICHAR;

		return ((buf[0] & 0x1F) << 6) | (buf[1] & 0x3F);
	}
	case 0xE0:

	if ((*buf & 0xF0) == 0xE0) {
		if (OF_UNLIKELY(len < 3))
			return OF_INVALID_UNICHAR;

		return ((buf[0] & 0x0F) << 12) | ((buf[1] & 0x3F) << 6) |
		    (buf[2] & 0x3F);
	}
	case 0xF0:

	if ((*buf & 0xF8) == 0xF0) {
		if (OF_UNLIKELY(len < 4))
			return OF_INVALID_UNICHAR;

		return ((buf[0] & 0x07) << 18) | ((buf[1] & 0x3F) << 12) |
		    ((buf[2] & 0x3F) << 6) | (buf[3] & 0x3F);
	}

323
324
325
326
327
328
329
330

331
332
333
334
335
336
337
325
326
327
328
329
330
331

332
333
334
335
336
337
338
339







-
+







		string[length] = 0;

		break;
	case OF_STRING_ENCODING_ISO_8859_1:
	case OF_STRING_ENCODING_ISO_8859_15:
	case OF_STRING_ENCODING_WINDOWS_1252:
		for (i = j = 0; i < len; i++) {
			if ((uint8_t)str[i] < 0x80)
			if (!(str[i] & 0x80))
				string[j++] = str[i];
			else {
				char buf[4];
				of_unichar_t chr;
				size_t chr_bytes;

				switch (encoding) {