Loading include/client/gkfs_libc.hpp +5 −5 Original line number Diff line number Diff line Loading @@ -159,9 +159,9 @@ dlsym_feof(FILE* stream); // //fgets and fputs char * dlsym_fgets(char* s, int size, FILE* stream); char* dlsym_fputs(const char* s, FILE* stream); dlsym_fgets(char* str, int size, FILE* stream); int dlsym_fputs(const char* str, FILE* stream); // Directory API Loading src/client/gkfs_libc.cpp +16 −43 Original line number Diff line number Diff line Loading @@ -126,7 +126,7 @@ void (*real_rewind)(FILE*) = NULL; int (*real_feof)(FILE*) = NULL; //fputs and fgets int (*real_fputs)(const char*, FILE*) = NULL; int (*real_fgets)(char*, int, FILE*) = NULL; char* (*real_fgets)(char*, int, FILE*) = NULL; void Loading Loading @@ -1005,22 +1005,23 @@ dlsym_fputs(const char* str, FILE* stream) { return ret; } int char * dlsym_fgets(char* str, int n, FILE* stream) { if(real_fgets == NULL) { real_fgets = (int (*)(char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets"); real_fgets = (char* (*)(char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets"); } int ret = real_fgets(str, n, stream); return real_fgets(str, n, stream); return ret; } int fputs(const char* str, FILE* stream) { initializeGekko(); if(CTX->file_map()->exist(fileno(stream))) { return gkfs::syscall::gkfs_fputs(str, stream); // write str of size n with gkfs_write int size = strlen(str); return gkfs::syscall::gkfs_write(fileno(stream), str, size); } int ret = dlsym_fputs(str, stream); Loading @@ -1028,16 +1029,19 @@ fputs(const char* str, FILE* stream) { return ret; } int char * fgets(char* str, int n, FILE* stream) { initializeGekko(); if(CTX->file_map()->exist(fileno(stream))) { return gkfs::syscall::gkfs_fgets(str, n, stream); // read str n chars size_t n = gkfs::syscall::gkfs_read(fileno(stream), str, n); if(n == 0) { return NULL; } return str; } int ret = dlsym_fgets(str, n, stream); return ret; return dlsym_fgets(str, n, stream); } /** Loading Loading @@ -2792,34 +2796,3 @@ feof(FILE* stream) { return ret; } // fgets implementation char* fgets(char* str, int size, FILE* stream) { debug_info("[BYPASS] >> fgets.... \n"); initializeGekko(); char* ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { return gkfs::syscall::gkfs_fgets(str, size, stream); } } ret = dlsym_fgets(str, size, stream); return ret; } // fputs implementation int fputs(const char* str, FILE* stream) { debug_info("[BYPASS] >> fputs.... \n"); initializeGekko(); int ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { return gkfs::syscall::gkfs_fputs(str, stream); } } ret = dlsym_fputs(str, stream); return ret; } Loading
include/client/gkfs_libc.hpp +5 −5 Original line number Diff line number Diff line Loading @@ -159,9 +159,9 @@ dlsym_feof(FILE* stream); // //fgets and fputs char * dlsym_fgets(char* s, int size, FILE* stream); char* dlsym_fputs(const char* s, FILE* stream); dlsym_fgets(char* str, int size, FILE* stream); int dlsym_fputs(const char* str, FILE* stream); // Directory API Loading
src/client/gkfs_libc.cpp +16 −43 Original line number Diff line number Diff line Loading @@ -126,7 +126,7 @@ void (*real_rewind)(FILE*) = NULL; int (*real_feof)(FILE*) = NULL; //fputs and fgets int (*real_fputs)(const char*, FILE*) = NULL; int (*real_fgets)(char*, int, FILE*) = NULL; char* (*real_fgets)(char*, int, FILE*) = NULL; void Loading Loading @@ -1005,22 +1005,23 @@ dlsym_fputs(const char* str, FILE* stream) { return ret; } int char * dlsym_fgets(char* str, int n, FILE* stream) { if(real_fgets == NULL) { real_fgets = (int (*)(char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets"); real_fgets = (char* (*)(char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets"); } int ret = real_fgets(str, n, stream); return real_fgets(str, n, stream); return ret; } int fputs(const char* str, FILE* stream) { initializeGekko(); if(CTX->file_map()->exist(fileno(stream))) { return gkfs::syscall::gkfs_fputs(str, stream); // write str of size n with gkfs_write int size = strlen(str); return gkfs::syscall::gkfs_write(fileno(stream), str, size); } int ret = dlsym_fputs(str, stream); Loading @@ -1028,16 +1029,19 @@ fputs(const char* str, FILE* stream) { return ret; } int char * fgets(char* str, int n, FILE* stream) { initializeGekko(); if(CTX->file_map()->exist(fileno(stream))) { return gkfs::syscall::gkfs_fgets(str, n, stream); // read str n chars size_t n = gkfs::syscall::gkfs_read(fileno(stream), str, n); if(n == 0) { return NULL; } return str; } int ret = dlsym_fgets(str, n, stream); return ret; return dlsym_fgets(str, n, stream); } /** Loading Loading @@ -2792,34 +2796,3 @@ feof(FILE* stream) { return ret; } // fgets implementation char* fgets(char* str, int size, FILE* stream) { debug_info("[BYPASS] >> fgets.... \n"); initializeGekko(); char* ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { return gkfs::syscall::gkfs_fgets(str, size, stream); } } ret = dlsym_fgets(str, size, stream); return ret; } // fputs implementation int fputs(const char* str, FILE* stream) { debug_info("[BYPASS] >> fputs.... \n"); initializeGekko(); int ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { return gkfs::syscall::gkfs_fputs(str, stream); } } ret = dlsym_fputs(str, stream); return ret; }