size_t os_mbs_to_utf8_ptr(const char *str, size_t len, char **pstr) { wchar_t *wstr = NULL; char *dst = NULL; size_t wlen = os_mbs_to_wcs_ptr(str, len, &wstr); size_t out_len = os_wcs_to_utf8_ptr(wstr, wlen, &dst); bfree(wstr); *pstr = dst; return out_len; }
static void DBGMSG(PCWSTR format, ...) { va_list args; va_start(args, format); WCHAR msg[MAX_PATH]; if (SUCCEEDED(StringCbVPrintf(msg, sizeof(msg), format, args))) { char *cmsg; os_wcs_to_utf8_ptr(msg, 0, &cmsg); MF_LOG(LOG_INFO, "%s", cmsg); bfree(cmsg); } }
/* returns %appdata%\[name] on windows */ char *os_get_config_path(const char *name) { char *ptr; wchar_t path_utf16[MAX_PATH]; struct dstr path; SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path_utf16); os_wcs_to_utf8_ptr(path_utf16, 0, &ptr); dstr_init_move_array(&path, ptr); dstr_cat(&path, "\\"); dstr_cat(&path, name); return path.array; }
static char *os_get_path_ptr_internal(const char *name, int folder) { char *ptr; wchar_t path_utf16[MAX_PATH]; struct dstr path; SHGetFolderPathW(NULL, folder, NULL, SHGFP_TYPE_CURRENT, path_utf16); os_wcs_to_utf8_ptr(path_utf16, 0, &ptr); dstr_init_move_array(&path, ptr); dstr_cat(&path, "\\"); dstr_cat(&path, name); return path.array; }
FILE *os_wfopen(const wchar_t *path, const char *mode) { FILE *file; #ifdef _MSC_VER wchar_t *wcs_mode; os_utf8_to_wcs_ptr(mode, 0, &wcs_mode); file = _wfopen(path, wcs_mode); bfree(wcs_mode); #else char *mbs_path; os_wcs_to_utf8_ptr(path, 0, &mbs_path); file = fopen(mbs_path, mode); bfree(mbs_path); #endif return file; }
static bool load_libvlc_module(void) { #ifdef _WIN32 char *path_utf8 = NULL; wchar_t path[1024]; LSTATUS status; DWORD size; HKEY key; memset(path, 0, 1024 * sizeof(wchar_t)); status = RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\VideoLAN\\VLC", &key); if (status != ERROR_SUCCESS) return false; size = 1024; status = RegQueryValueExW(key, L"InstallDir", NULL, NULL, (LPBYTE)path, &size); if (status == ERROR_SUCCESS) { wcscat(path, L"\\libvlc.dll"); os_wcs_to_utf8_ptr(path, 0, &path_utf8); libvlc_module = os_dlopen(path_utf8); bfree(path_utf8); } RegCloseKey(key); #else #ifdef __APPLE__ #define LIBVLC_DIR "/Applications/VLC.app/Contents/MacOS/" #define LIBVLC_FILE LIBVLC_DIR "lib/libvlc.5.dylib" setenv("VLC_PLUGIN_PATH", LIBVLC_DIR "plugins", false); #else #define LIBVLC_FILE "libvlc.5.so" #endif libvlc_module = os_dlopen(LIBVLC_FILE); #endif return libvlc_module != NULL; }
void gs_device::InitDevice(const gs_init_data *data, IDXGIAdapter *adapter) { wstring adapterName; DXGI_SWAP_CHAIN_DESC swapDesc; DXGI_ADAPTER_DESC desc; D3D_FEATURE_LEVEL levelUsed = D3D_FEATURE_LEVEL_9_3; HRESULT hr = 0; make_swap_desc(swapDesc, data); uint32_t createFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; #ifdef _DEBUG //createFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif adapterName = (adapter->GetDesc(&desc) == S_OK) ? desc.Description : L"<unknown>"; char *adapterNameUTF8; os_wcs_to_utf8_ptr(adapterName.c_str(), 0, &adapterNameUTF8); blog(LOG_INFO, "Loading up D3D11 on adapter %s (%" PRIu32 ")", adapterNameUTF8, data->adapter); bfree(adapterNameUTF8); hr = D3D11CreateDeviceAndSwapChain(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, createFlags, featureLevels, sizeof(featureLevels) / sizeof(D3D_FEATURE_LEVEL), D3D11_SDK_VERSION, &swapDesc, defaultSwap.swap.Assign(), device.Assign(), &levelUsed, context.Assign()); if (FAILED(hr)) throw UnsupportedHWError("Failed to create device and " "swap chain", hr); blog(LOG_INFO, "D3D11 loaded sucessfully, feature level used: %u", (unsigned int)levelUsed); defaultSwap.device = this; defaultSwap.hwnd = (HWND)data->window.hwnd; defaultSwap.numBuffers = data->num_backbuffers; defaultSwap.Init(data); }
static inline void netif_get_addrs_win32(struct netif_saddr_data *ifaddrs) { PIP_ADAPTER_ADDRESSES adapter = get_adapters(); PIP_ADAPTER_UNICAST_ADDRESS unicast = NULL; PIP_ADAPTER_ADDRESSES cur_adap = NULL; SOCKET_ADDRESS socket_addr; int family; if (!adapter) return; for (cur_adap = adapter; !!cur_adap; cur_adap = cur_adap->Next) { char *adap_name = NULL; if (cur_adap->OperStatus != IfOperStatusUp || cur_adap->IfType == IF_TYPE_SOFTWARE_LOOPBACK) continue; os_wcs_to_utf8_ptr(cur_adap->FriendlyName, 0, &adap_name); unicast = cur_adap->FirstUnicastAddress; for (; !!unicast; unicast = unicast->Next) { socket_addr = unicast->Address; family = socket_addr.lpSockaddr->sa_family; if (family == AF_INET || family == AF_INET6) netif_push(socket_addr.lpSockaddr, ifaddrs, adap_name); } bfree(adap_name); } bfree(adapter); }