mirror of
https://github.com/reactos/reactos.git
synced 2025-02-28 19:32:59 +00:00
[UCRT] Add missing headers
These are minimal definitions, just enough to make things compile.
This commit is contained in:
parent
04e0dc4a7a
commit
995e16d4d4
5 changed files with 327 additions and 0 deletions
52
sdk/lib/ucrt/inc/corecrt_internal_state_isolation.h
Normal file
52
sdk/lib/ucrt/inc/corecrt_internal_state_isolation.h
Normal file
|
@ -0,0 +1,52 @@
|
|||
//
|
||||
// corecrt_internal_state_isolation.h
|
||||
//
|
||||
// Copyright (c) 2024 Timo Kreuzer
|
||||
//
|
||||
// Header for CRT state management.
|
||||
//
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C++"
|
||||
{
|
||||
namespace __crt_state_management
|
||||
{
|
||||
constexpr size_t state_index_count = 2;
|
||||
struct scoped_global_state_reset
|
||||
{
|
||||
scoped_global_state_reset() throw() { }
|
||||
~scoped_global_state_reset() throw() { }
|
||||
}; // FIXME: Implement this
|
||||
template <typename T>
|
||||
class dual_state_global
|
||||
{
|
||||
T _value[2];
|
||||
public:
|
||||
T& value(__crt_cached_ptd_host& ptd) throw();
|
||||
T const& value(__crt_cached_ptd_host& ptd) const throw();
|
||||
T& value(void) throw() { return _value[0]; }
|
||||
T value_explicit(size_t index) throw() { return _value[index]; }
|
||||
T* dangerous_get_state_array() throw() { return _value; }
|
||||
void initialize(T) throw() { }
|
||||
template<typename T2> void uninitialize(T2) throw() { }
|
||||
template<typename T2, size_t N> void initialize_from_array(T2 const (&values)[N]) throw() { }
|
||||
};
|
||||
|
||||
inline int get_current_state_index(__crt_scoped_get_last_error_reset const &last_error_reset)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline int get_current_state_index(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#define __acrt_select_exit_lock() __acrt_exit_lock
|
236
sdk/lib/ucrt/inc/internal_shared.h
Normal file
236
sdk/lib/ucrt/inc/internal_shared.h
Normal file
|
@ -0,0 +1,236 @@
|
|||
//
|
||||
// internal_shared.h
|
||||
//
|
||||
// Copyright (c) 2024 Timo Kreuzer
|
||||
//
|
||||
// Header for definitions shared between vcruntime and UCRT.
|
||||
//
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <suppress.h>
|
||||
#include <intrin.h>
|
||||
#include <corecrt_startup.h>
|
||||
#include <crtdbg.h>
|
||||
#include <windows.h> // for HMODULE
|
||||
#include <malloc.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define _CRTALLOC(x) __declspec(allocate(x))
|
||||
#else
|
||||
#define _CRTALLOC(x) __attribute__((section(x)))
|
||||
#endif
|
||||
|
||||
#pragma section(".CRT$XIC", long, read)
|
||||
#pragma section(".CRT$XPX", long, read)
|
||||
#pragma section(".CRT$XPXA", long, read)
|
||||
|
||||
#pragma section(".CRT$XIA", long, read)
|
||||
#pragma section(".CRT$XIZ", long, read)
|
||||
#pragma section(".CRT$XCA", long, read)
|
||||
#pragma section(".CRT$XCZ", long, read)
|
||||
#pragma section(".CRT$XPA", long, read)
|
||||
#pragma section(".CRT$XPZ", long, read)
|
||||
#pragma section(".CRT$XTA", long, read)
|
||||
#pragma section(".CRT$XTZ", long, read)
|
||||
|
||||
extern _PIFV __xi_a[];
|
||||
extern _PIFV __xi_z[];
|
||||
extern _PVFV __xc_a[];
|
||||
extern _PVFV __xc_z[];
|
||||
extern _PVFV __xp_a[];
|
||||
extern _PVFV __xp_z[];
|
||||
extern _PVFV __xt_a[];
|
||||
extern _PVFV __xt_z[];
|
||||
|
||||
extern char __ImageBase;
|
||||
|
||||
#define CRT_WARNING_DISABLE_PUSH(wn, message) \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable: wn))
|
||||
|
||||
#define CRT_WARNING_POP \
|
||||
__pragma(warning(pop))
|
||||
|
||||
#define _BEGIN_SECURE_CRT_DEPRECATION_DISABLE \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable: 4996))
|
||||
|
||||
#define _END_SECURE_CRT_DEPRECATION_DISABLE \
|
||||
__pragma(warning(pop))
|
||||
|
||||
#define _CRT_DEBUGGER_IGNORE -1
|
||||
#define _CRT_DEBUGGER_GSFAILURE 1
|
||||
#define _CRT_DEBUGGER_INVALIDPARAMETER 2
|
||||
#define _CRT_DEBUGGER_ABORT 3
|
||||
|
||||
#define _CRT_DEBUGGER_HOOK(x)
|
||||
|
||||
#define _CRT_SECURITYCRITICAL_ATTRIBUTE
|
||||
#define _CRT_SECURITYSAFECRITICAL_ATTRIBUTE
|
||||
|
||||
#define _VALIDATE_RETURN(expr, errorcode, retexpr) \
|
||||
if (!(expr)) return (retexpr);
|
||||
|
||||
#define _VALIDATE_RETURN_VOID(expr, errorcode) \
|
||||
if (!(expr)) return;
|
||||
|
||||
#define _VALIDATE_RETURN_NOERRNO(expr, retexpr) \
|
||||
if (!(expr)) return (retexpr);
|
||||
|
||||
#define _VALIDATE_RETURN_ERRCODE(expr, errorcode) \
|
||||
if (!(expr)) return (errorcode);
|
||||
|
||||
#define _VALIDATE_CLEAR_OSSERR_RETURN(expr, errorcode, retexpr) \
|
||||
if (!(expr)) return (retexpr);
|
||||
|
||||
#define _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(expr, errorcode) \
|
||||
if (!(expr)) return (errorcode);
|
||||
|
||||
#define _VALIDATE_RETURN_NOEXC(expr, errorcode, retexpr) \
|
||||
if (!(expr)) return (retexpr);
|
||||
|
||||
#define _VALIDATE_RETURN_ERRCODE_NOEXC(expr, errorcode) \
|
||||
if (!(expr)) return (errorcode);
|
||||
|
||||
#define _malloc_crt malloc
|
||||
#define _free_crt free
|
||||
#define _calloc_crt calloc
|
||||
#define _recalloc_crt _recalloc
|
||||
#define _malloca_crt _malloca
|
||||
#define _freea_crt _freea
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
||||
template<typename T>
|
||||
__forceinline
|
||||
T __crt_fast_encode_pointer(T Ptr)
|
||||
{
|
||||
// FIXME: use cookie
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
__forceinline
|
||||
T __crt_fast_decode_pointer(T Ptr)
|
||||
{
|
||||
// FIXME: use cookie
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T __crt_interlocked_read(const T volatile* ptr)
|
||||
{
|
||||
return *ptr;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T __crt_interlocked_read_pointer(const T volatile* ptr)
|
||||
{
|
||||
return *ptr;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T __crt_interlocked_exchange_pointer(T *ptr, void* value)
|
||||
{
|
||||
return (T)_InterlockedExchangePointer((void* volatile*)ptr, value);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
struct __crt_seh_guarded_call
|
||||
{
|
||||
template<typename Init, typename Action, typename Cleanup>
|
||||
T operator()(Init init, Action action, Cleanup cleanup)
|
||||
{
|
||||
init();
|
||||
__try
|
||||
{
|
||||
return action();
|
||||
}
|
||||
__finally
|
||||
{
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template<typename FuncPtr>
|
||||
FuncPtr __crt_get_proc_address(HMODULE module, const char* name)
|
||||
{
|
||||
return (FuncPtr)GetProcAddress(module, name);
|
||||
}
|
||||
|
||||
template<typename Action, typename Cleanup>
|
||||
void __crt_call_and_cleanup(Action action, Cleanup cleanup)
|
||||
{
|
||||
action();
|
||||
cleanup();
|
||||
}
|
||||
|
||||
struct __crt_malloc_free_policy
|
||||
{
|
||||
template<typename T>
|
||||
void operator()(T* const ptr) throw()
|
||||
{
|
||||
_free_crt((void*)ptr);
|
||||
}
|
||||
};
|
||||
|
||||
struct __crt_public_free_policy
|
||||
{
|
||||
template<typename T>
|
||||
void operator()(T* const ptr) throw()
|
||||
{
|
||||
_free_crt((void*)ptr);
|
||||
}
|
||||
};
|
||||
|
||||
struct __crt_malloca_free_policy
|
||||
{
|
||||
void operator()(void* const ptr) throw()
|
||||
{
|
||||
_freea_crt(ptr);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T, typename FreePolicy = __crt_malloc_free_policy>
|
||||
class __crt_unique_heap_ptr
|
||||
{
|
||||
T* _ptr;
|
||||
public:
|
||||
__crt_unique_heap_ptr() : _ptr(nullptr) {}
|
||||
__crt_unique_heap_ptr(T* ptr) : _ptr(ptr) {}
|
||||
__crt_unique_heap_ptr(__crt_unique_heap_ptr&& from) : _ptr(from._ptr) { from._ptr = nullptr; }
|
||||
~__crt_unique_heap_ptr() { FreePolicy()(_ptr); }
|
||||
void attach(T* ptr) { FreePolicy()(_ptr); _ptr = ptr; }
|
||||
T* detach() { T* ptr = _ptr; _ptr = nullptr; return ptr; }
|
||||
operator bool() const { return _ptr != nullptr; }
|
||||
T* get() const { return _ptr; }
|
||||
T** get_address_of() { return &_ptr; }
|
||||
|
||||
// Move assignment
|
||||
__crt_unique_heap_ptr& operator=(__crt_unique_heap_ptr&& from)
|
||||
{
|
||||
FreePolicy()(_ptr);
|
||||
_ptr = from._ptr;
|
||||
from._ptr = nullptr;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
using __crt_scoped_stack_ptr = __crt_unique_heap_ptr<T, __crt_malloca_free_policy>;
|
||||
|
||||
#define _malloc_crt_t(t, n) (__crt_unique_heap_ptr<t>(static_cast<t*>(_malloc_crt((n) * sizeof(t)))))
|
||||
#define _calloc_crt_t(t, n) (__crt_unique_heap_ptr<t>(static_cast<t*>(_calloc_crt((n), sizeof(t)))))
|
||||
#define _recalloc_crt_t(t, p, n) (__crt_unique_heap_ptr<t>(static_cast<t*>(_recalloc_crt(p, (n), sizeof(t)))))
|
||||
#define _malloca_crt_t(t, n) (__crt_scoped_stack_ptr<t>(static_cast<t*>(_malloca_crt((n) * sizeof(t)))))
|
||||
|
||||
#endif // __cplusplus
|
13
sdk/lib/ucrt/inc/nt.h
Normal file
13
sdk/lib/ucrt/inc/nt.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
//
|
||||
// nt.h
|
||||
//
|
||||
// Copyright (c) 2024 Timo Kreuzer
|
||||
//
|
||||
// Header for generic NT things.
|
||||
//
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <ndk/pstypes.h>
|
15
sdk/lib/ucrt/inc/ntrtl.h
Normal file
15
sdk/lib/ucrt/inc/ntrtl.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
//
|
||||
// ntrtl.h
|
||||
//
|
||||
// Copyright (c) 2024 Timo Kreuzer
|
||||
//
|
||||
// Header for RTL NT things.
|
||||
//
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <ndk/rtltypes.h>
|
||||
|
||||
#define RTL_USER_PROC_SECURE_PROCESS 0x80000000
|
11
sdk/lib/ucrt/inc/nturtl.h
Normal file
11
sdk/lib/ucrt/inc/nturtl.h
Normal file
|
@ -0,0 +1,11 @@
|
|||
//
|
||||
// nturtl.h
|
||||
//
|
||||
// Copyright (c) 2024 Timo Kreuzer
|
||||
//
|
||||
// Header for user mode RTL NT things.
|
||||
//
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
|
||||
#pragma once
|
Loading…
Reference in a new issue