#! /bin/sh -e ## 10_config.c-HOME-fix.dpatch by Austin Donnelly <and1000@debian.org> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Gracefully handle lack of HOME env. variable. if [ $# -ne 1 ]; then echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 fi case "$1" in -patch) patch -f --no-backup-if-mismatch -p1 < $0;; -unpatch) patch -f --no-backup-if-mismatch -R -p1 < $0;; *) echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1;; esac exit 0 diff -urNad 10.xloadimage.tmp/config.c 10.xloadimage/config.c --- 10.xloadimage.tmp/config.c 2003-04-02 23:48:30.000000000 +0100 +++ 10.xloadimage/config.c 2003-04-02 23:46:22.000000000 +0100 @@ -15,11 +15,13 @@ #include <sys/stat.h> #ifndef VMS #include <pwd.h> +#include <sys/types.h> #endif #include <errno.h> #ifdef HAVE_UNISTD_H #include <unistd.h> #endif +#include <stdlib.h> /* SUPPRESS 530 */ /* SUPPRESS 560 */ @@ -434,14 +436,29 @@ printf("No filters\n"); } +/* Work out where this user's home directory is, or default to '/' */ +/* XXX needs a VMS guru to supply something plausable for VMS */ +static char *homedir() +{ char *p; + struct passwd *pw; + + p = getenv("HOME"); + if (p) return p; + + /* try for a password file lookup instead */ + pw = getpwuid(getuid()); + if (!pw) + return "/"; /* XXX maybe print message? */ + else + return pw->pw_dir; +} + char *expandPath(p) char *p; { char buf1[BUFSIZ], buf2[BUFSIZ]; int b1, b2, var; char *ptr; - char *getenv(); - buf1[0] = '\0'; buf2[0] = '\0'; b1 = 0; @@ -455,7 +472,7 @@ #endif else if(*p == '~') { buf1[b1] = '\0'; - strncat(buf1, getenv("HOME"), BUFSIZ - strlen(buf1) - 1); + strncat(buf1, homedir(), BUFSIZ - strlen(buf1) - 1); buf1[BUFSIZ - 1] = '\0'; b1 = strlen(buf1); var = 0;