include/compat: Add win32 compatibility layer

Windows provides socket and other related structures that are mostly
following the Posix standards, but using different headers.

Rather than adding lots of platform checks and require future commits
to do so as well, we're adding headers with the same names, which
in turn include the required Windows headers.

In a few cases, some functions declared by unistd.h are actually
defined by different Windows headers, so we'll need additional includes.

One thing to note here is that boost requires us to include aio.hpp
before the Windows socket headers.

Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
This commit is contained in:
Lucian Petrut 2019-10-08 13:49:31 +03:00
parent 99b91e9eba
commit 889247d557
16 changed files with 85 additions and 0 deletions

View File

@ -69,6 +69,13 @@ include_directories(
${PROJECT_BINARY_DIR}/src/include
${PROJECT_SOURCE_DIR}/src)
if(WIN32)
include_directories(
${PROJECT_SOURCE_DIR}/src/include/win32)
# Boost complains if winsock2.h (or windows.h) is included before asio.hpp.
add_definitions(-include winsock_wrapper.h)
endif()
if(OFED_PREFIX)
include_directories(SYSTEM ${OFED_PREFIX}/include)
link_directories(${OFED_PREFIX}/lib)

View File

@ -16,6 +16,7 @@
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include "common/admin_socket.h"
#include "common/errno.h"

View File

@ -16,6 +16,8 @@
#include <unistd.h>
#include "include/compat.h"
std::string ceph_get_hostname()
{
// are we in a container? if so we would prefer the *real* hostname.

View File

@ -206,6 +206,8 @@ char *ceph_strerror_r(int errnum, char *buf, size_t buflen);
#if defined(_WIN32)
#include "include/win32/winsock_compat.h"
typedef _sigset_t sigset_t;
typedef int uid_t;

View File

@ -0,0 +1 @@
#include "winsock_compat.h"

View File

@ -0,0 +1 @@
#include "winsock_compat.h"

View File

@ -0,0 +1 @@
#include "winsock_compat.h"

View File

View File

1
src/include/win32/poll.h Normal file
View File

@ -0,0 +1 @@
#include "winsock_compat.h"

View File

@ -0,0 +1 @@
#include <errno.h>

View File

View File

@ -0,0 +1 @@
#include "winsock_compat.h"

View File

@ -0,0 +1 @@
#include "include/win32/winsock_compat.h"

View File

@ -0,0 +1,39 @@
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (c) 2019 SUSE LLC
*
* This is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software
* Foundation. See file COPYING.
*
*/
#ifndef WINSOCK_COMPAT_H
#define WINSOCK_COMPAT_H 1
#include "winsock_wrapper.h"
#ifndef poll
#define poll WSAPoll
#endif
// afunix.h is available starting with Windows SDK 17063. Still, it wasn't
// picked up by mingw yet, for which reason we're going to define sockaddr_un
// here.
#ifndef _AFUNIX_
#define UNIX_PATH_MAX 108
typedef struct sockaddr_un
{
ADDRESS_FAMILY sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
} SOCKADDR_UN, *PSOCKADDR_UN;
#define SIO_AF_UNIX_GETPEERPID _WSAIOR(IOC_VENDOR, 256)
#endif /* _AFUNIX */
#endif /* WINSOCK_COMPAT_H */

View File

@ -0,0 +1,27 @@
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (c) 2020 SUSE LLC
*
* This is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software
* Foundation. See file COPYING.
*
*/
#ifndef WINSOCK_WRAPPER_H
#define WINSOCK_WRAPPER_H 1
#ifdef __cplusplus
// Boost complains if winsock2.h (or windows.h) is included before asio.hpp.
#include <boost/asio.hpp>
#endif
#include <winsock2.h>
#include <ws2ipdef.h>
#include <ws2tcpip.h>
#endif /* WINSOCK_WRAPPER_H */