mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Postgres95 1.01 Distribution - Virgin Sources
This commit is contained in:
120
src/backend/utils/adt/filename.c
Normal file
120
src/backend/utils/adt/filename.c
Normal file
@@ -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));
|
||||
}
|
||||
Reference in New Issue
Block a user