28 #define _WIN32_IE 0x0500 38 #include "pg_config_paths.h" 42 #define IS_PATH_VAR_SEP(ch) ((ch) == ':') 44 #define IS_PATH_VAR_SEP(ch) ((ch) == ';') 70 else if (isalpha((
unsigned char) path[0]) && path[1] ==
':')
78 #define skip_drive(path) (path) 125 for (p = pathlist; *p; p++)
171 for (p = filename; *p; p++)
196 GetShortPathName(path, path,
MAXPGPATH - 1);
199 for (ptr = path; *ptr; ptr++)
219 const char *head,
const char *tail)
221 if (ret_path != head)
259 bool was_sep =
false;
268 for (p = path; *p; p++)
278 if (p > path && *(p - 1) ==
'"')
299 for (; *p; p++, to_p++)
302 while (*p ==
'/' && was_sep)
306 was_sep = (*p ==
'/');
324 int len = strlen(spath);
326 if (len >= 2 && strcmp(spath + len - 2,
"/.") == 0)
328 else if (strcmp(spath,
".") == 0)
331 if (pending_strips > 0)
335 else if ((len >= 3 && strcmp(spath + len - 3,
"/..") == 0) ||
336 strcmp(spath,
"..") == 0)
341 else if (pending_strips > 0 && *spath !=
'\0')
354 if (pending_strips > 0)
361 while (--pending_strips > 0)
382 path_len = strlen(path);
388 if (strcmp(path,
"..") == 0 ||
389 strncmp(path,
"../", 3) == 0 ||
390 strstr(path,
"/../") != NULL ||
391 (path_len >= 3 && strcmp(path + path_len - 3,
"/..") == 0))
423 else if (isalpha((
unsigned char) path[0]) && path[1] ==
':' &&
440 int path1_len = strlen(path1);
442 if (strncmp(path1, path2, path1_len) == 0 &&
443 (
IS_DIR_SEP(path2[path1_len]) || path2[path1_len] ==
'\0'))
455 const char *nodir_name;
468 progname = strdup(nodir_name);
469 if (progname == NULL)
471 fprintf(stderr,
"%s: out of memory\n", nodir_name);
475 #if defined(__CYGWIN__) || defined(WIN32) 477 if (strlen(progname) >
sizeof(
EXE) - 1 &&
479 progname[strlen(progname) - (
sizeof(
EXE) - 1)] =
'\0';
503 return (
int) *s1 - (int) *s2;
552 for (i = 0; target_path[
i] && bin_path[
i]; i++)
556 else if (target_path[i] != bin_path[i])
561 tail_len = strlen(bin_path) - prefix_len;
574 tail_start = (int) strlen(ret_path) - tail_len;
575 if (tail_start > 0 &&
577 dir_strcmp(ret_path + tail_start, bin_path + prefix_len) == 0)
579 ret_path[tail_start] =
'\0';
629 (
errcode(ERRCODE_OUT_OF_MEMORY),
630 errmsg(
"out of memory")));
632 fprintf(stderr,
_(
"out of memory\n"));
637 if (getcwd(buf, buflen))
639 else if (errno == ERANGE)
647 int save_errno = errno;
652 elog(
ERROR,
"could not get current working directory: %m");
654 fprintf(stderr,
_(
"could not get current working directory: %s\n"),
661 new =
malloc(strlen(buf) + strlen(path) + 2);
667 (
errcode(ERRCODE_OUT_OF_MEMORY),
668 errmsg(
"out of memory")));
670 fprintf(stderr,
_(
"out of memory\n"));
674 sprintf(
new,
"%s/%s", buf, path);
684 (
errcode(ERRCODE_OUT_OF_MEMORY),
685 errmsg(
"out of memory")));
687 fprintf(stderr,
_(
"out of memory\n"));
811 struct passwd pwdstr;
812 struct passwd *pwd = NULL;
814 (void)
pqGetpwuid(geteuid(), &pwdstr, pwdbuf,
sizeof(pwdbuf), &pwd);
829 tmppath = getenv(
"APPDATA");
878 for (p = path + strlen(path) - 1;
IS_DIR_SEP(*p) && p > path; p--)
904 p = path + strlen(path);
void get_pkglib_path(const char *my_exec_path, char *ret_path)
void get_pkginclude_path(const char *my_exec_path, char *ret_path)
void cleanup_path(char *path)
const char * get_progname(const char *argv0)
void canonicalize_path(char *path)
static void trim_directory(char *path)
void get_lib_path(const char *my_exec_path, char *ret_path)
void make_native_path(char *filename)
bool has_drive_prefix(const char *path)
unsigned char pg_tolower(unsigned char ch)
int errcode(int sqlerrcode)
char * make_absolute_path(const char *path)
void get_etc_path(const char *my_exec_path, char *ret_path)
bool path_is_prefix_of_path(const char *path1, const char *path2)
void get_includeserver_path(const char *my_exec_path, char *ret_path)
int pg_strcasecmp(const char *s1, const char *s2)
bool path_is_relative_and_below_cwd(const char *path)
void get_parent_directory(char *path)
void get_share_path(const char *my_exec_path, char *ret_path)
bool path_contains_parent_reference(const char *path)
bool get_home_path(char *ret_path)
void get_locale_path(const char *my_exec_path, char *ret_path)
void get_html_path(const char *my_exec_path, char *ret_path)
char * first_path_var_separator(const char *pathlist)
char * last_dir_separator(const char *filename)
#define is_absolute_path(filename)
static void make_relative_path(char *ret_path, const char *target_path, const char *bin_path, const char *my_exec_path)
#define unconstify(underlying_type, expr)
void get_man_path(const char *my_exec_path, char *ret_path)
void get_include_path(const char *my_exec_path, char *ret_path)
char my_exec_path[MAXPGPATH]
#define IS_PATH_VAR_SEP(ch)
static void trim_trailing_separator(char *path)
static int dir_strcmp(const char *s1, const char *s2)
void join_path_components(char *ret_path, const char *head, const char *tail)
#define ereport(elevel,...)
size_t strlcpy(char *dst, const char *src, size_t siz)
char * first_dir_separator(const char *filename)
int pqGetpwuid(uid_t uid, struct passwd *resultbuf, char *buffer, size_t buflen, struct passwd **result)
void get_doc_path(const char *my_exec_path, char *ret_path)
int errmsg(const char *fmt,...)
static char bin_path[MAXPGPATH]