Added fake stdin/stdout/stderr streams, to prevent crashes on some tablets

This commit is contained in:
pelya
2011-01-25 14:29:23 +00:00
parent 71cf9fb2f2
commit b337e649b9
16 changed files with 55 additions and 16 deletions

View File

@@ -23,6 +23,7 @@ endif
LOCAL_CFLAGS += $(foreach D, $(APP_SUBDIRS), -I$(LOCAL_PATH)/$(D)) \
-I$(LOCAL_PATH)/../sdl-$(SDL_VERSION)/include \
$(foreach L, $(COMPILED_LIBRARIES), -I$(LOCAL_PATH)/../$(L)/include)
-D__sF=__SDL_fake_stdout
LOCAL_CFLAGS += $(APPLICATION_ADDITIONAL_CFLAGS)

View File

@@ -1,5 +1,5 @@
# The application settings for Android libSDL port
AppSettingVersion=15
AppSettingVersion=16
LibSdlVersion=1.2
AppName="ScummVM"
AppFullName=org.scummvm.sdl
@@ -20,9 +20,10 @@ NonBlockingSwapBuffers=n
RedefinedKeys="LALT RETURN ESCAPE F7 ESCAPE F5 F5 RETURN DELETE F7 F7"
AppTouchscreenKeyboardKeysAmount=0
AppTouchscreenKeyboardKeysAmountAutoFire=0
RedefinedKeysScreenKb="LALT RETURN ESCAPE F7"
MultiABI=n
AppVersionCode=12001
AppVersionName="1.2.0.01"
AppVersionCode=12102
AppVersionName="1.2.1.02"
CompiledLibraries="mad tremor flac ogg jpeg png fluidsynth"
CustomBuildScript=y
AppCflags=''

View File

@@ -48,9 +48,9 @@ done
CFLAGS="-I$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/include \
-fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums \
-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID \
-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os \
-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -O2 \
-fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \
-Wa,--noexecstack -DNDEBUG -g \
-Wa,--noexecstack -DNDEBUG -g -D__sF=__SDL_fake_stdout \
-I$LOCAL_PATH/../sdl-1.2/include $STL_INCLUDE \
`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"`"

View File

@@ -1 +1 @@
ufoai
scummvm

View File

@@ -50,7 +50,7 @@ common_CFLAGS := \
-Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes \
-Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels \
-Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers -DHAVE_CONFIG_H -std=gnu99 \
-I$(LOCAL_PATH)/include -I$(LOCAL_PATH)/include/curl -I$(LOCAL_PATH)/lib
-I$(LOCAL_PATH)/include -I$(LOCAL_PATH)/include/curl -I$(LOCAL_PATH)/lib -D__sF=__SDL_fake_stdout
#########################
# Build the libcurl library
@@ -75,6 +75,8 @@ LOCAL_CFLAGS += $(common_CFLAGS)
LOCAL_MODULE:= libcurl
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_LDLIBS := -lz
include $(BUILD_SHARED_LIBRARY)

View File

@@ -8,7 +8,7 @@ APP_SUBDIRS := $(patsubst $(LOCAL_PATH)/%, %, $(shell find $(LOCAL_PATH)/src -ty
LOCAL_CFLAGS := -O3 $(foreach D, $(APP_SUBDIRS), -I$(LOCAL_PATH)/$(D)) \
-I$(LOCAL_PATH)/include -DHAVE_CONFIG_H -include stdint.h -I$(LOCAL_PATH)/../sdl-$(SDL_VERSION)/include \
-Werror=implicit
-Werror=implicit -D__sF=__SDL_fake_stdout
@@ -17,7 +17,7 @@ LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := $(foreach F, $(APP_SUBDIRS), $(addprefix $(F)/,$(notdir $(wildcard $(LOCAL_PATH)/$(F)/*.cpp))))
LOCAL_SRC_FILES += $(foreach F, $(APP_SUBDIRS), $(addprefix $(F)/,$(notdir $(wildcard $(LOCAL_PATH)/$(F)/*.c))))
LOCAL_SHARED_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_STATIC_LIBRARIES :=

View File

@@ -16,11 +16,14 @@ LOCAL_CFLAGS := -Os -I$(LOCAL_PATH)/src -I$(LOCAL_PATH)/include -DBUILDING_LIBIN
-DLOCALEDIR=\"\" \
-DLIBDIR=\"\" \
-DLOCALE_ALIAS_PATH=\"\" \
-DINSTALLDIR=\"\"
-DINSTALLDIR=\"\" \
-D__sF=__SDL_fake_stdout
# -DLOCALE_ALIAS_PATH=\"/usr/local/share/locale\" \
# -DINSTALLDIR=\"/usr/local/lib\"
LOCAL_SRC_FILES := $(foreach F, $(APP_SUBDIRS), $(addprefix $(F)/,$(notdir $(wildcard $(LOCAL_PATH)/$(F)/*.c))))
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
include $(BUILD_SHARED_LIBRARY)

View File

@@ -4,7 +4,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := lua
LOCAL_CFLAGS := -O3 -I$(LOCAL_PATH)/src -I$(LOCAL_PATH)/include
LOCAL_CFLAGS := -O3 -I$(LOCAL_PATH)/src -I$(LOCAL_PATH)/include -D__sF=__SDL_fake_stdout
LOCAL_CPP_EXTENSION := .cpp
@@ -12,7 +12,7 @@ LOCAL_SRC_FILES := $(addprefix src/, $(notdir $(wildcard $(LOCAL_PATH)/src/*.c)
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_LDLIBS :=

View File

@@ -106,7 +106,9 @@ void _mm_registeralldrivers(void)
_mm_registerdriver(&drv_pipe);
#endif
#ifndef macintosh
#ifndef ANDROID
_mm_registerdriver(&drv_stdout);
#endif
#endif
_mm_registerdriver(&drv_nos);

View File

@@ -0,0 +1 @@
../../../../sdl-1.3/src/video/android/SDL_fake_stdout.c

View File

@@ -229,6 +229,7 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInitJavaCallbacks) ( JNIEnv* env, jobject t
JavaShowScreenKeyboard = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "showScreenKeyboard", "()V");
ANDROID_InitOSKeymap();
SDL_ANDROID_initFakeStdout();
}
int SDL_ANDROID_SetApplicationPutToBackgroundCallback(

View File

@@ -53,6 +53,7 @@ extern void SDL_ANDROID_processMoveMouseWithKeyboard();
extern int SDL_ANDROID_InsideVideoThread();
extern SDL_VideoDevice *ANDROID_CreateDevice_1_3(int devindex);
extern void SDL_ANDROID_DeferredTextInput();
extern void SDL_ANDROID_initFakeStdout();
#if SDL_VERSION_ATLEAST(1,3,0)
extern SDL_Window * ANDROID_CurrentWindow;

View File

@@ -0,0 +1,23 @@
/*
Writing to stdout will crash your program on some particular Android tablets.
Although this is the device bug I've put a workaround here,
it is heavily dependent on NDK internals and is not portable in any way.
*/
#ifndef _SDL_fake_stdout_h
#define _SDL_fake_stdout_h
#include <stdio.h>
extern FILE __SDL_fake_stdout[];
FILE __SDL_fake_stdout[3];
void SDL_ANDROID_initFakeStdout()
{
FILE * ff = NULL;
__SDL_fake_stdout[0] = * fopen("/dev/null", "r");
__SDL_fake_stdout[1] = * fopen("/dev/null", "w");
__SDL_fake_stdout[2] = * fopen("/dev/null", "w");
}
#endif

View File

@@ -6,7 +6,11 @@ XERCES_SUBDIRS := $(patsubst $(LOCAL_PATH)/%, %, $(shell find $(LOCAL_PATH)/src/
LOCAL_MODULE := xerces
LOCAL_CFLAGS := -Os -DHAVE_CONFIG_H -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src -I$(LOCAL_PATH)/include -I$(LOCAL_PATH)/.. -I$(LOCAL_PATH)/include/xercesc/util -I$(LOCAL_PATH)/include/xercesc/util/MsgLoaders/InMemory -I$(LOCAL_PATH)/include/xercesc/dom/ -I$(LOCAL_PATH)/include/xercesc/dom/impl -I$(LOCAL_PATH)/include/xercesc/validators/schema/identity -I$(LOCAL_PATH)/include/xercesc/util/Transcoders/IconvGNU/ -I$(LOCAL_PATH)/include/xercesc/sax
LOCAL_CFLAGS := -Os -DHAVE_CONFIG_H -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src -I$(LOCAL_PATH)/include \
-I$(LOCAL_PATH)/.. -I$(LOCAL_PATH)/include/xercesc/util -I$(LOCAL_PATH)/include/xercesc/util/MsgLoaders/InMemory \
-I$(LOCAL_PATH)/include/xercesc/dom/ -I$(LOCAL_PATH)/include/xercesc/dom/impl \
-I$(LOCAL_PATH)/include/xercesc/validators/schema/identity -I$(LOCAL_PATH)/include/xercesc/util/Transcoders/IconvGNU/ \
-I$(LOCAL_PATH)/include/xercesc/sax -D__sF=__SDL_fake_stdout
LOCAL_CPP_EXTENSION := .cpp

View File

@@ -4,7 +4,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := xml2
LOCAL_CFLAGS := -Os -I$(LOCAL_PATH) -I$(LOCAL_PATH)/include
LOCAL_CFLAGS := -Os -I$(LOCAL_PATH) -I$(LOCAL_PATH)/include -D__sF=__SDL_fake_stdout
LOCAL_CPP_EXTENSION := .cpp
@@ -20,7 +20,7 @@ LOCAL_SRC_FILES := \
triostr.c trio.c trionan.c
LOCAL_SHARED_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_STATIC_LIBRARIES :=
LOCAL_LDLIBS := -lz -ldl