28#define _WIN32_IE 0x0500
39#include "pg_config_paths.h"
43#define IS_PATH_VAR_SEP(ch) ((ch) == ':')
45#define IS_PATH_VAR_SEP(ch) ((ch) == ';')
72 else if (isalpha((
unsigned char) path[0]) && path[1] ==
':')
80#define skip_drive(path) (path)
127 for (p = pathlist; *p; p++)
198 GetShortPathName(path, path,
MAXPGPATH - 1);
201 for (ptr = path; *ptr; ptr++)
221 const char *head,
const char *tail)
223 if (ret_path != head)
272 bool was_sep =
false;
282 for (p = path; *p; p++)
292 if (p > path && *(p - 1) ==
'"')
313 for (; *p; p++, to_p++)
316 while (*p ==
'/' && was_sep)
320 was_sep = (*p ==
'/');
344 parsed = unparse = (spath + 1);
349 parsed = unparse = spath;
352 while (*unparse !=
'\0')
358 unparse_next = unparse;
359 while (*unparse_next && *unparse_next !=
'/')
361 if (*unparse_next !=
'\0')
362 *unparse_next++ =
'\0';
365 if (strcmp(unparse,
".") == 0)
368 unparse = unparse_next;
372 if (strcmp(unparse,
"..") == 0)
373 is_double_dot =
true;
378 is_double_dot =
false;
400 if (--pathdepth == 0)
432 if (--pathdepth == 0)
478 unparse = unparse_next;
510 if (path[0] ==
'.' &&
512 (path[2] ==
'\0' || path[2] ==
'/'))
545 else if (isalpha((
unsigned char) path[0]) && path[1] ==
':' &&
562 int path1_len = strlen(path1);
564 if (strncmp(path1, path2, path1_len) == 0 &&
565 (
IS_DIR_SEP(path2[path1_len]) || path2[path1_len] ==
'\0'))
577 const char *nodir_name;
593 fprintf(stderr,
"%s: out of memory\n", nodir_name);
597#if defined(__CYGWIN__) || defined(WIN32)
625 return (
int) *
s1 - (int) *
s2;
683 tail_len = strlen(
bin_path) - prefix_len;
696 tail_start = (int) strlen(ret_path) - tail_len;
697 if (tail_start > 0 &&
701 ret_path[tail_start] =
'\0';
751 (
errcode(ERRCODE_OUT_OF_MEMORY),
752 errmsg(
"out of memory")));
754 fprintf(stderr,
_(
"out of memory\n"));
759 if (getcwd(
buf, buflen))
761 else if (errno == ERANGE)
769 int save_errno = errno;
774 elog(
ERROR,
"could not get current working directory: %m");
776 fprintf(stderr,
_(
"could not get current working directory: %m\n"));
782 new =
malloc(strlen(
buf) + strlen(path) + 2);
788 (
errcode(ERRCODE_OUT_OF_MEMORY),
789 errmsg(
"out of memory")));
791 fprintf(stderr,
_(
"out of memory\n"));
805 (
errcode(ERRCODE_OUT_OF_MEMORY),
806 errmsg(
"out of memory")));
808 fprintf(stderr,
_(
"out of memory\n"));
937 home = getenv(
"HOME");
950 rc = getpwuid_r(geteuid(), &pwbuf,
buf,
sizeof buf, &pw);
966 tmppath = getenv(
"APPDATA");
1014 if (path[0] ==
'\0')
1018 for (p = path + strlen(path) - 1;
IS_DIR_SEP(*p) && p > path; p--)
1024 for (; p > path &&
IS_DIR_SEP(*(p - 1)); p--)
1045 p = path + strlen(path);
1064 size_t len = strlen(subdir);
1068 memmove(path, subdir,
len);
#define unconstify(underlying_type, expr)
#define Assert(condition)
#define fprintf(file, fmt, msg)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
char my_exec_path[MAXPGPATH]
static char bin_path[MAXPGPATH]
void cleanup_path(char *path)
void get_share_path(const char *my_exec_path, char *ret_path)
void get_pkglib_path(const char *my_exec_path, char *ret_path)
void get_locale_path(const char *my_exec_path, char *ret_path)
void join_path_components(char *ret_path, const char *head, const char *tail)
#define IS_PATH_VAR_SEP(ch)
void get_man_path(const char *my_exec_path, char *ret_path)
bool get_home_path(char *ret_path)
void get_include_path(const char *my_exec_path, char *ret_path)
static char * append_subdir_to_path(char *path, char *subdir)
bool path_is_prefix_of_path(const char *path1, const char *path2)
char * last_dir_separator(const char *filename)
bool path_is_relative_and_below_cwd(const char *path)
void get_lib_path(const char *my_exec_path, char *ret_path)
char * first_path_var_separator(const char *pathlist)
void canonicalize_path(char *path)
void get_parent_directory(char *path)
static void trim_trailing_separator(char *path)
static char * trim_directory(char *path)
static void make_relative_path(char *ret_path, const char *target_path, const char *bin_path, const char *my_exec_path)
void get_etc_path(const char *my_exec_path, char *ret_path)
static int dir_strcmp(const char *s1, const char *s2)
bool path_contains_parent_reference(const char *path)
void make_native_path(char *filename)
char * make_absolute_path(const char *path)
const char * get_progname(const char *argv0)
char * first_dir_separator(const char *filename)
void get_doc_path(const char *my_exec_path, char *ret_path)
void get_html_path(const char *my_exec_path, char *ret_path)
void get_pkginclude_path(const char *my_exec_path, char *ret_path)
bool has_drive_prefix(const char *path)
void get_includeserver_path(const char *my_exec_path, char *ret_path)
@ RELATIVE_WITH_PARENT_REF
#define is_absolute_path(filename)
int pg_strcasecmp(const char *s1, const char *s2)
unsigned char pg_tolower(unsigned char ch)
size_t strlcpy(char *dst, const char *src, size_t siz)