Skip to content

Commit db16461

Browse files
committed
redirect: use uthash lib for the files hash-table, and include more python modules in the default blacklist
1 parent 9f9dafb commit db16461

File tree

5 files changed

+61
-34
lines changed

5 files changed

+61
-34
lines changed

distribute.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ function push_arm() {
132132
export OLD_LD=$LD
133133

134134
# to override the default optimization, set OFLAG
135-
#export OFLAG="-Os"
135+
export OFLAG="-Os"
136136
#export OFLAG="-O2"
137137

138138
if [ "X$NOANDROIDREDIRECT" == "X" ]; then

src/android_redirect.c

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1+
#define HASH_FUNCTION HASH_FNV
12

23
#include <stdio.h>
34
#include <sys/types.h>
45
#include <sys/stat.h>
56
#include <unistd.h>
67
#include <dlfcn.h>
78
#include <dirent.h>
9+
#include "uthash.h"
810
#include "android/log.h"
911

1012
//#define LOG(...) __android_log_print(ANDROID_LOG_INFO, "redirect", __VA_ARGS__)
11-
#define LOG(...)
13+
#define LOG(...)
1214

1315
typedef struct filemap_entry_s {
1416
const char *source;
1517
const char dest[PATH_MAX];
1618
int is_dir;
17-
struct filemap_entry_s *next;
19+
UT_hash_handle hh;
1820
} filemap_entry_t;
1921

2022
static filemap_entry_t *entries = NULL;
@@ -24,47 +26,42 @@ static char libdir[PATH_MAX];
2426

2527
static void filemap_entry_add(char *source, char *dest) {
2628
filemap_entry_t *entry = (filemap_entry_t *)malloc(sizeof(filemap_entry_t));
27-
entry->source = source;
2829
snprintf((char *)entry->dest, PATH_MAX, "%s/%s", libdir, dest);
29-
entry->next = entries;
30+
entry->source = source;
3031
entry->is_dir = 0;
31-
entries = entry;
32+
HASH_ADD_KEYPTR(hh, entries, entry->source, strlen(entry->source), entry);
3233
}
3334

3435
static void filemap_entry_add_dir(char *source) {
3536
filemap_entry_t *entry = (filemap_entry_t *)malloc(sizeof(filemap_entry_t));
36-
entry->source = source;
3737
snprintf((char *)entry->dest, PATH_MAX, "%s", libdir);
38-
entry->next = entries;
38+
entry->source = source;
3939
entry->is_dir = 1;
40-
entries = entry;
40+
HASH_ADD_KEYPTR(hh, entries, entry->source, strlen(entry->source), entry);
4141
}
4242

43-
static const char *filemap_entry_find(const char *source) {
44-
filemap_entry_t *entry = entries;
45-
while ( entry != NULL ) {
46-
if ( strcmp(entry->source, source) == 0 )
47-
return entry->dest;
48-
entry = entry->next;
49-
}
50-
return NULL;
43+
static filemap_entry_t *filemap_entry_find(const char *source) {
44+
filemap_entry_t *entry = NULL;
45+
HASH_FIND_STR(entries, source, entry);
46+
return entry;
5147
}
5248

53-
static filemap_entry_t *filemap_entry_find_dir(const char *source) {
54-
filemap_entry_t *entry = entries;
55-
while ( entry != NULL ) {
56-
if ( strcmp(entry->source, source) == 0 && entry->is_dir )
49+
static filemap_entry_t *find_dir(const char *source) {
50+
filemap_entry_t *entry = NULL;
51+
if (strncmp(source, basedir, basedirlen) == 0) {
52+
entry = filemap_entry_find(source + basedirlen + 1);
53+
if (entry && entry->is_dir)
5754
return entry;
58-
entry = entry->next;
5955
}
56+
entry = filemap_entry_find(source);
57+
if (entry && entry->is_dir)
58+
return entry;
6059
return NULL;
6160
}
6261

63-
static filemap_entry_t *find_dir(const char *source) {
64-
if (strncmp(source, basedir, basedirlen) == 0) {
65-
return filemap_entry_find_dir(source + basedirlen + 1);
66-
}
67-
return filemap_entry_find_dir(source);
62+
static const char *filemap_entry_find_str(const char *source) {
63+
filemap_entry_t *entry = filemap_entry_find(source);
64+
return entry ? entry->dest : NULL;
6865
}
6966

7067
static int file_exists(const char* fn) {
@@ -79,20 +76,20 @@ static const char *mangle(const char *fn) {
7976

8077
if (strncmp(fn, basedir, basedirlen) == 0) {
8178
LOG(" --> search in the filemap(basedir): %s", fn + basedirlen + 1);
82-
const char *fm = filemap_entry_find(fn + basedirlen + 1);
79+
const char *fm = filemap_entry_find_str(fn + basedirlen + 1);
8380
LOG(" --> filemap returned %s", fm);
8481
return fm != NULL ? fm : fn;
8582
}
8683

8784
if ( fn[0] == '.' && fn[1] == '/' ) {
8885
LOG(" --> search in the filemap(.): %s", fn + 2);
89-
const char *fm3 = filemap_entry_find(fn + 2);
86+
const char *fm3 = filemap_entry_find_str(fn + 2);
9087
LOG(" --> filemap returned %s", fm3);
9188
return fm3 != NULL ? fm3 : fn;
9289
}
9390

9491
LOG(" --> search in the filemap(no basedir): %s", fn);
95-
const char *fm2 = filemap_entry_find(fn);
92+
const char *fm2 = filemap_entry_find_str(fn);
9693
LOG(" --> filemap returned %s", fm2);
9794
return fm2 != NULL ? fm2 : fn;
9895
}
@@ -228,7 +225,7 @@ struct dirent *__android_readdir(DIR *dirp) {
228225
void **mem = (void **)dirp;
229226
char *source;
230227
static struct dirent d;
231-
filemap_entry_t *entry;
228+
filemap_entry_t *entry, *tmp;
232229
filemap_entry_t *basedir;
233230

234231
// native access
@@ -260,11 +257,11 @@ struct dirent *__android_readdir(DIR *dirp) {
260257
d.d_type = entry->is_dir ? DT_DIR : DT_REG;
261258
strncpy(d.d_name, entry->source, 256);
262259

263-
mem[2] = entry->next;
260+
mem[2] = entry->hh.next;
264261
return &d;
265262

266263
nextentry:;
267-
entry = entry->next;
264+
entry = entry->hh.next;
268265
}
269266

270267
LOG(" --> wrapped access ( end )");

src/blacklist.txt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,32 @@ sndhdr.pyo
7373
__phello__.foo.pyo
7474
sunaudio.pyo
7575
os2emxpath.pyo
76-
multiprocessing/dummy*
76+
multiprocessing*
77+
distutils*
78+
json/tool.pyo
79+
pydoc.pyo
80+
doctest.pyo
81+
tarfile.pyo
82+
pdb.doc
83+
difflib.pyo
84+
aifc.pyo
85+
rexec.pyo
86+
nntplib.pyo
87+
plistlib.pyo
88+
sunau.pyo
89+
macpath.pyo
90+
whichdb.pyo
91+
Bastion.pyo
92+
93+
# mail related modules
94+
email/*
95+
imaplib.pyo
96+
mailbox.pyo
97+
mailcap.pyo
98+
mailcap.pyo
99+
mhlib.pyo
100+
MimeWriter.pyo
101+
smtpd.pyo
77102

78103
# unused binaries python modules
79104
lib-dynload/_sqlite3.so

src/src/org/renpy/android/PythonActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.FileWriter;
2222
import java.io.File;
2323
import java.io.IOException;
24+
import java.lang.System;
2425

2526
import java.util.zip.GZIPInputStream;
2627

@@ -51,6 +52,7 @@ public class PythonActivity extends Activity implements Runnable {
5152
protected void onCreate(Bundle savedInstanceState) {
5253
super.onCreate(savedInstanceState);
5354

55+
SDLSurfaceView.timeStart = System.currentTimeMillis();
5456
Hardware.context = this;
5557
Action.context = this;
5658
this.mActivity = this;

src/src/org/renpy/android/SDLSurfaceView.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,12 @@
5656
import java.nio.ByteOrder;
5757
import android.graphics.Color;
5858
import android.content.res.Resources;
59+
import java.lang.System;
5960

6061

6162
public class SDLSurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
6263
private static String TAG = "SDLSurface";
64+
public static long timeStart = 0;
6365
private final String mVertexShader =
6466
"uniform mat4 uMVPMatrix;\n" +
6567
"attribute vec4 aPosition;\n" +
@@ -1096,6 +1098,7 @@ public boolean commitText(CharSequence text, int newCursorPosition) {
10961098

10971099
static void activateInput() {
10981100
mInputActivated = true;
1101+
Log.i("timestart", String.format("START DURATION: %d", System.currentTimeMillis() - timeStart));
10991102
}
11001103

11011104
static void openUrl(String url) {

0 commit comments

Comments
 (0)