diff options
author | kinichiro <kinichiro.inoguchi@gmail.com> | 2018-02-25 01:59:39 +0900 |
---|---|---|
committer | kinichiro <kinichiro.inoguchi@gmail.com> | 2018-02-25 21:56:05 +0900 |
commit | 3681d02253d29229e265720984ce81a35206de4c (patch) | |
tree | 95590bed234fb09e40e14feb5cdb6c0120f07334 | |
parent | 47781e69e2946011ea7bd0723e98a2fedff88980 (diff) | |
download | portable-3681d02253d29229e265720984ce81a35206de4c.tar.gz portable-3681d02253d29229e265720984ce81a35206de4c.tar.bz2 portable-3681d02253d29229e265720984ce81a35206de4c.zip |
Add compat bits for libtls on Windows
-rw-r--r-- | include/compat/sys/types.h | 2 | ||||
-rw-r--r-- | include/compat/unistd.h | 18 | ||||
-rw-r--r-- | tls/CMakeLists.txt | 10 | ||||
-rw-r--r-- | tls/Makefile.am | 7 | ||||
-rw-r--r-- | tls/compat/ftruncate.c | 13 | ||||
-rw-r--r-- | tls/compat/getuid.c | 14 | ||||
-rw-r--r-- | tls/compat/pread.c | 23 | ||||
-rw-r--r-- | tls/compat/pwrite.c | 23 |
8 files changed, 110 insertions, 0 deletions
diff --git a/include/compat/sys/types.h b/include/compat/sys/types.h index 473d6da..2107119 100644 --- a/include/compat/sys/types.h +++ b/include/compat/sys/types.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #ifdef __MINGW32__ | 21 | #ifdef __MINGW32__ |
22 | #include <_bsd_types.h> | 22 | #include <_bsd_types.h> |
23 | typedef uint32_t in_addr_t; | 23 | typedef uint32_t in_addr_t; |
24 | typedef uint32_t uid_t; | ||
24 | #endif | 25 | #endif |
25 | 26 | ||
26 | #ifdef _MSC_VER | 27 | #ifdef _MSC_VER |
@@ -29,6 +30,7 @@ typedef unsigned short u_short; | |||
29 | typedef unsigned int u_int; | 30 | typedef unsigned int u_int; |
30 | typedef uint32_t in_addr_t; | 31 | typedef uint32_t in_addr_t; |
31 | typedef uint32_t mode_t; | 32 | typedef uint32_t mode_t; |
33 | typedef uint32_t uid_t; | ||
32 | 34 | ||
33 | #include <basetsd.h> | 35 | #include <basetsd.h> |
34 | typedef SSIZE_T ssize_t; | 36 | typedef SSIZE_T ssize_t; |
diff --git a/include/compat/unistd.h b/include/compat/unistd.h index d596043..e70a390 100644 --- a/include/compat/unistd.h +++ b/include/compat/unistd.h | |||
@@ -7,7 +7,16 @@ | |||
7 | #define LIBCRYPTOCOMPAT_UNISTD_H | 7 | #define LIBCRYPTOCOMPAT_UNISTD_H |
8 | 8 | ||
9 | #ifndef _MSC_VER | 9 | #ifndef _MSC_VER |
10 | |||
10 | #include_next <unistd.h> | 11 | #include_next <unistd.h> |
12 | |||
13 | #ifdef __MINGW32__ | ||
14 | int ftruncate(int fd, off_t length); | ||
15 | uid_t getuid(void); | ||
16 | ssize_t pread(int d, void *buf, size_t nbytes, off_t offset); | ||
17 | ssize_t pwrite(int d, const void *buf, size_t nbytes, off_t offset); | ||
18 | #endif | ||
19 | |||
11 | #else | 20 | #else |
12 | 21 | ||
13 | #include <stdlib.h> | 22 | #include <stdlib.h> |
@@ -22,10 +31,19 @@ | |||
22 | #define X_OK 0 | 31 | #define X_OK 0 |
23 | #define F_OK 0 | 32 | #define F_OK 0 |
24 | 33 | ||
34 | #define SEEK_SET 0 | ||
35 | #define SEEK_CUR 1 | ||
36 | #define SEEK_END 2 | ||
37 | |||
25 | #define access _access | 38 | #define access _access |
26 | 39 | ||
27 | unsigned int sleep(unsigned int seconds); | 40 | unsigned int sleep(unsigned int seconds); |
28 | 41 | ||
42 | int ftruncate(int fd, off_t length); | ||
43 | uid_t getuid(void); | ||
44 | ssize_t pread(int d, void *buf, size_t nbytes, off_t offset); | ||
45 | ssize_t pwrite(int d, const void *buf, size_t nbytes, off_t offset); | ||
46 | |||
29 | #endif | 47 | #endif |
30 | 48 | ||
31 | #ifndef HAVE_GETENTROPY | 49 | #ifndef HAVE_GETENTROPY |
diff --git a/tls/CMakeLists.txt b/tls/CMakeLists.txt index bc0c8f5..0e13da5 100644 --- a/tls/CMakeLists.txt +++ b/tls/CMakeLists.txt | |||
@@ -19,6 +19,16 @@ set( | |||
19 | tls_verify.c | 19 | tls_verify.c |
20 | ) | 20 | ) |
21 | 21 | ||
22 | if(CMAKE_HOST_WIN32) | ||
23 | set( | ||
24 | TLS_SRC | ||
25 | ${TLS_SRC} | ||
26 | compat/ftruncate.c | ||
27 | compat/getuid.c | ||
28 | compat/pread.c | ||
29 | compat/pwrite.c | ||
30 | ) | ||
31 | endif() | ||
22 | 32 | ||
23 | if(NOT "${OPENSSLDIR}" STREQUAL "") | 33 | if(NOT "${OPENSSLDIR}" STREQUAL "") |
24 | add_definitions(-D_PATH_SSL_CA_FILE=\"${OPENSSLDIR}/cert.pem\") | 34 | add_definitions(-D_PATH_SSL_CA_FILE=\"${OPENSSLDIR}/cert.pem\") |
diff --git a/tls/Makefile.am b/tls/Makefile.am index bfe9571..58c0344 100644 --- a/tls/Makefile.am +++ b/tls/Makefile.am | |||
@@ -30,3 +30,10 @@ libtls_la_SOURCES += tls_peer.c | |||
30 | libtls_la_SOURCES += tls_util.c | 30 | libtls_la_SOURCES += tls_util.c |
31 | libtls_la_SOURCES += tls_verify.c | 31 | libtls_la_SOURCES += tls_verify.c |
32 | noinst_HEADERS = tls_internal.h | 32 | noinst_HEADERS = tls_internal.h |
33 | |||
34 | if HOST_WIN | ||
35 | libtls_la_SOURCES += compat/ftruncate.c | ||
36 | libtls_la_SOURCES += compat/getuid.c | ||
37 | libtls_la_SOURCES += compat/pread.c | ||
38 | libtls_la_SOURCES += compat/pwrite.c | ||
39 | endif | ||
diff --git a/tls/compat/ftruncate.c b/tls/compat/ftruncate.c new file mode 100644 index 0000000..e68e6d0 --- /dev/null +++ b/tls/compat/ftruncate.c | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * Public domain | ||
3 | * | ||
4 | * Kinichiro Inoguchi <inoguchi@openbsd.org> | ||
5 | */ | ||
6 | |||
7 | #include <unistd.h> | ||
8 | |||
9 | int | ||
10 | ftruncate(int fd, off_t length) | ||
11 | { | ||
12 | return _chsize(fd, length); | ||
13 | } | ||
diff --git a/tls/compat/getuid.c b/tls/compat/getuid.c new file mode 100644 index 0000000..632967a --- /dev/null +++ b/tls/compat/getuid.c | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * Public domain | ||
3 | * | ||
4 | * Kinichiro Inoguchi <inoguchi@openbsd.org> | ||
5 | */ | ||
6 | |||
7 | #include <unistd.h> | ||
8 | |||
9 | uid_t | ||
10 | getuid(void) | ||
11 | { | ||
12 | /* Windows fstat sets 0 as st_uid */ | ||
13 | return 0; | ||
14 | } | ||
diff --git a/tls/compat/pread.c b/tls/compat/pread.c new file mode 100644 index 0000000..f0c9a2f --- /dev/null +++ b/tls/compat/pread.c | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Public domain | ||
3 | * | ||
4 | * Kinichiro Inoguchi <inoguchi@openbsd.org> | ||
5 | */ | ||
6 | |||
7 | #include <unistd.h> | ||
8 | |||
9 | ssize_t | ||
10 | pread(int d, void *buf, size_t nbytes, off_t offset) | ||
11 | { | ||
12 | off_t cpos, opos, rpos; | ||
13 | ssize_t bytes; | ||
14 | if((cpos = lseek(d, 0, SEEK_CUR)) == -1) | ||
15 | return -1; | ||
16 | if((opos = lseek(d, offset, SEEK_SET)) == -1) | ||
17 | return -1; | ||
18 | if((bytes = read(d, buf, nbytes)) == -1) | ||
19 | return -1; | ||
20 | if((rpos = lseek(d, cpos, SEEK_SET)) == -1) | ||
21 | return -1; | ||
22 | return bytes; | ||
23 | } | ||
diff --git a/tls/compat/pwrite.c b/tls/compat/pwrite.c new file mode 100644 index 0000000..a304f7a --- /dev/null +++ b/tls/compat/pwrite.c | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Public domain | ||
3 | * | ||
4 | * Kinichiro Inoguchi <inoguchi@openbsd.org> | ||
5 | */ | ||
6 | |||
7 | #include <unistd.h> | ||
8 | |||
9 | ssize_t | ||
10 | pwrite(int d, const void *buf, size_t nbytes, off_t offset) | ||
11 | { | ||
12 | off_t cpos, opos, rpos; | ||
13 | ssize_t bytes; | ||
14 | if((cpos = lseek(d, 0, SEEK_CUR)) == -1) | ||
15 | return -1; | ||
16 | if((opos = lseek(d, offset, SEEK_SET)) == -1) | ||
17 | return -1; | ||
18 | if((bytes = write(d, buf, nbytes)) == -1) | ||
19 | return -1; | ||
20 | if((rpos = lseek(d, cpos, SEEK_SET)) == -1) | ||
21 | return -1; | ||
22 | return bytes; | ||
23 | } | ||