Skip to content

Commit 473ccd5

Browse files
JNI: always use the C interface (#561)
To make sure we don't pull in some C++ that would break the ODR.
1 parent 6776aae commit 473ccd5

File tree

3 files changed

+16
-27
lines changed

3 files changed

+16
-27
lines changed

jni/7z/unarchive.cpp renamed to jni/7z/unarchive.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
extern "C" {
2-
31
#include <limits.h>
42
#include <stdlib.h>
53

@@ -82,15 +80,13 @@ Java_org_koreader_launcher_Assets_extract(JNIEnv *env,
8280
jstring payload,
8381
jstring output)
8482
{
85-
const char *name = env->GetStringUTFChars(payload, nullptr);
86-
const char *destination = env->GetStringUTFChars(output, nullptr);
83+
const char *name = (*env)->GetStringUTFChars(env, payload, NULL);
84+
const char *destination = (*env)->GetStringUTFChars(env, output, NULL);
8785

8886
int r = extract_asset(AAssetManager_fromJava(env, assetsManager), name, destination);
8987

90-
env->ReleaseStringUTFChars(payload, name);
91-
env->ReleaseStringUTFChars(output, destination);
88+
(*env)->ReleaseStringUTFChars(env, payload, name);
89+
(*env)->ReleaseStringUTFChars(env, output, destination);
9290

9391
return r != ARCHIVE_OK && r != ARCHIVE_EOF;
9492
}
95-
96-
}

jni/CMakeLists.txt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.16.3)
2-
project(android-luajit-launcher LANGUAGES C CXX)
2+
project(android-luajit-launcher LANGUAGES C)
33

44
find_package(PkgConfig REQUIRED)
55
pkg_check_modules(LuaJIT luajit REQUIRED IMPORTED_TARGET)
@@ -12,15 +12,13 @@ if(NOT Threads_FOUND OR NOT CMAKE_USE_PTHREADS_INIT)
1212
endif()
1313

1414
add_library(7z)
15-
set_target_properties(7z PROPERTIES CXX_VISIBILITY_PRESET hidden)
16-
set_target_properties(7z PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
15+
set_target_properties(7z PROPERTIES C_VISIBILITY_PRESET hidden)
1716
target_link_libraries(7z PRIVATE PkgConfig::libarchive android log)
18-
target_sources(7z PRIVATE 7z/unarchive.cpp)
17+
target_sources(7z PRIVATE 7z/unarchive.c)
1918

2019
add_library(ioctl SHARED)
21-
set_target_properties(ioctl PROPERTIES CXX_VISIBILITY_PRESET hidden)
22-
set_target_properties(ioctl PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
23-
target_sources(ioctl PRIVATE ioctl/ioctl.cpp)
20+
set_target_properties(ioctl PROPERTIES C_VISIBILITY_PRESET hidden)
21+
target_sources(ioctl PRIVATE ioctl/ioctl.c)
2422

2523
add_library(luajit-launcher SHARED)
2624
set_target_properties(luajit-launcher PROPERTIES C_VISIBILITY_PRESET hidden)

jni/ioctl/ioctl.cpp renamed to jni/ioctl/ioctl.c

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
#ifdef __cplusplus
2-
extern "C" {
3-
#endif
4-
51
#include <jni.h>
62
#include <errno.h>
73
#include <fcntl.h>
@@ -29,15 +25,14 @@ int _ioctl(const char* device, int command, int args)
2925
}
3026

3127
JNIEXPORT jint JNICALL
32-
Java_org_koreader_launcher_device_Ioctl_ioctl(JNIEnv *env, __unused jobject,
33-
jstring device, jint command, jint args)
28+
Java_org_koreader_launcher_device_Ioctl_ioctl(JNIEnv *env,
29+
__unused jobject obj,
30+
jstring device,
31+
jint command,
32+
jint args)
3433
{
35-
const char *dev = env->GetStringUTFChars(device, nullptr);
34+
const char *dev = (*env)->GetStringUTFChars(env, device, NULL);
3635
jint res = _ioctl(dev, command, args);
37-
env->ReleaseStringUTFChars(device, dev);
36+
(*env)->ReleaseStringUTFChars(env, device, dev);
3837
return res;
3938
}
40-
41-
#ifdef __cplusplus
42-
}
43-
#endif

0 commit comments

Comments
 (0)