1.0.13.4: Removing UNIX-NAMESTRING, part 4
[sbcl.git] / src / runtime / wrap.c
index af8b30e..a510702 100644 (file)
@@ -32,6 +32,8 @@
 #include <string.h>
 #include <ctype.h>
 #include <unistd.h>
+#include <errno.h>
+#include <limits.h>
 #ifndef LISP_FEATURE_WIN32
 #include <pwd.h>
 #include <sys/wait.h>
@@ -158,6 +160,41 @@ wrapped_readlink(char *path)
 #endif
 \f
 /*
+ * realpath(3), including a wrapper for Windows.
+ */
+char * sb_realpath (char *path)
+{
+#ifndef LISP_FEATURE_WIN32
+    char *ret;
+    int errnum;
+
+    if ((ret = calloc(PATH_MAX, sizeof(char))) == NULL)
+        return NULL;
+    if (realpath(path, ret) == NULL) {
+        errnum = errno;
+        free(ret);
+        errno = errnum;
+        return NULL;
+    }
+    return(ret);
+#else
+    char *ret;
+    char *cp;
+    int errnum;
+
+    if ((ret = calloc(MAX_PATH, sizeof(char))) == NULL)
+        return NULL;
+    if (GetFullPathName(path, MAX_PATH, ret, cp) == 0) {
+        errnum = errno;
+        free(ret);
+        errno = errnum;
+        return NULL;
+    }
+    return(ret);
+#endif
+}
+\f
+/*
  * stat(2) stuff
  */