Skip to content

Commit

Permalink
Posix override feature working in Mac OS X.
Browse files Browse the repository at this point in the history
  • Loading branch information
aldenml committed Dec 17, 2015
1 parent 730d6c6 commit 30f5476
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 413 deletions.
10 changes: 0 additions & 10 deletions src/main/java/com/frostwire/jlibtorrent/swig/libtorrent_jni.java
Original file line number Diff line number Diff line change
Expand Up @@ -3355,10 +3355,6 @@ public class libtorrent_jni {
public final static native int swig_posix_wrapper_openSwigExplicitswig_posix_wrapper(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3, int jarg4);
public final static native int swig_posix_wrapper_open64(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3, int jarg4);
public final static native int swig_posix_wrapper_open64SwigExplicitswig_posix_wrapper(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3, int jarg4);
public final static native int swig_posix_wrapper_openat(long jarg1, swig_posix_wrapper jarg1_, int jarg2, String jarg3, int jarg4, int jarg5);
public final static native int swig_posix_wrapper_openatSwigExplicitswig_posix_wrapper(long jarg1, swig_posix_wrapper jarg1_, int jarg2, String jarg3, int jarg4, int jarg5);
public final static native int swig_posix_wrapper_creat(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3);
public final static native int swig_posix_wrapper_creatSwigExplicitswig_posix_wrapper(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3);
public final static native int swig_posix_wrapper_mkdir(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3);
public final static native int swig_posix_wrapper_mkdirSwigExplicitswig_posix_wrapper(long jarg1, swig_posix_wrapper jarg1_, String jarg2, int jarg3);
public final static native int swig_posix_wrapper_rename(long jarg1, swig_posix_wrapper jarg1_, String jarg2, String jarg3);
Expand Down Expand Up @@ -3662,12 +3658,6 @@ public static int SwigDirector_swig_posix_wrapper_open(swig_posix_wrapper jself,
public static int SwigDirector_swig_posix_wrapper_open64(swig_posix_wrapper jself, String pathname, int flags, int mode) {
return jself.open64(pathname, flags, mode);
}
public static int SwigDirector_swig_posix_wrapper_openat(swig_posix_wrapper jself, int dirfd, String pathname, int flags, int mode) {
return jself.openat(dirfd, pathname, flags, mode);
}
public static int SwigDirector_swig_posix_wrapper_creat(swig_posix_wrapper jself, String pathname, int mode) {
return jself.creat(pathname, mode);
}
public static int SwigDirector_swig_posix_wrapper_mkdir(swig_posix_wrapper jself, String pathname, int mode) {
return jself.mkdir(pathname, mode);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,6 @@ public int open64(String pathname, int flags, int mode) {
return (getClass() == swig_posix_wrapper.class) ? libtorrent_jni.swig_posix_wrapper_open64(swigCPtr, this, pathname, flags, mode) : libtorrent_jni.swig_posix_wrapper_open64SwigExplicitswig_posix_wrapper(swigCPtr, this, pathname, flags, mode);
}

public int openat(int dirfd, String pathname, int flags, int mode) {
return (getClass() == swig_posix_wrapper.class) ? libtorrent_jni.swig_posix_wrapper_openat(swigCPtr, this, dirfd, pathname, flags, mode) : libtorrent_jni.swig_posix_wrapper_openatSwigExplicitswig_posix_wrapper(swigCPtr, this, dirfd, pathname, flags, mode);
}

public int creat(String pathname, int mode) {
return (getClass() == swig_posix_wrapper.class) ? libtorrent_jni.swig_posix_wrapper_creat(swigCPtr, this, pathname, mode) : libtorrent_jni.swig_posix_wrapper_creatSwigExplicitswig_posix_wrapper(swigCPtr, this, pathname, mode);
}

public int mkdir(String pathname, int mode) {
return (getClass() == swig_posix_wrapper.class) ? libtorrent_jni.swig_posix_wrapper_mkdir(swigCPtr, this, pathname, mode) : libtorrent_jni.swig_posix_wrapper_mkdirSwigExplicitswig_posix_wrapper(swigCPtr, this, pathname, mode);
}
Expand Down
14 changes: 1 addition & 13 deletions src/test/java/com/frostwire/jlibtorrent/demo/FsContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public final class FsContext {
public static void main(String[] args) throws Throwable {

// comment this line for a real application
args = new String[]{"/home/user1/Downloads/Lisa_Richards_Beating_of_the_Sun_FrostWire_MP3_Nov_09_2015.torrent"};
args = new String[]{"/Users/aldenml/Downloads/Lisa_Richards_Beating_of_the_Sun_FrostWire_MP3_Nov_09_2015.torrent"};

File torrentFile = new File(args[0]);

Expand All @@ -38,18 +38,6 @@ public int open64(String pathname, int flags, int mode) {
return super.open64(pathname, flags, mode);
}

@Override
public int openat(int dirfd, String pathname, int flags, int mode) {
System.out.println("OPENAT: " + pathname);
return super.openat(dirfd, pathname, flags, mode);
}

@Override
public int creat(String pathname, int mode) {
System.out.println("CREAT: " + pathname);
return super.creat(pathname, mode);
}

@Override
public int mkdir(String pathname, int mode) {
System.out.println("MKDIR: " + pathname);
Expand Down
134 changes: 79 additions & 55 deletions swig/libtorrent.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include <dlfcn.h>

#include <boost/version.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
Expand Down Expand Up @@ -402,10 +404,8 @@ swig_peer_plugin* swig_torrent_plugin::new_peer_connection(libtorrent::peer_conn

extern "C" {

int __real_open(const char* pathname, int flags, ...);
int __real_open64(const char* pathname, int flags, ...);
int __real_openat(int dirfd, const char* pathname, int flags, ...);
int __real_creat(const char* pathname, mode_t mode);
int __real_open(const char* pathname, int flags, int mode);
int __real_open64(const char* pathname, int flags, int mode);
int __real_mkdir(const char* pathname, mode_t mode);
int __real_rename(const char *oldpath, const char *newpath);
int __real_remove(const char *pathname);
Expand All @@ -428,63 +428,47 @@ class swig_posix_wrapper {
}

virtual int open(const char* pathname, int flags, int mode) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
return __real_open(pathname, flags, mode);
#else
return -1;
#endif
}

virtual int open64(const char* pathname, int flags, int mode) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
return __real_open64(pathname, flags, mode);
#else
return -1;
#endif
}

virtual int openat(int dirfd, const char* pathname, int flags, int mode) {
#ifdef __linux || __ANDROID__
return __real_openat(dirfd, pathname, flags, mode);
#else
return -1;
#endif
}

virtual int creat(const char* pathname, int mode) {
#ifdef __linux || __ANDROID__
return __real_creat(pathname, mode);
#else
return -1;
#endif
}

virtual int mkdir(const char* pathname, int mode) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
return __real_mkdir(pathname, mode);
#else
return -1;
#endif
}

virtual int rename(const char *oldpath, const char *newpath) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
return __real_rename(oldpath, newpath);
#else
return -1;
#endif
}

virtual int remove(const char *pathname) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
return __real_remove(pathname);
#else
return -1;
#endif
}

virtual int lstat(const char* path, swig_posix_stat* buf) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
struct ::stat ret;
int r = __real_lstat(path, &ret);
buf->mode = ret.st_mode;
Expand All @@ -499,7 +483,7 @@ class swig_posix_wrapper {
}

virtual int stat(const char* path, swig_posix_stat* buf) {
#ifdef __linux || __ANDROID__
#ifndef _WIN32
struct ::stat ret;
int r = __real_stat(path, &ret);
buf->mode = ret.st_mode;
Expand All @@ -522,8 +506,17 @@ void set_global_posix_wrapper(swig_posix_wrapper* ctx) {

extern "C" {

int __wrap_open(const char* pathname, int flags, ...) {
#ifdef __linux || __ANDROID__
int __real_open(const char* pathname, int flags, int mode) {
#ifndef _WIN32
int (*f)(const char*, int, ...) = (int(*)(const char*, int, ...))(dlsym(RTLD_NEXT, "open"));
return f(pathname, flags, mode);
#else
return -1;
#endif
}

int open(const char* pathname, int flags, ...) {
#ifndef _WIN32
int mode = 0;
if (flags & O_CREAT) {
va_list arg;
Expand All @@ -537,70 +530,92 @@ int __wrap_open(const char* pathname, int flags, ...) {
#endif
}

int __wrap_open64(const char* pathname, int flags, ...) {
#ifdef __linux || __ANDROID__
int mode = 0;
if (flags & O_CREAT) {
va_list arg;
va_start(arg, flags);
mode = va_arg(arg, int);
va_end(arg);
}
return g_posix_wrapper != NULL ? g_posix_wrapper->open64(pathname, flags, mode) : __real_open64(pathname, flags, mode);
int __real_open64(const char* pathname, int flags, int mode) {
#ifndef _WIN32
int (*f)(const char*, int, ...) = (int(*)(const char*, int, ...))(dlsym(RTLD_NEXT, "open64"));
return f(pathname, flags, mode);
#else
return -1;
#endif
}

int __wrap_openat(int dirfd, const char* pathname, int flags, ...) {
#ifdef __linux || __ANDROID__
int open64(const char* pathname, int flags, ...) {
#ifndef _WIN32
int mode = 0;
if (flags & O_CREAT) {
va_list arg;
va_start(arg, flags);
mode = va_arg(arg, int);
va_end(arg);
}
return g_posix_wrapper != NULL ? g_posix_wrapper->openat(dirfd, pathname, flags, mode) : __real_openat(dirfd, pathname, flags, mode);
return g_posix_wrapper != NULL ? g_posix_wrapper->open64(pathname, flags, mode) : __real_open64(pathname, flags, mode);
#else
return -1;
#endif
}

int __wrap_creat(const char* pathname, mode_t mode) {
#ifdef __linux || __ANDROID__
return g_posix_wrapper != NULL ? g_posix_wrapper->creat(pathname, mode) : __real_creat(pathname, mode);
int __real_mkdir(const char* pathname, mode_t mode) {
#ifndef _WIN32
int (*f)(const char*, mode_t) = (int(*)(const char*, mode_t))(dlsym(RTLD_NEXT, "mkdir"));
return f(pathname, mode);
#else
return -1;
#endif
}

int __wrap_mkdir(const char* pathname, mode_t mode) {
#ifdef __linux || __ANDROID__
int mkdir(const char* pathname, mode_t mode) {
#ifndef _WIN32
return g_posix_wrapper != NULL ? g_posix_wrapper->mkdir(pathname, mode) : __real_mkdir(pathname, mode);
#else
return -1;
#endif
}

int __wrap_rename(const char *oldpath, const char *newpath) {
#ifdef __linux || __ANDROID__
int __real_rename(const char *oldpath, const char *newpath) {
#ifndef _WIN32
int (*f)(const char*, const char*) = (int(*)(const char*, const char*))(dlsym(RTLD_NEXT, "rename"));
return f(oldpath, newpath);
#else
return -1;
#endif
}

int rename(const char *oldpath, const char *newpath) {
#ifndef _WIN32
return g_posix_wrapper != NULL ? g_posix_wrapper->rename(oldpath, newpath) : __real_rename(oldpath, newpath);
#else
return -1;
#endif
}

int __wrap_remove(const char *pathname) {
#ifdef __linux || __ANDROID__
int __real_remove(const char *pathname) {
#ifndef _WIN32
int (*f)(const char*) = (int(*)(const char*))(dlsym(RTLD_NEXT, "remove"));
return f(pathname);
#else
return -1;
#endif
}

int remove(const char *pathname) {
#ifndef _WIN32
return g_posix_wrapper != NULL ? g_posix_wrapper->remove(pathname) : __real_remove(pathname);
#else
return -1;
#endif
}

int __wrap_lstat(const char* path, struct ::stat* buf) {
#ifdef __linux || __ANDROID__
int __real_lstat(const char* path, struct ::stat* buf) {
#ifndef _WIN32
int (*f)(const char*, struct ::stat*) = (int(*)(const char*, struct ::stat*))(dlsym(RTLD_NEXT, "lstat"));
return f(path, buf);
#else
return -1;
#endif
}

int lstat(const char* path, struct ::stat* buf) {
#ifndef _WIN32
if (g_posix_wrapper != NULL) {
swig_posix_stat ret;
int r = g_posix_wrapper->lstat(path, &ret);
Expand All @@ -618,8 +633,17 @@ int __wrap_lstat(const char* path, struct ::stat* buf) {
#endif
}

int __wrap_stat(const char* path, struct ::stat* buf) {
#ifdef __linux || __ANDROID__
int __real_stat(const char* path, struct ::stat* buf) {
#ifndef _WIN32
int (*f)(const char*, struct ::stat*) = (int(*)(const char*, struct ::stat*))(dlsym(RTLD_NEXT, "stat"));
return f(path, buf);
#else
return -1;
#endif
}

int stat(const char* path, struct ::stat* buf) {
#ifndef _WIN32
if (g_posix_wrapper != NULL) {
swig_posix_stat ret;
int r = g_posix_wrapper->stat(path, &ret);
Expand Down
8 changes: 8 additions & 0 deletions swig/libtorrent.i
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,14 @@ namespace std {
%rename("$ignore", regextarget=1, %$isfunction) "^__real_.*";
%rename("$ignore", regextarget=1, %$isfunction) "^__wrap_.*";

%ignore ::open;
%ignore ::open64;
%ignore ::mkdir;
%ignore ::rename;
%ignore ::remove;
%ignore ::lstat;
%ignore ::stat;

%include <boost/system/error_code.hpp>

%include "libtorrent/version.hpp"
Expand Down

0 comments on commit 30f5476

Please sign in to comment.