Edit

kc3-lang/SDL/src/main/android

Branch :

  • Show log

    Commit

  • Author : Philipp Wiesemann
    Date : 2016-07-17 21:42:53
    Hash : 6b1d5f44
    Message : Android: Fixed compile warning about a missing prototype (thanks, Sylvain!). Fixes Bugzilla #3351.

  • SDL_android_main.c
  • /*
        SDL_android_main.c, placed in the public domain by Sam Lantinga  3/13/14
    */
    #include "../../SDL_internal.h"
    
    #ifdef __ANDROID__
    
    /* Include the SDL main definition header */
    #include "SDL_main.h"
    
    /*******************************************************************************
                     Functions called by JNI
    *******************************************************************************/
    #include <jni.h>
    
    /* Called before SDL_main() to initialize JNI bindings in SDL library */
    extern void SDL_Android_Init(JNIEnv* env, jclass cls);
    
    /* This prototype is needed to prevent a warning about the missing prototype for global function below */
    JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array);
    
    /* Start up the SDL app */
    JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array)
    {
        int i;
        int argc;
        int status;
        int len;
        char** argv;
    
        /* This interface could expand with ABI negotiation, callbacks, etc. */
        SDL_Android_Init(env, cls);
    
        SDL_SetMainReady();
    
        /* Prepare the arguments. */
    
        len = (*env)->GetArrayLength(env, array);
        argv = SDL_stack_alloc(char*, 1 + len + 1);
        argc = 0;
        /* Use the name "app_process" so PHYSFS_platformCalcBaseDir() works.
           https://bitbucket.org/MartinFelis/love-android-sdl2/issue/23/release-build-crash-on-start
         */
        argv[argc++] = SDL_strdup("app_process");
        for (i = 0; i < len; ++i) {
            const char* utf;
            char* arg = NULL;
            jstring string = (*env)->GetObjectArrayElement(env, array, i);
            if (string) {
                utf = (*env)->GetStringUTFChars(env, string, 0);
                if (utf) {
                    arg = SDL_strdup(utf);
                    (*env)->ReleaseStringUTFChars(env, string, utf);
                }
                (*env)->DeleteLocalRef(env, string);
            }
            if (!arg) {
                arg = SDL_strdup("");
            }
            argv[argc++] = arg;
        }
        argv[argc] = NULL;
    
    
        /* Run the application. */
    
        status = SDL_main(argc, argv);
    
        /* Release the arguments. */
    
        for (i = 0; i < argc; ++i) {
            SDL_free(argv[i]);
        }
        SDL_stack_free(argv);
        /* Do not issue an exit or the whole application will terminate instead of just the SDL thread */
        /* exit(status); */
    
        return status;
    }
    
    #endif /* __ANDROID__ */
    
    /* vi: set ts=4 sw=4 expandtab: */