Browse Source

[Development] Implement gethomedir() function on Windows.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4208 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v1.0.90
Adam Tkac 13 years ago
parent
commit
b8ec9e851f
2 changed files with 32 additions and 8 deletions
  1. 29
    8
      common/os/os.cxx
  2. 3
    0
      common/os/os.h

+ 29
- 8
common/os/os.cxx View File

@@ -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


+ 3
- 0
common/os/os.h View File

@@ -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

Loading…
Cancel
Save