kernel: use non-deprecated signatures for new/delete operators.
add posix_memalign(), needed for c++17.
This commit is contained in:
@@ -23,14 +23,21 @@ typedef struct {} mynothrow_t;
|
|||||||
extern const mynothrow_t mynothrow;
|
extern const mynothrow_t mynothrow;
|
||||||
|
|
||||||
#ifndef __clang__
|
#ifndef __clang__
|
||||||
extern void* operator new(size_t size) throw (std::bad_alloc);
|
#if __cplusplus >= 201402L
|
||||||
extern void* operator new[](size_t size) throw (std::bad_alloc);
|
#define _THROW(x)
|
||||||
extern void* operator new(size_t size, const std::nothrow_t &) throw ();
|
#define _NOEXCEPT noexcept
|
||||||
extern void* operator new[](size_t size, const std::nothrow_t &) throw ();
|
#else
|
||||||
extern void* operator new(size_t size, const mynothrow_t &) throw ();
|
#define _THROW(x) throw (x)
|
||||||
extern void* operator new[](size_t size, const mynothrow_t &) throw ();
|
#define _NOEXCEPT throw ()
|
||||||
extern void operator delete(void *ptr) throw ();
|
#endif
|
||||||
extern void operator delete[](void *ptr) throw ();
|
extern void* operator new(size_t size) _THROW(std::bad_alloc);
|
||||||
|
extern void* operator new[](size_t size) _THROW(std::bad_alloc);
|
||||||
|
extern void* operator new(size_t size, const std::nothrow_t &) _NOEXCEPT;
|
||||||
|
extern void* operator new[](size_t size, const std::nothrow_t &) _NOEXCEPT;
|
||||||
|
extern void* operator new(size_t size, const mynothrow_t &) _NOEXCEPT;
|
||||||
|
extern void* operator new[](size_t size, const mynothrow_t &) _NOEXCEPT;
|
||||||
|
extern void operator delete(void *ptr) _NOEXCEPT;
|
||||||
|
extern void operator delete[](void *ptr) _NOEXCEPT;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __cplusplus >= 201402L
|
#if __cplusplus >= 201402L
|
||||||
|
|||||||
@@ -220,6 +220,16 @@ memalign_etc(size_t alignment, size_t size, uint32 flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
posix_memalign(void** _pointer, size_t alignment, size_t size)
|
||||||
|
{
|
||||||
|
if ((alignment & (sizeof(void*) - 1)) != 0 || _pointer == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
*_pointer = block_alloc(size, alignment, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
free_etc(void *address, uint32 flags)
|
free_etc(void *address, uint32 flags)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,6 +40,14 @@ const nothrow_t std::nothrow = {};
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __cplusplus >= 201402L
|
||||||
|
#define _THROW(x)
|
||||||
|
#define _NOEXCEPT noexcept
|
||||||
|
#else
|
||||||
|
#define _THROW(x) throw (x)
|
||||||
|
#define _NOEXCEPT throw ()
|
||||||
|
#endif
|
||||||
|
|
||||||
const mynothrow_t mynothrow = {};
|
const mynothrow_t mynothrow = {};
|
||||||
|
|
||||||
#if __GNUC__ == 2
|
#if __GNUC__ == 2
|
||||||
@@ -76,7 +84,7 @@ __cxa_finalize(void* dsoHandle)
|
|||||||
// full C++ support in the kernel
|
// full C++ support in the kernel
|
||||||
#if (defined(_KERNEL_MODE) || defined(_LOADER_MODE))
|
#if (defined(_KERNEL_MODE) || defined(_LOADER_MODE))
|
||||||
void *
|
void *
|
||||||
operator new(size_t size) throw (std::bad_alloc)
|
operator new(size_t size) _THROW(std::bad_alloc)
|
||||||
{
|
{
|
||||||
// we don't actually throw any exceptions, but we have to
|
// we don't actually throw any exceptions, but we have to
|
||||||
// keep the prototype as specified in <new>, or else GCC 3
|
// keep the prototype as specified in <new>, or else GCC 3
|
||||||
@@ -86,49 +94,49 @@ operator new(size_t size) throw (std::bad_alloc)
|
|||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
operator new[](size_t size) throw (std::bad_alloc)
|
operator new[](size_t size)
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
operator new(size_t size, const std::nothrow_t &) throw ()
|
operator new(size_t size, const std::nothrow_t &) _NOEXCEPT
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
operator new[](size_t size, const std::nothrow_t &) throw ()
|
operator new[](size_t size, const std::nothrow_t &) _NOEXCEPT
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
operator new(size_t size, const mynothrow_t &) throw ()
|
operator new(size_t size, const mynothrow_t &) _NOEXCEPT
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
operator new[](size_t size, const mynothrow_t &) throw ()
|
operator new[](size_t size, const mynothrow_t &) _NOEXCEPT
|
||||||
{
|
{
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
operator delete(void *ptr) throw ()
|
operator delete(void *ptr) _NOEXCEPT
|
||||||
{
|
{
|
||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
operator delete[](void *ptr) throw ()
|
operator delete[](void *ptr) _NOEXCEPT
|
||||||
{
|
{
|
||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user