+/* Take FNAME and return the tilde prefix we want expanded. If LENP is
+ non-null, the index of the end of the prefix into FNAME is returned in
+ the location it points to. */
+static char *
+isolate_tilde_prefix (fname, lenp)
+ char *fname;
+ int *lenp;
+{
+ char *ret;
+ int i;
+
+ ret = xmalloc (strlen (fname));
+ for (i = 1; fname[i] && fname[i] != '/'; i++)
+ ret[i - 1] = fname[i];
+ ret[i - 1] = '\0';
+ if (lenp)
+ *lenp = i;
+ return ret;
+}
+
+/* Return a string that is PREFIX concatenated with SUFFIX starting at
+ SUFFIND. */
+static char *
+glue_prefix_and_suffix (prefix, suffix, suffind)
+ char *prefix, *suffix;
+ int suffind;
+{
+ char *ret;
+ int plen, slen;
+
+ plen = (prefix && *prefix) ? strlen (prefix) : 0;
+ slen = strlen (suffix + suffind);
+ ret = xmalloc (plen + slen + 1);
+ if (prefix && *prefix)
+ strcpy (ret, prefix);
+ strcpy (ret + plen, suffix + suffind);
+ return ret;
+}
+
+static char *
+get_home_dir ()
+{
+ char *home_dir;
+
+#ifdef SHELL
+ home_dir = (char *)NULL;
+ if (current_user.home_dir == 0)
+ get_current_user_info ();
+ home_dir = current_user.home_dir;
+#else
+ struct passwd *entry;
+
+ home_dir = (char *)NULL;
+ entry = getpwuid (getuid ());
+ if (entry)
+ home_dir = entry->pw_dir;
+#endif
+ return (home_dir);
+}
+