Loading include/client/gkfs_libc.hpp +37 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,12 @@ void dlsym_rewind(FILE* stream); int dlsym_feof(FILE* stream); // //fgets and fputs char* dlsym_fgets(char* s, int size, FILE* stream); char* dlsym_fputs(const char* s, FILE* stream); // Directory API Loading Loading @@ -342,6 +348,37 @@ clone(int (*fn)(void*), void* stack, int flags, void* arg, ...); /* ................................................................... */ FILE* fopen(const char* filename, const char* mode); size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream); size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream); int fseek(FILE* stream, long int offset, int whence); long ftell(FILE* stream); void rewind(FILE* stream); int fclose(FILE* stream); // feof implementation with lseek int feof(FILE* stream); // fgets implementation char* fgets(char* str, int size, FILE* stream); // fputs implementation int fputs(const char* str, FILE* stream); #ifdef __cplusplus } #endif src/client/gkfs_libc.cpp +85 −2 Original line number Diff line number Diff line Loading @@ -124,6 +124,10 @@ int (*real_fseek)(FILE*, long int, int) = NULL; long (*real_ftell)(FILE*) = NULL; 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; void initializeGekko() { Loading Loading @@ -988,6 +992,54 @@ dlsym_feof(FILE* stream){ return ret; } // fgets and fputs int dlsym_fputs(const char* str, FILE* stream) { if(real_fputs == NULL) { real_fputs = (int (*)(const char*, FILE*)) dlsym(RTLD_NEXT, "fputs"); } int ret = real_fputs(str, stream); return ret; } int dlsym_fgets(char* str, int n, FILE* stream) { if(real_fgets == NULL) { real_fgets = (int (*)(char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets"); } int ret = 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); } int ret = dlsym_fputs(str, stream); return ret; } int fgets(char* str, int n, FILE* stream) { initializeGekko(); if(CTX->file_map()->exist(fileno(stream))) { return gkfs::syscall::gkfs_fgets(str, n, stream); } int ret = dlsym_fgets(str, n, stream); return ret; } /** * stat management */ Loading Loading @@ -2628,11 +2680,12 @@ fopen(const char* filename, const char* mode) { size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { debug_info("[BYPASS] >> fread.... \n"); initializeGekko(); size_t ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { debug_info("[BYPASS] >> fread.... \n"); return gkfs::syscall::gkfs_read(stream->_fileno, ptr, size * nmemb); } Loading @@ -2644,11 +2697,12 @@ fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream) { debug_info("[BYPASS] >> fwrite.... \n"); initializeGekko(); size_t ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { debug_info("[BYPASS] >> fwrite.... \n"); return gkfs::syscall::gkfs_write(stream->_fileno, ptr, size * nmemb); } Loading Loading @@ -2738,5 +2792,34 @@ 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 +37 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,12 @@ void dlsym_rewind(FILE* stream); int dlsym_feof(FILE* stream); // //fgets and fputs char* dlsym_fgets(char* s, int size, FILE* stream); char* dlsym_fputs(const char* s, FILE* stream); // Directory API Loading Loading @@ -342,6 +348,37 @@ clone(int (*fn)(void*), void* stack, int flags, void* arg, ...); /* ................................................................... */ FILE* fopen(const char* filename, const char* mode); size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream); size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream); int fseek(FILE* stream, long int offset, int whence); long ftell(FILE* stream); void rewind(FILE* stream); int fclose(FILE* stream); // feof implementation with lseek int feof(FILE* stream); // fgets implementation char* fgets(char* str, int size, FILE* stream); // fputs implementation int fputs(const char* str, FILE* stream); #ifdef __cplusplus } #endif
src/client/gkfs_libc.cpp +85 −2 Original line number Diff line number Diff line Loading @@ -124,6 +124,10 @@ int (*real_fseek)(FILE*, long int, int) = NULL; long (*real_ftell)(FILE*) = NULL; 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; void initializeGekko() { Loading Loading @@ -988,6 +992,54 @@ dlsym_feof(FILE* stream){ return ret; } // fgets and fputs int dlsym_fputs(const char* str, FILE* stream) { if(real_fputs == NULL) { real_fputs = (int (*)(const char*, FILE*)) dlsym(RTLD_NEXT, "fputs"); } int ret = real_fputs(str, stream); return ret; } int dlsym_fgets(char* str, int n, FILE* stream) { if(real_fgets == NULL) { real_fgets = (int (*)(char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets"); } int ret = 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); } int ret = dlsym_fputs(str, stream); return ret; } int fgets(char* str, int n, FILE* stream) { initializeGekko(); if(CTX->file_map()->exist(fileno(stream))) { return gkfs::syscall::gkfs_fgets(str, n, stream); } int ret = dlsym_fgets(str, n, stream); return ret; } /** * stat management */ Loading Loading @@ -2628,11 +2680,12 @@ fopen(const char* filename, const char* mode) { size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { debug_info("[BYPASS] >> fread.... \n"); initializeGekko(); size_t ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { debug_info("[BYPASS] >> fread.... \n"); return gkfs::syscall::gkfs_read(stream->_fileno, ptr, size * nmemb); } Loading @@ -2644,11 +2697,12 @@ fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream) { debug_info("[BYPASS] >> fwrite.... \n"); initializeGekko(); size_t ret; if(CTX->interception_enabled()) { if(CTX->file_map()->exist(stream->_fileno)) { debug_info("[BYPASS] >> fwrite.... \n"); return gkfs::syscall::gkfs_write(stream->_fileno, ptr, size * nmemb); } Loading Loading @@ -2738,5 +2792,34 @@ 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; }