diff options
author | Adam Tkac <atkac@redhat.com> | 2010-10-29 12:07:14 +0000 |
---|---|---|
committer | Adam Tkac <atkac@redhat.com> | 2010-10-29 12:07:14 +0000 |
commit | b56a69c7fdc6996b441fa0beac3afeac5e15f8e1 (patch) | |
tree | ca3b68325ec5421229824894e459bcccbe5a7a9c /common | |
parent | bcec85b2910c2e2ddf1eb59bee21d7d2b733d39d (diff) | |
download | tigervnc-b56a69c7fdc6996b441fa0beac3afeac5e15f8e1.tar.gz tigervnc-b56a69c7fdc6996b441fa0beac3afeac5e15f8e1.zip |
[Development] Introduce gethomedir() function to retrieve home directory path.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4176 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'common')
-rw-r--r-- | common/os/CMakeLists.txt | 3 | ||||
-rw-r--r-- | common/os/Makefile.am | 4 | ||||
-rw-r--r-- | common/os/os.cxx | 64 | ||||
-rw-r--r-- | common/os/os.h | 36 |
4 files changed, 104 insertions, 3 deletions
diff --git a/common/os/CMakeLists.txt b/common/os/CMakeLists.txt index bbeec501..77ff363f 100644 --- a/common/os/CMakeLists.txt +++ b/common/os/CMakeLists.txt @@ -2,4 +2,5 @@ include_directories(${CMAKE_SOURCE_DIR}/common) add_library(os STATIC print.c - net.c) + net.c + os.cxx) diff --git a/common/os/Makefile.am b/common/os/Makefile.am index ed98579d..d87a0dac 100644 --- a/common/os/Makefile.am +++ b/common/os/Makefile.am @@ -1,8 +1,8 @@ noinst_LTLIBRARIES = libos.la -HDRS = net.h print.h +HDRS = net.h print.h os.h -libos_la_SOURCES = $(HDRS) print.c net.c +libos_la_SOURCES = $(HDRS) print.c net.c os.cxx libos_la_CPPFLAGS = -I$(top_srcdir)/common diff --git a/common/os/os.cxx b/common/os/os.cxx new file mode 100644 index 00000000..8d24875d --- /dev/null +++ b/common/os/os.cxx @@ -0,0 +1,64 @@ +/* Copyright (C) 2010 TightVNC Team. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <os/os.h> + +#include <assert.h> +#include <pwd.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> + +int gethomedir(char **dirp) +{ + char *homedir, *dir; + size_t len; + uid_t uid; + struct passwd *passwd; + + assert(dirp != NULL && *dirp == NULL); + +#ifdef WIN32 + /* Not supported, yet */ + return -1; +#endif + + homedir = getenv("HOME"); + if (homedir == NULL) { + uid = getuid(); + passwd = getpwuid(uid); + if (passwd == NULL) { + /* Do we want emit error msg here? */ + return -1; + } + homedir = passwd->pw_dir; + } + + len = strlen(homedir) + 1; + dir = new char[len]; + memcpy(dir, homedir, len); + + *dirp = dir; + return 0; +} + diff --git a/common/os/os.h b/common/os/os.h new file mode 100644 index 00000000..fce21def --- /dev/null +++ b/common/os/os.h @@ -0,0 +1,36 @@ +/* Copyright (C) 2010 TightVNC Team. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifndef OS_OS_H +#define OS_OS_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +/* + * Get home directory. If HOME environment variable is set then it is returned. + * Otherwise home directory is obtained via getpwuid function. + * + * Returns: + * 0 - Success + * -1 - Failure + */ +int gethomedir(char **dirp); + +#endif /* OS_OS_H */ |