Commit Graph

164 Commits

Author SHA1 Message Date
Andrey Semashev
65b9c99a67 Add explicit type casts for arguments of Interlocked* intrinsics.
This allows to use any compatible types with INTERLOCKED_* macros, not just
the ones strictly matching the particular implementation of the intrinsics.

In particular, this fixes compilation for Cygwin64, which is an LP64 target,
meaning that long is 64-bit and _Interlocked* intrinsics use a different
integer type for its 32-bit integer arguments.

Additionally, enable use of intrin.h on Cygwin (32-bit).

The test has been updated to explicitly use 32-bit integer arguments.
2019-07-10 14:44:13 +03:00
Andrey Semashev
bb91190323 Disable _Interlocked*Pointer intrinsics on x86 for MSVC-12 and below.
There is a macro conflict for _InterlockedExchangePointer between intrin.h from
MSVC-12 and winnt.h from Windows SDK 8.1, which causes compilation failures.
2019-07-10 01:06:34 +03:00
Andrey Semashev
bfb9932296 Use interlocked intrinsics for pointers more universally on more recent MSVC.
_Interlocked*Pointer intrinsics are defined for all target architectures on
MSVC-12 and later. On MSVC-11 they are also defined for ARM.
2019-05-31 18:24:35 +03:00
Andrey Semashev
52b44afc06 Use _Interlocked*Pointer intrinsics on ARM64 targets.
Fixes https://github.com/boostorg/winapi/issues/76.
Closes https://github.com/boostorg/winapi/pull/77.

Also, use consistent call convention attribute across _Interlocked*
intrinsics when they are declared in the header.
2019-05-31 17:32:57 +03:00
Andrey Semashev
ac2b9e6ad6 Another attempt to silence MinGW gcc 5.3 warnings about unused variables. 2019-01-04 19:00:09 +03:00
Andrey Semashev
f427298368 Revert "Disable gcc warnings about unused variables."
This reverts commit a073e63cd3.

The pragmas didn't help to silence the warnings on MinGW gcc 5.3.
2019-01-04 18:55:09 +03:00
Andrey Semashev
a073e63cd3 Disable gcc warnings about unused variables.
This warning is not supposed to appear for global constants, however gcc 5.3
from MinGW spams this warning, at least for the invalid_handle_value constant.
Therefore we disable this warning for all constants declared in Boost.WinAPI.
2019-01-04 00:33:52 +03:00
Andrey Semashev
cb0f6ed2a5 Removed volatile qualifiers for WinCE older than 6.0. 2018-08-13 20:05:34 +03:00
Andrey Semashev
bf9dfd9f21 Added support for clang-cl, improved support for WinCE and MSVC 8 and 9.
This commit incorporates some of the changes made to
boost/smart_ptr/detail/sp_interlocked.hpp by Peter Dimov, namely:

- Define an internal config macro BOOST_INTERLOCKED_HAS_INTRIN_H when
  the compiler is known to have a useful intrin.h header.
- Use this macro to select the common implementation based on intrin.h.
- Removed MinGW-w64 branch of implementation as it is now covered by
  the common branch based on intrin.h.
- Added detection of clang-cl, a new MSVC pretender. The compiler is
  assumed to have support for intrin.h.
- Added a separate branch for Windows CE >=6, with differently named
  interlocked functions. No way to test this and no idea if this is
  correct.
- For MSVC 8 and 9 don't use intrin.h as it reportedly conflicts
  with <utility>. On these compilers we will declare the intrinsics
  ourselves.
2018-08-13 18:44:29 +03:00
Andrey Semashev
fee1bec7f9 Marked OVERLAPPED member struct with __extension__ to silence gcc warnings. 2018-08-08 20:54:02 +03:00
Andrey Semashev
3f56c2348f Removed the deprecated definitions of calling convention macros.
These macros conflict with the same named macros from Windows SDK and generate
warnings. Downstream libraries were ported to Boost.WinAPI replacement macros.
2018-04-18 07:39:09 +03:00
Andrey Semashev
1b912fa070 Silenced gcc warnings about using long long in C++03. 2018-03-26 21:51:03 +03:00
Andrey Semashev
a9bc4e753e Added an extension markup to silence gcc warnings about nameless struct. 2018-03-23 21:28:48 +03:00
Andrey Semashev
169d0ad34b Added new error codes and made error_codes_abi test auto-generated. 2018-03-17 21:07:11 +03:00
Andrey Semashev
97adb533ae Don't enable bcrypt on MinGW-w64 regardless of the target Windows version. This API is only available since Vista. 2018-03-16 23:00:47 +03:00
Andrey Semashev
d626055575 Updates for compatibility with Cygwin. 2018-03-11 19:40:41 +03:00
Andrey Semashev
9fbba91e44 Fixed compilation. 2018-03-11 03:38:27 +03:00
Andrey Semashev
2f3fa36ba1 Updated API partition checks. 2018-03-11 03:30:54 +03:00
Andrey Semashev
e64e4d646a Added WINAPI and NTAPI macros. Deprecated until downstream libraries update.
These macros may clash with macros defined by Windows SDK and generate warnings.
Downstream libraries need to be ported to Boost.WinAPI replacements and then
these definitions can be removed.
2018-03-11 02:41:06 +03:00
Andrey Semashev
5a8d525e84 Renamed calling conventions macros. 2018-03-11 02:05:57 +03:00
Andrey Semashev
936447c9f7 Updated PROCESS_ALL_ACCESS definition for pre-Vista targets. 2018-03-11 00:33:13 +03:00
Andrey Semashev
b6d038998a Removed the obsolete workaround for MinGW buggy declarations of crypt functions. 2018-03-10 23:44:09 +03:00
Andrey Semashev
fcd61f3b2e Fixed bugs according to tests. 2018-03-10 21:02:48 +03:00
Andrey Semashev
3a249ca7c6 Fixed MSVC-14.1 compilation.
The compiler doesn't consider INVALID_HANDLE_VALUE initializer as a
compile-time constant expression.
2018-03-09 03:11:42 +03:00
Andrey Semashev
c4ebb6d9d0 Improve compatibility with Cygwin 64.
The compiler on Cygwin 64 does not define _WIN64. Instead, the macro is
defined in the private header. Without the macro we fail to detect 64-bit
Windows target and define basic types incorrectly. Include the private
header for now; we may switch to our private macro for this purpose
eventually.

Also avoid using boost/cstdint.hpp to define basic integer types as in
case of Cygwin 64, an LP64 platform, uint64_t and ULONGLONG are different
types.
2018-03-09 02:47:24 +03:00
Andrey Semashev
4678e497f4 Converted global constants to constexpr. 2018-03-09 01:00:31 +03:00
Andrey Semashev
2490b195ad Updated for compatibility with Cygwin 64.
Cygwin 64 implements LP64 model, meaning that `long` is 64-bit. Also,
clang emits warnings about __stdcall being ignored on targets other than
32-bit x86, so don't use it.

As part of this commit, convert Boost.WinAPI declarations to its local
calling convention macros equivalent to WINAPI and NTAPI and avoid
defining those macros when possible.
2018-03-09 00:25:02 +03:00
Andrey Semashev
4835485a5a Changed the default target to Windows 7.
For MSVC-9 though the default is still Windows Vista as the Windows SDK used
with that compiler does not support Windows 7 definitions.

Also added a define for NTDDI version of the latest update to Windows 10. This
latest version is used by default when the user selects Windows 10 target.
2018-03-07 15:11:00 +03:00
Andrey Semashev
f004b4753d Fixed the SYSTEM_INFO definition to allow for the Windows SDK syntax.
The wProcessorArchitecture member of the SYSTEM_INFO struct was previously
inaccessible due to incorrect use of nameless unions/structs. This commit
fixes that to that the member should now be directly accessible as a
member of SYSTEM_INFO.

This commit also marks the nameless structs/unions with the __extension__
attribute to hopefully avoid gcc warnings about using this non-standard
feature.
2017-11-27 23:53:47 +03:00
Andrey Semashev
7a3ebe07be Changed the legacy namespace declaration method.
MSVC-14.1 emits an error for the namespace alias because the same-named
symbol is visible from the point of the alias declaration. Instead, define
a new winapi namespace and import the boost::winapi namespace contents
into it.
2017-10-24 22:51:22 +03:00
Andrey Semashev
3c964a1ef3 Fixed wt_set_max_threadpool_threads compilation on MSVC-14.0. 2017-10-19 03:22:19 +03:00
Andrey Semashev
59cdbedd30 Renamed some leftover macros to have prefix BOOST_WINAPI. 2017-10-19 02:40:01 +03:00
Andrey Semashev
6b67a9c5cf Moved library headers and symbols to the boost level directory and namespace.
Despite that the library now appears at the top level in the filesystem and
namespace, it is still not intended to be used by Boost users - the library
is purposed as an internal tool for Boost needs.

The old headers are still present and define the old namespace as an alias
to the new namespace. Thus backward compatibility is preserved. These headers
will be removed as soon as all dependent libraries are updated.

While at it, also made some nonessential cleanup in headers.
2017-10-19 01:07:51 +03:00
Andrey Semashev
a9abc7668a Fixed incorrect preprocessor directive. 2017-10-08 18:09:45 +03:00
Andrey Semashev
db74f2753a Fixed NTSTATUS_ definition when BOOST_USE_WINDOWS_H is defined. 2017-10-07 21:13:56 +03:00
Andrey Semashev
d5adfec9d1 Formatting and other nonessential changes. 2017-10-07 20:58:28 +03:00
Andrey Semashev
b5bbd3a997 Merge remote-tracking branch 'jeking3/add-bcrypt-support' into develop 2017-10-07 20:38:00 +03:00
Andrey Semashev
d5f9d9d436 Updated partition macro. 2017-10-07 20:21:28 +03:00
Andrey Semashev
8091170850 Ported the rest of the headers to partition macros.
Also, enabled all API partitions by default on Windows SDKs without
support for API families.
2017-10-07 19:54:16 +03:00
James E. King, III
ac43c2c0fd add bcrypt support for RNG
This fixes #47
2017-10-07 12:32:18 -04:00
Andrey Semashev
4e089d4bbb Corrected a typo in the comment. 2017-10-07 14:37:12 +03:00
James E. King, III
33bd73b769 Add support for Windows Store (UWP) development, i.e.
WINAPI_FAMILY=WINAPI_FAMILY_PC_APP

This fixes #53
2017-10-03 23:37:30 -04:00
Andrey Semashev
799be2a866 Removed the special code for Windows CE 6.0.
Reportedly, that code branch was not working an caused linking errors. As
reported in https://svn.boost.org/trac10/ticket/5431, Windows CE SDK still
provides Interlocked function definitions, but with slightly different
signatures. This PR keeps a single code branch for Windows CE that matches
the declarations described in the ticket. Untested.

This change is based on https://github.com/boostorg/winapi/pull/58
by James E. King, III <jking@apache.org>.

Fixes https://svn.boost.org/trac10/ticket/5431.
2017-09-24 02:36:37 +03:00
Andrey Semashev
d687b7c837 Fixed GetSystemTimeAsFileTime emulation for Windows CE.
This change originated from https://github.com/boostorg/winapi/pull/58
by James E. King, III <jking@apache.org>.
2017-09-24 02:36:37 +03:00
Andrey Semashev
f6369f95c3 Added support for specifying NTDDI version.
This change offers more control over the target Windows version. By
defining BOOST_USE_NTDDI_VERSION the user is able to specify the Windows
version down to the particular Service Pack. By default
BOOST_USE_NTDDI_VERSION will be deduced from either NTDDI_VERSION or
BOOST_USE_WINAPI_VERSION (which, in turn can be deduced from other
macros). In the latter case the macro will default to the latest known
Service Pack shipped for the given Windows version.

In addition to more control on the user's side this change also allows to
define APIs that first appeared in a Service Pack as opposed to RTM. This
allowed to fix compilation of RtlCaptureStackBackTrace.

Also updated the workaround for CryptReleaseContext since Windows SDK 10.0
no longer requires it.
2017-09-24 02:36:37 +03:00
Andrey Semashev
fac7ef4518 Deleted the previously deprecated headers.
Fixes https://github.com/boostorg/winapi/issues/54.
2017-09-24 02:36:37 +03:00
Andrey Semashev
1c2e1c1c2b Jobs API is only available since Windows 2000.
This change originated from https://github.com/boostorg/winapi/pull/56
by James E. King, III <jking@apache.org>.

Fixes https://github.com/boostorg/winapi/issues/50.
2017-09-24 02:36:37 +03:00
Andrey Semashev
e9a3073f22 Use BOOST_FORCEINLINE for function wrappers. 2017-09-24 02:36:37 +03:00
Andrey Semashev
4956f78177 Added availability conditions of some of the constants.
This change originated from https://github.com/boostorg/winapi/pull/56
by James E. King, III <jking@apache.org>.
2017-09-24 02:36:37 +03:00
Andrey Semashev
516452e210 Fixed CompareObjectHandles not being defined extern C.
This change originated from https://github.com/boostorg/winapi/pull/56
by James E. King, III <jking@apache.org>.

Fixes https://github.com/boostorg/winapi/issues/52.
2017-09-24 02:36:06 +03:00