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) == ';')
71 else if (isalpha((
unsigned char) path[0]) && path[1] ==
':')
79 #define skip_drive(path) (path)
126 for (p = pathlist; *p; p++)
197 GetShortPathName(path, path,
MAXPGPATH - 1);
200 for (ptr = path; *ptr; ptr++)
220 const char *head,
const char *tail)
222 if (ret_path != head)
271 bool was_sep =
false;
281 for (p = path; *p; p++)
291 if (p > path && *(p - 1) ==
'"')
312 for (; *p; p++, to_p++)
315 while (*p ==
'/' && was_sep)
319 was_sep = (*p ==
'/');
343 parsed = unparse = (spath + 1);
348 parsed = unparse = spath;
351 while (*unparse !=
'\0')
357 unparse_next = unparse;
358 while (*unparse_next && *unparse_next !=
'/')
360 if (*unparse_next !=
'\0')
361 *unparse_next++ =
'\0';
364 if (strcmp(unparse,
".") == 0)
367 unparse = unparse_next;
371 if (strcmp(unparse,
"..") == 0)
372 is_double_dot =
true;
377 is_double_dot =
false;
399 if (--pathdepth == 0)
431 if (--pathdepth == 0)
477 unparse = unparse_next;
509 if (path[0] ==
'.' &&
511 (path[2] ==
'\0' || path[2] ==
'/'))
544 else if (isalpha((
unsigned char) path[0]) && path[1] ==
':' &&
561 int path1_len = strlen(path1);
563 if (strncmp(path1, path2, path1_len) == 0 &&
564 (
IS_DIR_SEP(path2[path1_len]) || path2[path1_len] ==
'\0'))
576 const char *nodir_name;
592 fprintf(stderr,
"%s: out of memory\n", nodir_name);
596 #if defined(__CYGWIN__) || defined(WIN32)
624 return (
int) *
s1 - (int) *
s2;
682 tail_len = strlen(
bin_path) - prefix_len;
695 tail_start = (int) strlen(ret_path) - tail_len;
696 if (tail_start > 0 &&
700 ret_path[tail_start] =
'\0';
750 (
errcode(ERRCODE_OUT_OF_MEMORY),
751 errmsg(
"out of memory")));
753 fprintf(stderr,
_(
"out of memory\n"));
758 if (getcwd(
buf, buflen))
760 else if (errno == ERANGE)
768 int save_errno = errno;
773 elog(
ERROR,
"could not get current working directory: %m");
775 fprintf(stderr,
_(
"could not get current working directory: %s\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");
938 if (home == NULL || home[0] ==
'\0')
952 tmppath = getenv(
"APPDATA");
1000 if (path[0] ==
'\0')
1004 for (p = path + strlen(path) - 1;
IS_DIR_SEP(*p) && p > path; p--)
1010 for (; p > path &&
IS_DIR_SEP(*(p - 1)); p--)
1031 p = path + strlen(path);
1050 size_t len = strlen(subdir);
1054 memmove(path, subdir,
len);
#define unconstify(underlying_type, expr)
elog(ERROR, "%s: %s", p2, msg)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
char my_exec_path[MAXPGPATH]
static char bin_path[MAXPGPATH]
Assert(fmt[strlen(fmt) - 1] !='\n')
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)
char * last_dir_separator(const char *filename)
void get_man_path(const char *my_exec_path, char *ret_path)
bool get_home_path(char *ret_path)
char * make_absolute_path(const char *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 * first_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)
void canonicalize_path(char *path)
void get_parent_directory(char *path)
const char * get_progname(const char *argv0)
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)
char * first_path_var_separator(const char *pathlist)
void make_native_path(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)
bool pg_get_user_home_dir(uid_t user_id, char *buffer, size_t buflen)
unsigned char pg_tolower(unsigned char ch)
size_t strlcpy(char *dst, const char *src, size_t siz)