comparison src/vamp-hostsdk/Files.cpp @ 512:54277cb679ff

Wide-char environment variable lookup
author Chris Cannam
date Fri, 08 Jun 2018 11:25:19 +0100
parents 628a5b8ff634
children 4b619c5871ee
comparison
equal deleted inserted replaced
511:328cb056da44 512:54277cb679ff
320 closedir(d); 320 closedir(d);
321 #endif 321 #endif
322 322
323 return files; 323 return files;
324 } 324 }
325
326 bool
327 Files::getEnvUtf8(std::string variable, std::string &value)
328 {
329 value = "";
330
331 #ifdef _WIN32
332 int wvarlen = MultiByteToWideChar(CP_UTF8, 0,
333 variable.c_str(), int(variable.length()),
334 0, 0);
335 if (wvarlen < 0) {
336 cerr << "Vamp::HostExt: Unable to convert environment variable name "
337 << variable << " to wide characters" << endl;
338 return false;
339 }
340
341 wchar_t *wvarbuf = new wchar_t[wvarlen + 1];
342 (void)MultiByteToWideChar(CP_UTF8, 0,
343 variable.c_str(), int(variable.length()),
344 wvarbuf, wvarlen);
345 wvarbuf[wvarlen] = L'\0';
346
347 wchar_t *wvalue = _wgetenv(wvarbuf);
348
349 delete[] wvarbuf;
350
351 if (!wvalue) {
352 return false;
353 }
354
355 int wvallen = int(wcslen(wvalue));
356 int vallen = WideCharToMultiByte(CP_UTF8, 0,
357 wvalue, wvallen,
358 0, 0, 0, 0);
359 if (vallen < 0) {
360 cerr << "Vamp::HostExt: Unable to convert environment value to UTF-8"
361 << endl;
362 return false;
363 }
364
365 char *val = new char[vallen + 1];
366 (void)WideCharToMultiByte(CP_UTF8, 0,
367 wvalue, wvallen,
368 val, vallen, 0, 0);
369 val[vallen] = '\0';
370
371 value = val;
372
373 delete[] val;
374 return true;
375
376 #else
377
378 char *val = getenv(variable.c_str());
379 if (!val) {
380 return false;
381 }
382
383 value = val;
384 return true;
385
386 #endif
387 }