From b56a69c7fdc6996b441fa0beac3afeac5e15f8e1 Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Fri, 29 Oct 2010 12:07:14 +0000 Subject: [PATCH] [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 --- common/os/CMakeLists.txt | 3 +- common/os/Makefile.am | 4 +-- common/os/os.cxx | 64 ++++++++++++++++++++++++++++++++++++++++ common/os/os.h | 36 ++++++++++++++++++++++ 4 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 common/os/os.cxx create mode 100644 common/os/os.h 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 +#endif + +#include + +#include +#include +#include +#include +#include +#include + +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 +#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 */ -- 2.39.5