Skip to content

Commit bd3a8ed

Browse files
update FFI C declarations (#506)
- update & fix `pthread_cond_t` / `pthread_mutex_t` declarations: correct layout for 64bits - fix `ANativeActivity` declaration: add missing `obbPath` field (since Android 3 [HoneyComb]) - cleanup, reduce differences with NDK headers
1 parent a68dd26 commit bd3a8ed

File tree

1 file changed

+95
-70
lines changed

1 file changed

+95
-70
lines changed

assets/android.lua

Lines changed: 95 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -522,48 +522,48 @@ int32_t AMotionEvent_getMetaState(const AInputEvent* motion_event);
522522
int32_t AMotionEvent_getEdgeFlags(const AInputEvent* motion_event);
523523
int64_t AMotionEvent_getDownTime(const AInputEvent* motion_event);
524524
int64_t AMotionEvent_getEventTime(const AInputEvent* motion_event);
525-
float AMotionEvent_getXOffset(const AInputEvent* motion_event); //__NDK_FPABI__
526-
float AMotionEvent_getYOffset(const AInputEvent* motion_event); //__NDK_FPABI__
527-
float AMotionEvent_getXPrecision(const AInputEvent* motion_event); //__NDK_FPABI__
528-
float AMotionEvent_getYPrecision(const AInputEvent* motion_event); //__NDK_FPABI__
525+
float AMotionEvent_getXOffset(const AInputEvent* motion_event);
526+
float AMotionEvent_getYOffset(const AInputEvent* motion_event);
527+
float AMotionEvent_getXPrecision(const AInputEvent* motion_event);
528+
float AMotionEvent_getYPrecision(const AInputEvent* motion_event);
529529
size_t AMotionEvent_getPointerCount(const AInputEvent* motion_event);
530530
int32_t AMotionEvent_getPointerId(const AInputEvent* motion_event, size_t pointer_index);
531-
float AMotionEvent_getRawX(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
532-
float AMotionEvent_getRawY(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
533-
float AMotionEvent_getX(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
534-
float AMotionEvent_getY(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
535-
float AMotionEvent_getPressure(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
536-
float AMotionEvent_getSize(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
537-
float AMotionEvent_getTouchMajor(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
538-
float AMotionEvent_getTouchMinor(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
539-
float AMotionEvent_getToolMajor(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
540-
float AMotionEvent_getToolMinor(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
541-
float AMotionEvent_getOrientation(const AInputEvent* motion_event, size_t pointer_index); //__NDK_FPABI__
531+
float AMotionEvent_getRawX(const AInputEvent* motion_event, size_t pointer_index);
532+
float AMotionEvent_getRawY(const AInputEvent* motion_event, size_t pointer_index);
533+
float AMotionEvent_getX(const AInputEvent* motion_event, size_t pointer_index);
534+
float AMotionEvent_getY(const AInputEvent* motion_event, size_t pointer_index);
535+
float AMotionEvent_getPressure(const AInputEvent* motion_event, size_t pointer_index);
536+
float AMotionEvent_getSize(const AInputEvent* motion_event, size_t pointer_index);
537+
float AMotionEvent_getTouchMajor(const AInputEvent* motion_event, size_t pointer_index);
538+
float AMotionEvent_getTouchMinor(const AInputEvent* motion_event, size_t pointer_index);
539+
float AMotionEvent_getToolMajor(const AInputEvent* motion_event, size_t pointer_index);
540+
float AMotionEvent_getToolMinor(const AInputEvent* motion_event, size_t pointer_index);
541+
float AMotionEvent_getOrientation(const AInputEvent* motion_event, size_t pointer_index);
542542
size_t AMotionEvent_getHistorySize(const AInputEvent* motion_event);
543543
int64_t AMotionEvent_getHistoricalEventTime(const AInputEvent* motion_event,
544544
size_t history_index);
545545
float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index,
546-
size_t history_index); //__NDK_FPABI__
546+
size_t history_index);
547547
float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index,
548-
size_t history_index); //__NDK_FPABI__
548+
size_t history_index);
549549
float AMotionEvent_getHistoricalX(const AInputEvent* motion_event, size_t pointer_index,
550-
size_t history_index); //__NDK_FPABI__
550+
size_t history_index);
551551
float AMotionEvent_getHistoricalY(const AInputEvent* motion_event, size_t pointer_index,
552-
size_t history_index); //__NDK_FPABI__
552+
size_t history_index);
553553
float AMotionEvent_getHistoricalPressure(const AInputEvent* motion_event, size_t pointer_index,
554-
size_t history_index); //__NDK_FPABI__
554+
size_t history_index);
555555
float AMotionEvent_getHistoricalSize(const AInputEvent* motion_event, size_t pointer_index,
556-
size_t history_index); //__NDK_FPABI__
556+
size_t history_index);
557557
float AMotionEvent_getHistoricalTouchMajor(const AInputEvent* motion_event, size_t pointer_index,
558-
size_t history_index); //__NDK_FPABI__
558+
size_t history_index);
559559
float AMotionEvent_getHistoricalTouchMinor(const AInputEvent* motion_event, size_t pointer_index,
560-
size_t history_index); //__NDK_FPABI__
560+
size_t history_index);
561561
float AMotionEvent_getHistoricalToolMajor(const AInputEvent* motion_event, size_t pointer_index,
562-
size_t history_index); //__NDK_FPABI__
562+
size_t history_index);
563563
float AMotionEvent_getHistoricalToolMinor(const AInputEvent* motion_event, size_t pointer_index,
564-
size_t history_index); //__NDK_FPABI__
564+
size_t history_index);
565565
float AMotionEvent_getHistoricalOrientation(const AInputEvent* motion_event, size_t pointer_index,
566-
size_t history_index); //__NDK_FPABI__
566+
size_t history_index);
567567

568568
struct AInputQueue;
569569
typedef struct AInputQueue AInputQueue;
@@ -610,23 +610,24 @@ void ANativeWindow_release(ANativeWindow* window);
610610
int32_t ANativeWindow_getWidth(ANativeWindow* window);
611611
int32_t ANativeWindow_getHeight(ANativeWindow* window);
612612
int32_t ANativeWindow_getFormat(ANativeWindow* window);
613-
int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format);
613+
int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window,
614+
int32_t width, int32_t height, int32_t format);
614615
int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
615616
ARect* inOutDirtyBounds);
616617
int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
617618

618619
// from android-ndk/platforms/android-9/arch-x86/usr/include/jni.h:
619620

620-
typedef uint8_t jboolean; /* unsigned 8 bits */
621-
typedef int8_t jbyte; /* signed 8 bits */
622-
typedef uint16_t jchar; /* unsigned 16 bits */
623-
typedef int16_t jshort; /* signed 16 bits */
624-
typedef int32_t jint; /* signed 32 bits */
625-
typedef int64_t jlong; /* signed 64 bits */
626-
typedef float jfloat; /* 32-bit IEEE 754 */
627-
typedef double jdouble; /* 64-bit IEEE 754 */
621+
typedef uint8_t jboolean; /* unsigned 8 bits */
622+
typedef int8_t jbyte; /* signed 8 bits */
623+
typedef uint16_t jchar; /* unsigned 16 bits */
624+
typedef int16_t jshort; /* signed 16 bits */
625+
typedef int32_t jint; /* signed 32 bits */
626+
typedef int64_t jlong; /* signed 64 bits */
627+
typedef float jfloat; /* 32-bit IEEE 754 */
628+
typedef double jdouble; /* 64-bit IEEE 754 */
628629

629-
typedef jint jsize;
630+
typedef jint jsize;
630631

631632
typedef void* jobject;
632633
typedef jobject jclass;
@@ -728,103 +729,103 @@ struct JNINativeInterface {
728729
jobject (*AllocObject)(JNIEnv*, jclass);
729730
jobject (*NewObject)(JNIEnv*, jclass, jmethodID, ...);
730731
jobject (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);
731-
jobject (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);
732+
jobject (*NewObjectA)(JNIEnv*, jclass, jmethodID, const jvalue*);
732733

733734
jclass (*GetObjectClass)(JNIEnv*, jobject);
734735
jboolean (*IsInstanceOf)(JNIEnv*, jobject, jclass);
735736
jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
736737

737738
jobject (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
738739
jobject (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
739-
jobject (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
740+
jobject (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
740741
jboolean (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);
741742
jboolean (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);
742-
jboolean (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
743+
jboolean (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
743744
jbyte (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);
744745
jbyte (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);
745-
jbyte (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
746+
jbyte (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
746747
jchar (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);
747748
jchar (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);
748-
jchar (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
749+
jchar (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
749750
jshort (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);
750751
jshort (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);
751-
jshort (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
752+
jshort (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
752753
jint (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
753754
jint (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);
754-
jint (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
755+
jint (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
755756
jlong (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);
756757
jlong (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);
757-
jlong (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
758+
jlong (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
758759
jfloat (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);
759760
jfloat (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);
760-
jfloat (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
761+
jfloat (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
761762
jdouble (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);
762763
jdouble (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);
763-
jdouble (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
764+
jdouble (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
764765
void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
765766
void (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);
766-
void (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
767+
void (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, const jvalue*);
767768

768769
jobject (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass,
769770
jmethodID, ...);
770771
jobject (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass,
771772
jmethodID, va_list);
772773
jobject (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass,
773-
jmethodID, jvalue*);
774+
jmethodID, const jvalue*);
774775
jboolean (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass,
775776
jmethodID, ...);
776777
jboolean (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass,
777778
jmethodID, va_list);
778779
jboolean (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass,
779-
jmethodID, jvalue*);
780+
jmethodID, const jvalue*);
780781
jbyte (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass,
781782
jmethodID, ...);
782783
jbyte (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass,
783784
jmethodID, va_list);
784785
jbyte (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass,
785-
jmethodID, jvalue*);
786+
jmethodID, const jvalue*);
786787
jchar (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass,
787788
jmethodID, ...);
788789
jchar (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass,
789790
jmethodID, va_list);
790791
jchar (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass,
791-
jmethodID, jvalue*);
792+
jmethodID, const jvalue*);
792793
jshort (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass,
793794
jmethodID, ...);
794795
jshort (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass,
795796
jmethodID, va_list);
796797
jshort (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass,
797-
jmethodID, jvalue*);
798+
jmethodID, const jvalue*);
798799
jint (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass,
799800
jmethodID, ...);
800801
jint (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass,
801802
jmethodID, va_list);
802803
jint (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass,
803-
jmethodID, jvalue*);
804+
jmethodID, const jvalue*);
804805
jlong (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass,
805806
jmethodID, ...);
806807
jlong (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass,
807808
jmethodID, va_list);
808809
jlong (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass,
809-
jmethodID, jvalue*);
810+
jmethodID, const jvalue*);
810811
jfloat (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass,
811812
jmethodID, ...);
812813
jfloat (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass,
813814
jmethodID, va_list);
814815
jfloat (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass,
815-
jmethodID, jvalue*);
816+
jmethodID, const jvalue*);
816817
jdouble (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass,
817818
jmethodID, ...);
818819
jdouble (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass,
819820
jmethodID, va_list);
820821
jdouble (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass,
821-
jmethodID, jvalue*);
822+
jmethodID, const jvalue*);
822823
void (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass,
823824
jmethodID, ...);
824825
void (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass,
825826
jmethodID, va_list);
826827
void (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass,
827-
jmethodID, jvalue*);
828+
jmethodID, const jvalue*);
828829

829830
jfieldID (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);
830831

@@ -852,36 +853,35 @@ struct JNINativeInterface {
852853

853854
jobject (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
854855
jobject (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);
855-
jobject (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
856+
jobject (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
856857
jboolean (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);
857858
jboolean (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID,
858859
va_list);
859-
jboolean (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID,
860-
jvalue*);
860+
jboolean (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
861861
jbyte (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);
862862
jbyte (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);
863-
jbyte (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
863+
jbyte (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
864864
jchar (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);
865865
jchar (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);
866-
jchar (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
866+
jchar (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
867867
jshort (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);
868868
jshort (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);
869-
jshort (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
869+
jshort (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
870870
jint (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);
871871
jint (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);
872-
jint (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
872+
jint (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
873873
jlong (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);
874874
jlong (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);
875-
jlong (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
875+
jlong (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
876876
jfloat (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);
877877
jfloat (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);
878-
jfloat (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
878+
jfloat (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
879879
jdouble (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);
880880
jdouble (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);
881-
jdouble (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
881+
jdouble (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
882882
void (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);
883883
void (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);
884-
void (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
884+
void (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, const jvalue*);
885885

886886
jfieldID (*GetStaticFieldID)(JNIEnv*, jclass, const char*,
887887
const char*);
@@ -1090,6 +1090,7 @@ typedef struct ANativeActivity {
10901090
int32_t sdkVersion;
10911091
void* instance;
10921092
AAssetManager* assetManager;
1093+
const char* obbPath;
10931094
} ANativeActivity;
10941095

10951096
void ANativeActivity_finish(ANativeActivity* activity);
@@ -1107,19 +1108,43 @@ enum {
11071108
};
11081109
void ANativeActivity_hideSoftInput(ANativeActivity* activity, uint32_t flags);
11091110

1111+
]]
1112+
1113+
if ffi.abi("64bit") then
11101114

1115+
ffi.cdef[[
11111116
// from android-ndk/platforms/android-9/arch-arm/usr/include/pthread.h:
11121117

11131118
typedef struct {
1114-
int volatile value;
1119+
int32_t __private[10];
11151120
} pthread_mutex_t;
11161121

11171122
typedef struct {
1118-
int volatile value;
1123+
int32_t __private[10];
11191124
} pthread_cond_t;
11201125

11211126
typedef long pthread_t;
1127+
]]
1128+
1129+
else
11221130

1131+
ffi.cdef[[
1132+
// from android-ndk/platforms/android-9/arch-arm/usr/include/pthread.h:
1133+
1134+
typedef struct {
1135+
int32_t __private[1];
1136+
} pthread_mutex_t;
1137+
1138+
typedef struct {
1139+
int32_t __private[1];
1140+
} pthread_cond_t;
1141+
1142+
typedef long pthread_t;
1143+
]]
1144+
1145+
end
1146+
1147+
ffi.cdef[[
11231148
// from android-ndk/sources/android/native_app_glue/android_native_app_glue.h:
11241149

11251150
struct android_poll_source {

0 commit comments

Comments
 (0)