size_t os_fread_mbs(FILE *file, char **pstr) { size_t size = 0; size_t len = 0; fseeko(file, 0, SEEK_END); size = (size_t)ftello(file); *pstr = NULL; if (size > 0) { char *mbstr = bmalloc(size+1); fseeko(file, 0, SEEK_SET); size = fread(mbstr, 1, size, file); if (size == 0) { bfree(mbstr); return 0; } mbstr[size] = 0; len = os_mbs_to_utf8(mbstr, size, pstr); bfree(mbstr); } return len; }
char *dstr_to_mbs(const struct dstr *str) { char *dst; os_mbs_to_utf8(str->array, str->len, &dst); return dst; }
void dstr_from_mbs(struct dstr *dst, const char *mbstr) { dstr_free(dst); dst->len = os_mbs_to_utf8(mbstr, 0, &dst->array); }