37 #include "lrealpath.h"
53 #if defined(HAVE_CANONICALIZE_FILE_NAME) \
54 && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
55 extern char *canonicalize_file_name (
const char *);
58 #if defined(HAVE_REALPATH)
59 # if defined (PATH_MAX)
60 # define REALPATH_LIMIT PATH_MAX
62 # if defined (MAXPATHLEN)
63 # define REALPATH_LIMIT MAXPATHLEN
69 # define WIN32_LEAN_AND_MEAN
75 lrealpath (
const char *filename)
81 #if defined(REALPATH_LIMIT)
83 char buf[REALPATH_LIMIT];
84 const char *rp = realpath (filename, buf);
94 #elif defined(HAVE_CANONICALIZE_FILE_NAME)
96 char *rp = canonicalize_file_name (filename);
98 return strdup (filename);
111 #elif defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H)
114 long path_max = pathconf (
"/", _PC_PATH_MAX);
118 char *buf, *rp, *ret;
119 buf = (
char *) malloc (path_max);
122 rp = realpath (filename, buf);
123 ret = strdup (rp ? rp : filename);
140 #elif defined (_WIN32)
144 DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
145 if (len == 0 || len > MAX_PATH - 1)
146 return strdup (filename);
152 CharLowerBuff (buf, len);
159 return strdup (filename);