/**
 * @file compat_win32.cpp
 * Compatibility functions for win32
 *
 * @author  Ben Gardner
 * @license GPL v2+
 */
#if defined(_WIN32) && !defined(__CYGWIN__)

#include "windows_compat.h"
#include <string>
#include <cstdio>

bool unc_getenv(const char *name, std::string& str)
{
   DWORD len = GetEnvironmentVariableA(name, NULL, 0);
   char  *buf;

   if (len == 0)
   {
      if (GetLastError() == ERROR_ENVVAR_NOT_FOUND)
      {
         return false;
      }
   }

   buf = (char *)malloc(len);
   if (buf)
   {
      len = GetEnvironmentVariableA(name, buf, len);
   }
   buf[len] = 0;

   str = buf;
   printf("%s: name=%s len=%d value=%s\n", __func__, name, (int)len, str.c_str());
   free(buf);

   return true;
}

bool unc_homedir(std::string& home)
{
   if (unc_getenv("HOME", home))
   {
      return true;
   }
   if (unc_getenv("USERPROFILE", home))
   {
      return true;
   }
   std::string hd, hp;
   if (unc_getenv("HOMEDRIVE", hd) && unc_getenv("HOMEPATH", hp))
   {
      home = hd + hp;
      return true;
   }
   return false;
}

#endif /* if defined(_WIN32) && !defined(__CYGWIN__) */
