From 3681d02253d29229e265720984ce81a35206de4c Mon Sep 17 00:00:00 2001 From: kinichiro Date: Sun, 25 Feb 2018 01:59:39 +0900 Subject: Add compat bits for libtls on Windows --- tls/CMakeLists.txt | 10 ++++++++++ tls/Makefile.am | 7 +++++++ tls/compat/ftruncate.c | 13 +++++++++++++ tls/compat/getuid.c | 14 ++++++++++++++ tls/compat/pread.c | 23 +++++++++++++++++++++++ tls/compat/pwrite.c | 23 +++++++++++++++++++++++ 6 files changed, 90 insertions(+) create mode 100644 tls/compat/ftruncate.c create mode 100644 tls/compat/getuid.c create mode 100644 tls/compat/pread.c create mode 100644 tls/compat/pwrite.c (limited to 'tls') 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( tls_verify.c ) +if(CMAKE_HOST_WIN32) +set( + TLS_SRC + ${TLS_SRC} + compat/ftruncate.c + compat/getuid.c + compat/pread.c + compat/pwrite.c +) +endif() if(NOT "${OPENSSLDIR}" STREQUAL "") 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 libtls_la_SOURCES += tls_util.c libtls_la_SOURCES += tls_verify.c noinst_HEADERS = tls_internal.h + +if HOST_WIN +libtls_la_SOURCES += compat/ftruncate.c +libtls_la_SOURCES += compat/getuid.c +libtls_la_SOURCES += compat/pread.c +libtls_la_SOURCES += compat/pwrite.c +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 @@ +/* + * Public domain + * + * Kinichiro Inoguchi + */ + +#include + +int +ftruncate(int fd, off_t length) +{ + return _chsize(fd, length); +} 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 @@ +/* + * Public domain + * + * Kinichiro Inoguchi + */ + +#include + +uid_t +getuid(void) +{ + /* Windows fstat sets 0 as st_uid */ + return 0; +} 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 @@ +/* + * Public domain + * + * Kinichiro Inoguchi + */ + +#include + +ssize_t +pread(int d, void *buf, size_t nbytes, off_t offset) +{ + off_t cpos, opos, rpos; + ssize_t bytes; + if((cpos = lseek(d, 0, SEEK_CUR)) == -1) + return -1; + if((opos = lseek(d, offset, SEEK_SET)) == -1) + return -1; + if((bytes = read(d, buf, nbytes)) == -1) + return -1; + if((rpos = lseek(d, cpos, SEEK_SET)) == -1) + return -1; + return bytes; +} 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 @@ +/* + * Public domain + * + * Kinichiro Inoguchi + */ + +#include + +ssize_t +pwrite(int d, const void *buf, size_t nbytes, off_t offset) +{ + off_t cpos, opos, rpos; + ssize_t bytes; + if((cpos = lseek(d, 0, SEEK_CUR)) == -1) + return -1; + if((opos = lseek(d, offset, SEEK_SET)) == -1) + return -1; + if((bytes = write(d, buf, nbytes)) == -1) + return -1; + if((rpos = lseek(d, cpos, SEEK_SET)) == -1) + return -1; + return bytes; +} -- cgit v1.2.3-55-g6feb