static void cd_UpdateLength (CDString* self) { assert(self); self->length = CD_UTF8_strnlen(CD_StringContent(self), self->raw->slen); }
SVString SV_StringSanitize (SVString self) { CDString* result = CD_CreateString(); assert(self); for (size_t i = 0, ie = CD_StringLength(self); i < ie; i++) { bool has = false; CDString* ch = CD_CharAt(self, i); for (size_t h = 0, he = CD_UTF8_strlen(SVCharset); h < he; h++) { const char* che = &SVCharset[CD_UTF8_offset(SVCharset, h)]; if (strncmp(CD_StringContent(ch), che, CD_StringSize(ch)) == 0) { has = true; break; } } if (i == ie - 2 && strncmp(CD_StringContent(ch), "§", 2) == 0){ CD_DestroyString(ch); break; } if (has || strncmp(CD_StringContent(ch), "§", 2) == 0) { CD_AppendString(result, ch); } else { CD_AppendCString(result, "?"); } CD_DestroyString(ch); } self->length = CD_UTF8_strnlen(CD_StringContent(self), self->raw->slen); return result; }