Fix compile with MSVC >= 2015
[TortoiseGit.git] / ext / libgit2-0009-Fix-compile-with-non-MS-VisualStudio-or-MSVC-2015.patch
blobaf03bb93d2d143a8de57efb15e48ec0f8c3a93e3
1 From 14e40f97d384fabec65f256fa796f97e02b4c16b Mon Sep 17 00:00:00 2001
2 From: Sven Strickroth <email@cs-ware.de>
3 Date: Sat, 14 Jan 2017 19:59:24 +0100
4 Subject: [PATCH 2/3] Fix compile with non MS VisualStudio or MSVC >= 2015
6 Signed-off-by: Sven Strickroth <email@cs-ware.de>
7 ---
8 src/win32/w32_dosmaperr.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++
9 1 file changed, 112 insertions(+)
10 create mode 100644 src/win32/w32_dosmaperr.c
12 diff --git a/src/win32/w32_dosmaperr.c b/src/win32/w32_dosmaperr.c
13 new file mode 100644
14 index 000000000..7907d0412
15 --- /dev/null
16 +++ b/src/win32/w32_dosmaperr.c
17 @@ -0,0 +1,112 @@
18 +/*
19 + * Copyright (C) the libgit2 contributors. All rights reserved.
20 + *
21 + * This file is part of libgit2, distributed under the GNU GPL v2 with
22 + * a Linking Exception. For full terms see the included COPYING file.
23 + *
24 + * struct doserrmap: auto-generated from winerror.h and errno.h using undoc'd _dosmaperr.
25 + * Inspired by ReactOS reactos\sdk\lib\crt\stdlib\doserrmap.h
26 + */
29 +#if !defined(_MSC_VER) || _MSC_VER >= 1900
30 +#include <errno.h>
31 +#include <winerror.h>
33 +static const struct {
34 + unsigned long winerr;
35 + int en;
36 +} doserrors[] =
37 +{ { ERROR_FILE_NOT_FOUND, ENOENT },
38 + { ERROR_PATH_NOT_FOUND, ENOENT },
39 + { ERROR_TOO_MANY_OPEN_FILES, EMFILE },
40 + { ERROR_ACCESS_DENIED, EACCES },
41 + { ERROR_INVALID_HANDLE, EBADF },
42 + { ERROR_ARENA_TRASHED, ENOMEM },
43 + { ERROR_NOT_ENOUGH_MEMORY, ENOMEM },
44 + { ERROR_INVALID_BLOCK, ENOMEM },
45 + { ERROR_BAD_ENVIRONMENT, E2BIG },
46 + { ERROR_BAD_FORMAT, ENOEXEC },
47 + { ERROR_INVALID_DRIVE, ENOENT },
48 + { ERROR_CURRENT_DIRECTORY, EACCES },
49 + { ERROR_NOT_SAME_DEVICE, EXDEV },
50 + { ERROR_NO_MORE_FILES, ENOENT },
51 + { ERROR_WRITE_PROTECT, EACCES },
52 + { ERROR_BAD_UNIT, EACCES },
53 + { ERROR_NOT_READY, EACCES },
54 + { ERROR_BAD_COMMAND, EACCES },
55 + { ERROR_CRC, EACCES },
56 + { ERROR_BAD_LENGTH, EACCES },
57 + { ERROR_SEEK, EACCES },
58 + { ERROR_NOT_DOS_DISK, EACCES },
59 + { ERROR_SECTOR_NOT_FOUND, EACCES },
60 + { ERROR_OUT_OF_PAPER, EACCES },
61 + { ERROR_WRITE_FAULT, EACCES },
62 + { ERROR_READ_FAULT, EACCES },
63 + { ERROR_GEN_FAILURE, EACCES },
64 + { ERROR_SHARING_VIOLATION, EACCES },
65 + { ERROR_LOCK_VIOLATION, EACCES },
66 + { ERROR_WRONG_DISK, EACCES },
67 + { ERROR_SHARING_BUFFER_EXCEEDED, EACCES },
68 + { ERROR_BAD_NETPATH, ENOENT },
69 + { ERROR_NETWORK_ACCESS_DENIED, EACCES },
70 + { ERROR_BAD_NET_NAME, ENOENT },
71 + { ERROR_FILE_EXISTS, EEXIST },
72 + { ERROR_CANNOT_MAKE, EACCES },
73 + { ERROR_FAIL_I24, EACCES },
74 + { ERROR_NO_PROC_SLOTS, EAGAIN },
75 + { ERROR_DRIVE_LOCKED, EACCES },
76 + { ERROR_BROKEN_PIPE, EPIPE },
77 + { ERROR_DISK_FULL, ENOSPC },
78 + { ERROR_INVALID_TARGET_HANDLE, EBADF },
79 + { ERROR_WAIT_NO_CHILDREN, ECHILD },
80 + { ERROR_CHILD_NOT_COMPLETE, ECHILD },
81 + { ERROR_DIRECT_ACCESS_HANDLE, EBADF },
82 + { ERROR_SEEK_ON_DEVICE, EACCES },
83 + { ERROR_DIR_NOT_EMPTY, ENOTEMPTY },
84 + { ERROR_NOT_LOCKED, EACCES },
85 + { ERROR_BAD_PATHNAME, ENOENT },
86 + { ERROR_MAX_THRDS_REACHED, EAGAIN },
87 + { ERROR_LOCK_FAILED, EACCES },
88 + { ERROR_ALREADY_EXISTS, EEXIST },
89 + { ERROR_INVALID_STARTING_CODESEG, ENOEXEC },
90 + { ERROR_INVALID_STACKSEG, ENOEXEC },
91 + { ERROR_INVALID_MODULETYPE, ENOEXEC },
92 + { ERROR_INVALID_EXE_SIGNATURE, ENOEXEC },
93 + { ERROR_EXE_MARKED_INVALID, ENOEXEC },
94 + { ERROR_BAD_EXE_FORMAT, ENOEXEC },
95 + { ERROR_ITERATED_DATA_EXCEEDS_64k, ENOEXEC },
96 + { ERROR_INVALID_MINALLOCSIZE, ENOEXEC },
97 + { ERROR_DYNLINK_FROM_INVALID_RING, ENOEXEC },
98 + { ERROR_IOPL_NOT_ENABLED, ENOEXEC },
99 + { ERROR_INVALID_SEGDPL, ENOEXEC },
100 + { ERROR_AUTODATASEG_EXCEEDS_64k, ENOEXEC },
101 + { ERROR_RING2SEG_MUST_BE_MOVABLE, ENOEXEC },
102 + { ERROR_RELOC_CHAIN_XEEDS_SEGLIM, ENOEXEC },
103 + { ERROR_INFLOOP_IN_RELOC_CHAIN, ENOEXEC },
104 + { ERROR_FILENAME_EXCED_RANGE, ENOENT },
105 + { ERROR_NESTING_NOT_ALLOWED, EAGAIN },
106 + { ERROR_NOT_ENOUGH_QUOTA, ENOMEM }
109 +void _dosmaperr(unsigned long e)
111 + unsigned int i;
112 + if (e == 0)
114 + errno = 0;
115 + return;
118 + for (i = 0; i < sizeof(doserrors) / sizeof(doserrors[0]); ++i)
120 + if (doserrors[i].winerr == e)
122 + errno = doserrors[i].en;
123 + return;
127 + errno = EINVAL;
129 +#endif
131 2.11.0.windows.1