diff options
Diffstat (limited to 'src/backend/utils/adt/filename.c')
-rw-r--r-- | src/backend/utils/adt/filename.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/backend/utils/adt/filename.c b/src/backend/utils/adt/filename.c new file mode 100644 index 00000000000..21389597eb6 --- /dev/null +++ b/src/backend/utils/adt/filename.c @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------- + * + * filename.c-- + * + * + * Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/filename.c,v 1.1.1.1 1996/07/09 06:22:04 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#include <string.h> +#include <stdio.h> +#ifndef WIN32 +#include <pwd.h> +#endif /* WIN32 */ + +#include <sys/param.h> +#include "utils/elog.h" +#include "utils/palloc.h" +#include "utils/builtins.h" /* where function declarations go */ + +char * +filename_in(char *file) +{ + char *str, *getenv(); + int ind; + + /* + * XXX - HACK CITY --- REDO + * should let the shell do expansions (shexpand) + */ + +#ifndef WIN32 + str = (char *) palloc(MAXPATHLEN * sizeof(*str)); + str[0] = '\0'; + if (file[0] == '~') { + if (file[1] == '\0' || file[1] == '/') { + /* Home directory */ + + char *userName; + struct passwd *pw; + + userName = GetPgUserName(); + + if ((pw = getpwnam(userName)) == NULL) { + elog(WARN, "User %s is not a Unix user on the db server.", + userName); + } + + strcpy(str, pw->pw_dir); + + ind = 1; + } else { + /* Someone else's directory */ + char name[16], *p; + struct passwd *pw; + int len; + + if ((p = (char *) strchr(file, '/')) == NULL) { + strcpy(name, file+1); + len = strlen(name); + } else { + len = (p - file) - 1; + strncpy(name, file+1, len); + name[len] = '\0'; + } + /*printf("name: %s\n");*/ + if ((pw = getpwnam(name)) == NULL) { + elog(WARN, "No such user: %s\n", name); + ind = 0; + } else { + strcpy(str, pw->pw_dir); + ind = len + 1; + } + } + } else if (file[0] == '$') { /* $POSTGRESHOME, etc. expand it. */ + char environment[80], *envirp, *p; + int len; + + if ((p = (char *) strchr(file, '/')) == NULL) { + strcpy(environment, file+1); + len = strlen(environment); + } else { + len = (p - file) - 1; + strncpy(environment, file+1, len); + environment[len] = '\0'; + } + envirp = getenv(environment); + if (envirp) { + strcpy(str, envirp); + ind = len + 1; + } + else { + elog(WARN,"Couldn't find %s in your environment", environment); + } + } else { + ind = 0; + } + strcat(str, file+ind); + return(str); +#else + return(NULL); +#endif /* WIN32 */ +} + +char * +filename_out(char *s) +{ + char *ret; + + if (!s) + return((char *) NULL); + ret = (char *) palloc(strlen(s) + 1); + if (!ret) + elog(WARN, "filename_out: palloc failed"); + return(strcpy(ret, s)); +} |