mirror of
https://github.com/ceph/ceph
synced 2025-02-17 16:07:37 +00:00
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:
parent
99b91e9eba
commit
889247d557
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
1
src/include/win32/arpa/inet.h
Normal file
1
src/include/win32/arpa/inet.h
Normal file
@ -0,0 +1 @@
|
||||
#include "winsock_compat.h"
|
1
src/include/win32/netdb.h
Normal file
1
src/include/win32/netdb.h
Normal file
@ -0,0 +1 @@
|
||||
#include "winsock_compat.h"
|
1
src/include/win32/netinet/in.h
Normal file
1
src/include/win32/netinet/in.h
Normal file
@ -0,0 +1 @@
|
||||
#include "winsock_compat.h"
|
0
src/include/win32/netinet/ip.h
Normal file
0
src/include/win32/netinet/ip.h
Normal file
0
src/include/win32/netinet/tcp.h
Normal file
0
src/include/win32/netinet/tcp.h
Normal file
1
src/include/win32/poll.h
Normal file
1
src/include/win32/poll.h
Normal file
@ -0,0 +1 @@
|
||||
#include "winsock_compat.h"
|
1
src/include/win32/sys/errno.h
Normal file
1
src/include/win32/sys/errno.h
Normal file
@ -0,0 +1 @@
|
||||
#include <errno.h>
|
0
src/include/win32/sys/select.h
Normal file
0
src/include/win32/sys/select.h
Normal file
1
src/include/win32/sys/socket.h
Normal file
1
src/include/win32/sys/socket.h
Normal file
@ -0,0 +1 @@
|
||||
#include "winsock_compat.h"
|
1
src/include/win32/sys/un.h
Normal file
1
src/include/win32/sys/un.h
Normal file
@ -0,0 +1 @@
|
||||
#include "include/win32/winsock_compat.h"
|
39
src/include/win32/winsock_compat.h
Normal file
39
src/include/win32/winsock_compat.h
Normal 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 */
|
27
src/include/win32/winsock_wrapper.h
Normal file
27
src/include/win32/winsock_wrapper.h
Normal 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 */
|
Loading…
Reference in New Issue
Block a user