39 #include "lrealpath.h"
55 #if defined(HAVE_CANONICALIZE_FILE_NAME) \
56 && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
57 extern char *canonicalize_file_name (
const char *);
60 #if defined(HAVE_REALPATH)
61 # if defined (PATH_MAX)
62 # define REALPATH_LIMIT PATH_MAX
64 # if defined (MAXPATHLEN)
65 # define REALPATH_LIMIT MAXPATHLEN
71 # define WIN32_LEAN_AND_MEAN
77 lrealpath (
const char *filename)
83 #if defined(REALPATH_LIMIT)
85 char buf[REALPATH_LIMIT];
86 const char *rp = realpath (filename, buf);
96 #elif defined(HAVE_CANONICALIZE_FILE_NAME)
98 char *rp = canonicalize_file_name (filename);
100 return strdup (filename);
113 #elif defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H)
116 long path_max = pathconf (
"/", _PC_PATH_MAX);
120 char *buf, *rp, *ret;
121 buf = (
char *) malloc (path_max);
124 rp = realpath (filename, buf);
125 ret = strdup (rp ? rp : filename);
142 #elif defined (_WIN32)
146 DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
147 if (len == 0 || len > MAX_PATH - 1)
148 return strdup (filename);
154 CharLowerBuff (buf, len);
161 return strdup (filename);