static char *APP_CC read_uni(struct stream *s, int num_chars) { twchar *rchrs; char *rv; int index; int lchars; rchrs = 0; rv = 0; if (num_chars > 0) { rchrs = (twchar *)g_malloc((num_chars + 1) * sizeof(twchar), 0); for (index = 0; index < num_chars; index++) { in_uint16_le(s, rchrs[index]); } rchrs[num_chars] = 0; lchars = g_wcstombs(0, rchrs, 0); if (lchars > 0) { rv = (char *)g_malloc((lchars + 1) * 4, 0); g_wcstombs(rv, rchrs, lchars); rv[lchars] = 0; } } g_free(rchrs); return rv; }
/* if index = -1 remove it from the end */ int APP_CC remove_char_at(char* text, int text_size, int index) { int len; int i; twchar* wstr; len = g_mbstowcs(0, text, 0); if (len <= 0) { return 0; } wstr = (twchar*)g_malloc((len + 16) * sizeof(twchar), 0); g_mbstowcs(wstr, text, len + 1); if ((index >= (len - 1)) || (index < 0)) { wstr[len - 1] = 0; g_wcstombs(text, wstr, text_size); g_free(wstr); return 0; } for (i = index; i < (len - 1); i++) { wstr[i] = wstr[i + 1]; } wstr[len - 1] = 0; g_wcstombs(text, wstr, text_size); g_free(wstr); return 0; }
/* if index = -1 add it to the end */ int APP_CC add_char_at(char* text, int text_size, twchar ch, int index) { int len; int i; twchar* wstr; len = g_mbstowcs(0, text, 0); wstr = (twchar*)g_malloc((len + 16) * sizeof(twchar), 0); g_mbstowcs(wstr, text, len + 1); if ((index >= len) || (index < 0)) { wstr[len] = ch; wstr[len + 1] = 0; g_wcstombs(text, wstr, text_size); g_free(wstr); return 0; } for (i = (len - 1); i >= index; i--) { wstr[i + 1] = wstr[i]; } wstr[i + 1] = ch; wstr[len + 1] = 0; g_wcstombs(text, wstr, text_size); g_free(wstr); return 0; }
std::string CreateGUID() { std::string guidStr; #ifdef WIN32 std::wstring guidWStr; guidWStr.resize(50); GUID guid; CoCreateGuid(&guid); StringFromGUID2(guid, (wchar_t*)guidWStr.c_str(), (int)guidWStr.size()); g_wcstombs(guidStr, guidWStr); #else uuid_t out; uuid_generate_time(out); for(int i = 0; i < sizeof(out); i++) { char num[10] = {0}; snprintf(num, 10, "%d", out[i]); guidStr.append(num); } #endif return guidStr.c_str(); }