Sorry, I just noticed I sent the wrong patch. Here is the correct patch.
Index: cmake-3.12.1/Utilities/cmlibuv/src/unix/fs.c =================================================================== --- cmake-3.12.1.orig/Utilities/cmlibuv/src/unix/fs.c +++ cmake-3.12.1/Utilities/cmlibuv/src/unix/fs.c @@ -426,6 +426,7 @@ static ssize_t uv__fs_scandir(uv_fs_t* r } +#if _POSIX_VERSION < 200809L static ssize_t uv__fs_pathmax_size(const char* path) { ssize_t pathmax; @@ -441,41 +442,52 @@ static ssize_t uv__fs_pathmax_size(const return pathmax; } +#endif static ssize_t uv__fs_readlink(uv_fs_t* req) { + ssize_t size = 1024; ssize_t len; char* buf; + while (1) { + buf = uv__malloc(size + 1); - len = uv__fs_pathmax_size(req->path); - buf = uv__malloc(len + 1); - - if (buf == NULL) { - errno = ENOMEM; - return -1; - } + if (buf == NULL) { + errno = ENOMEM; + return -1; + } #if defined(__MVS__) - len = os390_readlink(req->path, buf, len); + len = os390_readlink(req->path, buf, size); #else - len = readlink(req->path, buf, len); + len = readlink(req->path, buf, size); #endif - - if (len == -1) { - uv__free(buf); - return -1; + if (len == -1) { + uv__free(buf); + return -1; + } + + if (len < size) { + buf[len] = '\0'; + req->ptr = buf; + return 0; + } + free(buf); + size *= 2; } - - buf[len] = '\0'; - req->ptr = buf; - - return 0; } static ssize_t uv__fs_realpath(uv_fs_t* req) { - ssize_t len; char* buf; +#if _POSIX_VERSION >= 200809L + buf = realpath(req->path, NULL); + if (buf == NULL) { + return -1; + } +#else + ssize_t len; + len = uv__fs_pathmax_size(req->path); buf = uv__malloc(len + 1); @@ -488,6 +500,7 @@ static ssize_t uv__fs_realpath(uv_fs_t* uv__free(buf); return -1; } +#endif req->ptr = buf; -- Happy hacking Petter Reinholdtsen