From f20612103ae7c7cddd82fe3a563774c8806cf859 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sun, 15 Jan 2017 22:51:11 +0100 Subject: [PATCH] Fix compile with MSVC >= 2015 Signed-off-by: Sven Strickroth --- ext/build/libgit2.vcxproj | 1 + ext/build/libgit2.vcxproj.filters | 3 + ...ile-with-non-MS-VisualStudio-or-MSVC-2015.patch | 132 +++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 ext/libgit2-0009-Fix-compile-with-non-MS-VisualStudio-or-MSVC-2015.patch diff --git a/ext/build/libgit2.vcxproj b/ext/build/libgit2.vcxproj index 5307b379c..ea2f56f4b 100644 --- a/ext/build/libgit2.vcxproj +++ b/ext/build/libgit2.vcxproj @@ -197,6 +197,7 @@ + diff --git a/ext/build/libgit2.vcxproj.filters b/ext/build/libgit2.vcxproj.filters index d8f3dd086..d88de0708 100644 --- a/ext/build/libgit2.vcxproj.filters +++ b/ext/build/libgit2.vcxproj.filters @@ -494,6 +494,9 @@ Source Files + + Source Files\win32 + diff --git a/ext/libgit2-0009-Fix-compile-with-non-MS-VisualStudio-or-MSVC-2015.patch b/ext/libgit2-0009-Fix-compile-with-non-MS-VisualStudio-or-MSVC-2015.patch new file mode 100644 index 000000000..af03bb93d --- /dev/null +++ b/ext/libgit2-0009-Fix-compile-with-non-MS-VisualStudio-or-MSVC-2015.patch @@ -0,0 +1,132 @@ +From 14e40f97d384fabec65f256fa796f97e02b4c16b Mon Sep 17 00:00:00 2001 +From: Sven Strickroth +Date: Sat, 14 Jan 2017 19:59:24 +0100 +Subject: [PATCH 2/3] Fix compile with non MS VisualStudio or MSVC >= 2015 + +Signed-off-by: Sven Strickroth +--- + src/win32/w32_dosmaperr.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 112 insertions(+) + create mode 100644 src/win32/w32_dosmaperr.c + +diff --git a/src/win32/w32_dosmaperr.c b/src/win32/w32_dosmaperr.c +new file mode 100644 +index 000000000..7907d0412 +--- /dev/null ++++ b/src/win32/w32_dosmaperr.c +@@ -0,0 +1,112 @@ ++/* ++ * Copyright (C) the libgit2 contributors. All rights reserved. ++ * ++ * This file is part of libgit2, distributed under the GNU GPL v2 with ++ * a Linking Exception. For full terms see the included COPYING file. ++ * ++ * struct doserrmap: auto-generated from winerror.h and errno.h using undoc'd _dosmaperr. ++ * Inspired by ReactOS reactos\sdk\lib\crt\stdlib\doserrmap.h ++ */ ++ ++ ++#if !defined(_MSC_VER) || _MSC_VER >= 1900 ++#include ++#include ++ ++static const struct { ++ unsigned long winerr; ++ int en; ++} doserrors[] = ++{ { ERROR_FILE_NOT_FOUND, ENOENT }, ++ { ERROR_PATH_NOT_FOUND, ENOENT }, ++ { ERROR_TOO_MANY_OPEN_FILES, EMFILE }, ++ { ERROR_ACCESS_DENIED, EACCES }, ++ { ERROR_INVALID_HANDLE, EBADF }, ++ { ERROR_ARENA_TRASHED, ENOMEM }, ++ { ERROR_NOT_ENOUGH_MEMORY, ENOMEM }, ++ { ERROR_INVALID_BLOCK, ENOMEM }, ++ { ERROR_BAD_ENVIRONMENT, E2BIG }, ++ { ERROR_BAD_FORMAT, ENOEXEC }, ++ { ERROR_INVALID_DRIVE, ENOENT }, ++ { ERROR_CURRENT_DIRECTORY, EACCES }, ++ { ERROR_NOT_SAME_DEVICE, EXDEV }, ++ { ERROR_NO_MORE_FILES, ENOENT }, ++ { ERROR_WRITE_PROTECT, EACCES }, ++ { ERROR_BAD_UNIT, EACCES }, ++ { ERROR_NOT_READY, EACCES }, ++ { ERROR_BAD_COMMAND, EACCES }, ++ { ERROR_CRC, EACCES }, ++ { ERROR_BAD_LENGTH, EACCES }, ++ { ERROR_SEEK, EACCES }, ++ { ERROR_NOT_DOS_DISK, EACCES }, ++ { ERROR_SECTOR_NOT_FOUND, EACCES }, ++ { ERROR_OUT_OF_PAPER, EACCES }, ++ { ERROR_WRITE_FAULT, EACCES }, ++ { ERROR_READ_FAULT, EACCES }, ++ { ERROR_GEN_FAILURE, EACCES }, ++ { ERROR_SHARING_VIOLATION, EACCES }, ++ { ERROR_LOCK_VIOLATION, EACCES }, ++ { ERROR_WRONG_DISK, EACCES }, ++ { ERROR_SHARING_BUFFER_EXCEEDED, EACCES }, ++ { ERROR_BAD_NETPATH, ENOENT }, ++ { ERROR_NETWORK_ACCESS_DENIED, EACCES }, ++ { ERROR_BAD_NET_NAME, ENOENT }, ++ { ERROR_FILE_EXISTS, EEXIST }, ++ { ERROR_CANNOT_MAKE, EACCES }, ++ { ERROR_FAIL_I24, EACCES }, ++ { ERROR_NO_PROC_SLOTS, EAGAIN }, ++ { ERROR_DRIVE_LOCKED, EACCES }, ++ { ERROR_BROKEN_PIPE, EPIPE }, ++ { ERROR_DISK_FULL, ENOSPC }, ++ { ERROR_INVALID_TARGET_HANDLE, EBADF }, ++ { ERROR_WAIT_NO_CHILDREN, ECHILD }, ++ { ERROR_CHILD_NOT_COMPLETE, ECHILD }, ++ { ERROR_DIRECT_ACCESS_HANDLE, EBADF }, ++ { ERROR_SEEK_ON_DEVICE, EACCES }, ++ { ERROR_DIR_NOT_EMPTY, ENOTEMPTY }, ++ { ERROR_NOT_LOCKED, EACCES }, ++ { ERROR_BAD_PATHNAME, ENOENT }, ++ { ERROR_MAX_THRDS_REACHED, EAGAIN }, ++ { ERROR_LOCK_FAILED, EACCES }, ++ { ERROR_ALREADY_EXISTS, EEXIST }, ++ { ERROR_INVALID_STARTING_CODESEG, ENOEXEC }, ++ { ERROR_INVALID_STACKSEG, ENOEXEC }, ++ { ERROR_INVALID_MODULETYPE, ENOEXEC }, ++ { ERROR_INVALID_EXE_SIGNATURE, ENOEXEC }, ++ { ERROR_EXE_MARKED_INVALID, ENOEXEC }, ++ { ERROR_BAD_EXE_FORMAT, ENOEXEC }, ++ { ERROR_ITERATED_DATA_EXCEEDS_64k, ENOEXEC }, ++ { ERROR_INVALID_MINALLOCSIZE, ENOEXEC }, ++ { ERROR_DYNLINK_FROM_INVALID_RING, ENOEXEC }, ++ { ERROR_IOPL_NOT_ENABLED, ENOEXEC }, ++ { ERROR_INVALID_SEGDPL, ENOEXEC }, ++ { ERROR_AUTODATASEG_EXCEEDS_64k, ENOEXEC }, ++ { ERROR_RING2SEG_MUST_BE_MOVABLE, ENOEXEC }, ++ { ERROR_RELOC_CHAIN_XEEDS_SEGLIM, ENOEXEC }, ++ { ERROR_INFLOOP_IN_RELOC_CHAIN, ENOEXEC }, ++ { ERROR_FILENAME_EXCED_RANGE, ENOENT }, ++ { ERROR_NESTING_NOT_ALLOWED, EAGAIN }, ++ { ERROR_NOT_ENOUGH_QUOTA, ENOMEM } ++}; ++ ++void _dosmaperr(unsigned long e) ++{ ++ unsigned int i; ++ if (e == 0) ++ { ++ errno = 0; ++ return; ++ } ++ ++ for (i = 0; i < sizeof(doserrors) / sizeof(doserrors[0]); ++i) ++ { ++ if (doserrors[i].winerr == e) ++ { ++ errno = doserrors[i].en; ++ return; ++ } ++ } ++ ++ errno = EINVAL; ++} ++#endif +-- +2.11.0.windows.1 + -- 2.11.4.GIT