aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkinichiro <kinichiro.inoguchi@gmail.com>2018-02-25 01:59:39 +0900
committerkinichiro <kinichiro.inoguchi@gmail.com>2018-02-25 21:56:05 +0900
commit3681d02253d29229e265720984ce81a35206de4c (patch)
tree95590bed234fb09e40e14feb5cdb6c0120f07334
parent47781e69e2946011ea7bd0723e98a2fedff88980 (diff)
downloadportable-3681d02253d29229e265720984ce81a35206de4c.tar.gz
portable-3681d02253d29229e265720984ce81a35206de4c.tar.bz2
portable-3681d02253d29229e265720984ce81a35206de4c.zip
Add compat bits for libtls on Windows
-rw-r--r--include/compat/sys/types.h2
-rw-r--r--include/compat/unistd.h18
-rw-r--r--tls/CMakeLists.txt10
-rw-r--r--tls/Makefile.am7
-rw-r--r--tls/compat/ftruncate.c13
-rw-r--r--tls/compat/getuid.c14
-rw-r--r--tls/compat/pread.c23
-rw-r--r--tls/compat/pwrite.c23
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>
23typedef uint32_t in_addr_t; 23typedef uint32_t in_addr_t;
24typedef 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;
29typedef unsigned int u_int; 30typedef unsigned int u_int;
30typedef uint32_t in_addr_t; 31typedef uint32_t in_addr_t;
31typedef uint32_t mode_t; 32typedef uint32_t mode_t;
33typedef uint32_t uid_t;
32 34
33#include <basetsd.h> 35#include <basetsd.h>
34typedef SSIZE_T ssize_t; 36typedef 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__
14int ftruncate(int fd, off_t length);
15uid_t getuid(void);
16ssize_t pread(int d, void *buf, size_t nbytes, off_t offset);
17ssize_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
27unsigned int sleep(unsigned int seconds); 40unsigned int sleep(unsigned int seconds);
28 41
42int ftruncate(int fd, off_t length);
43uid_t getuid(void);
44ssize_t pread(int d, void *buf, size_t nbytes, off_t offset);
45ssize_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
22if(CMAKE_HOST_WIN32)
23set(
24 TLS_SRC
25 ${TLS_SRC}
26 compat/ftruncate.c
27 compat/getuid.c
28 compat/pread.c
29 compat/pwrite.c
30)
31endif()
22 32
23if(NOT "${OPENSSLDIR}" STREQUAL "") 33if(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
30libtls_la_SOURCES += tls_util.c 30libtls_la_SOURCES += tls_util.c
31libtls_la_SOURCES += tls_verify.c 31libtls_la_SOURCES += tls_verify.c
32noinst_HEADERS = tls_internal.h 32noinst_HEADERS = tls_internal.h
33
34if HOST_WIN
35libtls_la_SOURCES += compat/ftruncate.c
36libtls_la_SOURCES += compat/getuid.c
37libtls_la_SOURCES += compat/pread.c
38libtls_la_SOURCES += compat/pwrite.c
39endif
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
9int
10ftruncate(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
9uid_t
10getuid(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
9ssize_t
10pread(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
9ssize_t
10pwrite(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}