diff options
author | Bruce Momjian | 2011-02-03 15:46:31 +0000 |
---|---|---|
committer | Bruce Momjian | 2011-02-03 15:47:06 +0000 |
commit | 35b0a6b205c25d592b966aa17d3c6f9e5a88eb62 (patch) | |
tree | 68d79a598bc84d77ad6de078d784ea2fe2b16e1f | |
parent | 76129e7f14b4605db0a046e13abef0e255ffe007 (diff) |
Simplify code used in is_absolute_path() macro; also add comment about
'E:abc' Win32 path handling.
-rw-r--r-- | src/include/port.h | 18 | ||||
-rw-r--r-- | src/port/path.c | 6 |
2 files changed, 14 insertions, 10 deletions
diff --git a/src/include/port.h b/src/include/port.h index 4f0c0c1b08..2020a26060 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -68,17 +68,27 @@ extern void pgfnames_cleanup(char **filenames); * By making this a macro we avoid needing to include path.c in libpq. */ #ifndef WIN32 +#define IS_DIR_SEP(ch) ((ch) == '/') + #define is_absolute_path(filename) \ ( \ - ((filename)[0] == '/') \ + IS_DIR_SEP((filename)[0]) \ ) #else +#define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\') + +/* + * On Win32, a drive letter _not_ followed by a slash, e.g. 'E:abc', is + * relative to the cwd on that drive, or the drive's root directory + * if that drive has no cwd. Because the path itself cannot tell us + * which is the case, we have to assume the worst, i.e. that it is not + * absolute; this check is done by IS_DIR_SEP(filename[2]). + */ #define is_absolute_path(filename) \ ( \ - ((filename)[0] == '/') || \ - (filename)[0] == '\\' || \ + IS_DIR_SEP((filename)[0]) || \ (isalpha((unsigned char) ((filename)[0])) && (filename)[1] == ':' && \ - ((filename)[2] == '\\' || (filename)[2] == '/')) \ + IS_DIR_SEP((filename)[2])) \ ) #endif diff --git a/src/port/path.c b/src/port/path.c index ccf801ead6..5b0056dfe5 100644 --- a/src/port/path.c +++ b/src/port/path.c @@ -35,12 +35,6 @@ #ifndef WIN32 -#define IS_DIR_SEP(ch) ((ch) == '/') -#else -#define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\') -#endif - -#ifndef WIN32 #define IS_PATH_VAR_SEP(ch) ((ch) == ':') #else #define IS_PATH_VAR_SEP(ch) ((ch) == ';') |