diff options
-rw-r--r-- | common/os/os.cxx | 37 | ||||
-rw-r--r-- | common/os/os.h | 3 |
2 files changed, 32 insertions, 8 deletions
diff --git a/common/os/os.cxx b/common/os/os.cxx index 5d410553..fb07dcf6 100644 --- a/common/os/os.cxx +++ b/common/os/os.cxx @@ -20,30 +20,37 @@ #include <config.h> #endif -#ifndef WIN32 #include <os/os.h> #include <assert.h> + +#ifndef WIN32 #include <pwd.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> +#else +#include <windows.h> +#include <wininet.h> /* MinGW needs it */ +#include <shlobj.h> +#endif int gethomedir(char **dirp) { +#ifndef WIN32 char *homedir, *dir; size_t len; uid_t uid; struct passwd *passwd; +#else + TCHAR *dir; + BOOL ret; +#endif assert(dirp != NULL && *dirp == NULL); -#ifdef WIN32 - /* Not supported, yet */ - return -1; -#endif - +#ifndef WIN32 homedir = getenv("HOME"); if (homedir == NULL) { uid = getuid(); @@ -57,11 +64,25 @@ int gethomedir(char **dirp) len = strlen(homedir) + 1; dir = new char[len]; + if (dir == NULL) + return -1; + memcpy(dir, homedir, len); +#else + dir = new TCHAR[MAX_PATH]; + if (dir == NULL) + return -1; + + ret = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, FALSE); + if (ret == FALSE) { + delete [] dir; + return -1; + } + + +#endif *dirp = dir; return 0; } -#endif - diff --git a/common/os/os.h b/common/os/os.h index fce21def..18e61e23 100644 --- a/common/os/os.h +++ b/common/os/os.h @@ -27,6 +27,9 @@ * Get home directory. If HOME environment variable is set then it is returned. * Otherwise home directory is obtained via getpwuid function. * + * Note for Windows: + * This functions returns array of TCHARs, not array of chars. + * * Returns: * 0 - Success * -1 - Failure |