aboutsummaryrefslogtreecommitdiffstats
path: root/epan/filesystem.c
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>2000-09-28 03:16:29 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>2000-09-28 03:16:29 +0000
commit9d9850f209ff7b5f350c7e83719eebaa76a72edd (patch)
treeccf03ab311c3d67e880750071dcba5cb31d73e42 /epan/filesystem.c
parentcba2930d6bb7e8cf2b0c03d14203624b56460835 (diff)
downloadwireshark-9d9850f209ff7b5f350c7e83719eebaa76a72edd.tar.gz
wireshark-9d9850f209ff7b5f350c7e83719eebaa76a72edd.tar.bz2
wireshark-9d9850f209ff7b5f350c7e83719eebaa76a72edd.zip
More EPAN-related code movements. Get rid of usage of #include "globals.h"
and #include "util.h" from epan code. Move get_home_dir() into epan/filesystem.c as it's used by plugins.c. svn path=/trunk/; revision=2461
Diffstat (limited to 'epan/filesystem.c')
-rw-r--r--epan/filesystem.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/epan/filesystem.c b/epan/filesystem.c
new file mode 100644
index 0000000000..bd89677f90
--- /dev/null
+++ b/epan/filesystem.c
@@ -0,0 +1,118 @@
+/* filesystem.c
+ * Filesystem utility routines
+ *
+ * $Id: filesystem.c,v 1.1 2000/09/28 03:16:16 gram Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program 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 program 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 program; 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 <stdlib.h>
+#include <glib.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifndef WIN32
+#include <pwd.h>
+#endif
+
+#include "filesystem.h"
+
+const char*
+get_home_dir(void)
+{
+ static const char *home = NULL;
+#ifdef WIN32
+ char *homedrive, *homepath;
+ char *homestring;
+ char *lastsep;
+#else
+ struct passwd *pwd;
+#endif
+
+ /* Return the cached value, if available */
+ if (home)
+ return home;
+#ifdef WIN32
+ /*
+ * XXX - should we use USERPROFILE anywhere in this process?
+ * Is there a chance that it might be set but one or more of
+ * HOMEDRIVE or HOMEPATH isn't set?
+ */
+ homedrive = getenv("HOMEDRIVE");
+ if (homedrive != NULL) {
+ homepath = getenv("HOMEPATH");
+ if (homepath != NULL) {
+ /*
+ * This is cached, so we don't need to worry about
+ * allocating multiple ones of them.
+ */
+ homestring =
+ g_malloc(strlen(homedrive) + strlen(homepath) + 1);
+ strcpy(homestring, homedrive);
+ strcat(homestring, homepath);
+
+ /*
+ * Trim off any trailing slash or backslash.
+ */
+ lastsep = find_last_pathname_separator(homestring);
+ if (lastsep != NULL && *(lastsep + 1) == '\0') {
+ /*
+ * Last separator is the last character
+ * in the string. Nuke it.
+ */
+ *lastsep = '\0';
+ }
+ home = homestring;
+ } else
+ home = homedrive;
+ } else {
+ /*
+ * Try using "windir?
+ */
+ home = "C:";
+ }
+#else
+ home = getenv("HOME");
+ if (home == NULL) {
+ /*
+ * Get their home directory from the password file.
+ * If we can't even find a password file entry for them,
+ * use "/tmp".
+ */
+ pwd = getpwuid(getuid());
+ if (pwd != NULL) {
+ /*
+ * This is cached, so we don't need to worry
+ * about allocating multiple ones of them.
+ */
+ home = g_strdup(pwd->pw_dir);
+ } else
+ home = "/tmp";
+ }
+#endif
+
+ return home;
+}