From: Fletcher T. Penney Date: Wed, 30 Aug 2017 10:02:35 +0000 (-0400) Subject: FIXED: Fix issues with Windows compiling X-Git-Tag: 6.2.1^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4dd99884b0f3d3da68418be3629f3c058c80747c;p=multimarkdown FIXED: Fix issues with Windows compiling --- diff --git a/Sources/libMultiMarkdown/transclude.c b/Sources/libMultiMarkdown/transclude.c index d92da71..fa362fa 100644 --- a/Sources/libMultiMarkdown/transclude.c +++ b/Sources/libMultiMarkdown/transclude.c @@ -268,7 +268,7 @@ DString * scan_file(const char * fname) { wchar_t wstr[wchars_num]; MultiByteToWideChar(CP_UTF8, 0, fname, -1, wstr, wchars_num); - if ((file = _wfopen(wstr, L"r")) == NULL) { + if ((file = _wfopen(wstr, L"rb")) == NULL) { #else if ((file = fopen(fname, "r")) == NULL ) { diff --git a/Sources/libMultiMarkdown/zip.c b/Sources/libMultiMarkdown/zip.c index 4ebb87f..ccfa1ab 100644 --- a/Sources/libMultiMarkdown/zip.c +++ b/Sources/libMultiMarkdown/zip.c @@ -108,6 +108,15 @@ #include +// Windows deprecated mkdir() +// Fix per internet searches and modified by @f8ttyc8t () +#if (defined(_WIN32) || defined(__WIN32__)) + // Let compiler know where to find _mkdir() + #include + #define mkdir(A, B) _mkdir(A) +#endif + + // Create new zip archive void zip_new_archive(mz_zip_archive * pZip) { memset(pZip, 0, sizeof(mz_zip_archive)); diff --git a/Sources/multimarkdown/main.c b/Sources/multimarkdown/main.c index db1d961..29af4a3 100644 --- a/Sources/multimarkdown/main.c +++ b/Sources/multimarkdown/main.c @@ -143,6 +143,42 @@ char * filename_with_extension(const char * original, const char * new_extension } +// Windows does not know realpath(), so we need a "windows port" +// Fix by @f8ttyc8t () +#if (defined(_WIN32) || defined(__WIN32__)) +// Let compiler know where to find GetFullPathName() +#include + +char *realpath(const char *path, char *resolved_path) { + DWORD retval = 0; + DWORD dwBufSize = 0; // Just in case MAX_PATH differs from PATH_MAX + TCHAR *buffer = NULL; + + if (resolved_path == NULL) { + // realpath allocates appropiate bytes if resolved_path is null. This is to mimic realpath behavior + dwBufSize = PATH_MAX; // Use windows PATH_MAX constant, because we are in Windows context now. + buffer = (char*)malloc(dwBufSize); + + if (buffer == NULL) { + return NULL; // some really weird is going on... + } + } else { + dwBufSize = MAX_PATH; // buffer has been allocated using MAX_PATH earlier + buffer = resolved_path; + } + + retval = GetFullPathName(path, dwBufSize, buffer, NULL); + + if (retval == 0) { + return NULL; + printf("Failed to GetFullPathName()\n"); + } + + return buffer; +} +#endif + + int main(int argc, char** argv) { int exitcode = EXIT_SUCCESS; char * binname = "multimarkdown";