Stop using system STL since it is no longer supported

This commit is contained in:
topjohnwu 2018-12-25 19:38:44 +08:00
parent 8d210b5e37
commit 23f8f35098
5 changed files with 48 additions and 2 deletions

View File

@ -2,7 +2,7 @@ APP_ABI := armeabi-v7a x86
APP_CFLAGS := -Oz -std=gnu11 \
-DMAGISK_VERSION="${MAGISK_VERSION}" -DMAGISK_VER_CODE=${MAGISK_VER_CODE}
APP_CPPFLAGS := -std=c++14
APP_STL := system
APP_STL := none
APP_PLATFORM := android-16
ifdef MAGISK_DEBUG

34
native/jni/include/new Normal file
View File

@ -0,0 +1,34 @@
#ifndef __NEW__
#define __NEW__
#include <stddef.h>
#include <stdlib.h>
extern "C++" {
namespace std {
using ::ptrdiff_t;
using ::size_t;
struct nothrow_t {};
extern const nothrow_t nothrow;
} // namespace std
void* operator new(std::size_t);
void* operator new[](std::size_t);
void operator delete(void*);
void operator delete[](void*);
void* operator new(std::size_t, const std::nothrow_t&);
void* operator new[](std::size_t, const std::nothrow_t&);
void operator delete(void*, const std::nothrow_t&);
void operator delete[](void*, const std::nothrow_t&);
inline void* operator new(std::size_t, void* p) { return p; }
inline void* operator new[](std::size_t, void* p) { return p; }
// these next two are not really required, since exceptions are off
inline void operator delete(void*, void*) { }
inline void operator delete[](void*, void*) { }
} // extern C++
#endif // __NEW__

View File

@ -2,7 +2,7 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libsystemproperties
LOCAL_C_INCLUDES := $(LIBSYSTEMPROPERTIES)
LOCAL_C_INCLUDES := jni/include $(LIBSYSTEMPROPERTIES)
LOCAL_SRC_FILES := \
context_node.cpp \
contexts_serialized.cpp \

View File

@ -4,6 +4,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE:= libutils
LOCAL_C_INCLUDES := jni/include $(LIBUTILS)
LOCAL_SRC_FILES := \
new.cpp \
file.cpp \
misc.cpp \
selinux.cpp \

11
native/jni/utils/new.cpp Normal file
View File

@ -0,0 +1,11 @@
#include <new>
#include <stdlib.h>
void* operator new(std::size_t s) { return malloc(s); }
void* operator new[](std::size_t s) { return malloc(s); }
void operator delete(void *p) { free(p); }
void operator delete[](void *p) { free(p); }
void* operator new(std::size_t s, const std::nothrow_t&) { return malloc(s); }
void* operator new[](std::size_t s, const std::nothrow_t&) { return malloc(s); }
void operator delete(void *p, const std::nothrow_t&) { free(p); }
void operator delete[](void *p, const std::nothrow_t&) { free(p); }