/* Synched up with: Not in FSF. */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include <sys/types.h>
-#if defined(HAVE_UNISTD_H) || defined(STDC_HEADERS)
-#include <unistd.h>
-#endif
#include <stdio.h>
#include <string.h>
-#ifdef _POSIX_VERSION
-#include <limits.h> /* for PATH_MAX */
-#else
-#include <sys/param.h> /* for MAXPATHLEN */
-#endif
#include <errno.h>
-#ifndef STDC_HEADERS
-extern int errno;
+#include <limits.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if defined (HAVE_SYS_PARAM_H)
+#include <sys/param.h>
#endif
-#ifdef WINDOWSNT
+#ifdef WIN32_NATIVE
#include <direct.h>
#endif
#include <sys/stat.h> /* for S_IFLNK */
-#ifndef PATH_MAX
-#ifdef _POSIX_VERSION
-#define PATH_MAX _POSIX_PATH_MAX
-#else
-#ifdef MAXPATHLEN
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 1024
-#endif
+#if !defined (HAVE_GETCWD) && defined (HAVE_GETWD)
+#undef getcwd
+#define getcwd(buffer, len) getwd (buffer)
#endif
+
+#ifndef PATH_MAX
+# if defined (_POSIX_PATH_MAX)
+# define PATH_MAX _POSIX_PATH_MAX
+# elif defined (MAXPATHLEN)
+# define PATH_MAX MAXPATHLEN
+# else
+# define PATH_MAX 1024
+# endif
#endif
#define MAX_READLINKS 32
-#ifdef __STDC__
-char *xrealpath(const char *path, char resolved_path [])
-#else
-char *xrealpath(path, resolved_path)
-const char *path;
-char resolved_path [];
-#endif
+char * xrealpath (const char *path, char resolved_path []);
+char *
+xrealpath (const char *path, char resolved_path [])
{
char copy_path[PATH_MAX];
char *new_path = resolved_path;
#endif
/* Make a copy of the source path since we may need to modify it. */
- strcpy(copy_path, path);
+ strcpy (copy_path, path);
path = copy_path;
max_path = copy_path + PATH_MAX - 2;
-#ifdef WINDOWSNT
+#ifdef WIN32_NATIVE
/*
** In NT we have two different cases: (1) the path name begins
** with a drive letter, e.g., "C:"; and (2) the path name begins
*/
else if (*path == '/')
{
- getcwd(new_path, PATH_MAX - 1);
+ getcwd (new_path, PATH_MAX - 1);
new_path += 3;
path++;
}
*/
else
{
- getcwd(new_path, PATH_MAX - 1);
+ getcwd (new_path, PATH_MAX - 1);
new_path += strlen(new_path);
if (new_path[-1] != '/')
*new_path++ = '/';
}
#else
- /* If it's a relative pathname use getwd for starters. */
+ /* If it's a relative pathname use getcwd for starters. */
if (*path != '/')
{
-#ifdef HAVE_GETCWD
- getcwd(new_path, PATH_MAX - 1);
-#else
- getwd(new_path);
-#endif
+ getcwd (new_path, PATH_MAX - 1);
new_path += strlen(new_path);
if (new_path[-1] != '/')
*new_path++ = '/';
continue;
}
- if (path[1] == '.')
+ /* Handle ".." */
+ if (path[1] == '.' &&
+ (path[2] == '\0' || path[2] == '/'))
{
- if (path[2] == '\0' || path[2] == '/')
- {
- path += 2;
-
- /* Ignore ".." at root. */
- if (new_path == resolved_path + 1)
- continue;
-
- /* Handle ".." by backing up. */
- while ((--new_path)[-1] != '/')
- ;
- continue;
- }
+ path += 2;
+
+ /* Ignore ".." at root. */
+ if (new_path == resolved_path + 1)
+ continue;
+
+ /* Handle ".." by backing up. */
+ while ((--new_path)[-1] != '/')
+ ;
+ continue;
}
}
#ifdef S_IFLNK
/* See if latest pathname component is a symlink. */
*new_path = '\0';
- n = readlink(resolved_path, link_path, PATH_MAX - 1);
+ n = readlink (resolved_path, link_path, PATH_MAX - 1);
if (n < 0)
{