Loading src/client/gkfs_libc.cpp +63 −49 Original line number Diff line number Diff line Loading @@ -897,24 +897,24 @@ dlsym_mmap(void* addr, size_t length, int prot, int flags, int fd, FILE* dlsym_fopen(const char* filename, const char* mode) { if(real_fopen == NULL) { real_fopen = (FILE* (*)(const char*, const char*)) dlsym(RTLD_NEXT, "fopen"); real_fopen = (FILE * (*) (const char*, const char*) ) dlsym(RTLD_NEXT, "fopen"); } FILE* ret = real_fopen(filename, mode); return ret; } FILE* dlsym_fdopen(int fd, const char* mode) { if(real_fdopen == NULL) { real_fdopen = (FILE* (*)(int, const char*)) dlsym(RTLD_NEXT, "fdopen"); real_fdopen = (FILE * (*) (int, const char*) ) dlsym(RTLD_NEXT, "fdopen"); } FILE* ret = real_fdopen(fd, mode); return ret; } int Loading @@ -931,7 +931,8 @@ dlsym_fclose(FILE* stream) { size_t dlsym_fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { if(real_fread == NULL) { real_fread = (size_t (*)(void*, size_t, size_t, FILE*)) dlsym(RTLD_NEXT, "fread"); real_fread = (size_t(*)(void*, size_t, size_t, FILE*)) dlsym(RTLD_NEXT, "fread"); } size_t ret = real_fread(ptr, size, nmemb, stream); Loading @@ -941,13 +942,13 @@ dlsym_fread(void* ptr, size_t size, size_t nmemb, FILE* stream){ size_t dlsym_fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream) { if(real_fwrite == NULL) { real_fwrite = (size_t (*)(const void*, size_t, size_t, FILE*)) dlsym(RTLD_NEXT, "fwrite"); real_fwrite = (size_t(*)(const void*, size_t, size_t, FILE*)) dlsym( RTLD_NEXT, "fwrite"); } size_t ret = real_fwrite(ptr, size, nmemb, stream); return ret; } int Loading @@ -959,7 +960,6 @@ dlsym_fseek(FILE* stream, long int offset, int whence){ int ret = real_fseek(stream, offset, whence); return ret; } long dlsym_ftell(FILE* stream) { Loading @@ -970,7 +970,6 @@ dlsym_ftell(FILE* stream){ long ret = real_ftell(stream); return ret; } void dlsym_rewind(FILE* stream) { Loading Loading @@ -1012,11 +1011,9 @@ dlsym_fgets(char* str, int n, FILE* stream) { } return real_fgets(str, n, stream); } /** * stat management */ Loading Loading @@ -2624,7 +2621,6 @@ fdopen(int fd, const char* mode) { } FILE* fopen(const char* filename, const char* mode) { debug_info("[BYPASS] >> fopen.... %s \n", filename); Loading @@ -2639,7 +2635,24 @@ fopen(const char* filename, const char* mode) { return NULL; case gkfs::preload::RelativizeStatus::internal: { int fd = gkfs::syscall::gkfs_open(resolved, 0, O_RDONLY); int fd = 0; debug_info("[BYPASS] >> fopen GEKKO.... %s \n", filename); // convert mode to open mode int open_flags = 0; if(strchr(mode, 'r') != NULL) { open_flags |= O_RDONLY; } if(strchr(mode, 'w') != NULL) { open_flags |= O_WRONLY | O_CREAT | O_TRUNC; } if(strchr(mode, 'a') != NULL) { open_flags |= O_WRONLY | O_CREAT | O_APPEND; } if(strchr(mode, '+') != NULL) { open_flags |= O_RDWR | O_CREAT; } fd = gkfs::syscall::gkfs_open(resolved, 0666, open_flags); if(fd == -1) { return NULL; } Loading @@ -2650,7 +2663,9 @@ fopen(const char* filename, const char* mode) { break; } } return dlsym_fopen(filename, mode); ret = dlsym_fopen(filename, mode); return ret; } Loading @@ -2662,8 +2677,7 @@ fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { 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); return gkfs::syscall::gkfs_read(stream->_fileno, ptr, size * nmemb); } } Loading Loading
src/client/gkfs_libc.cpp +63 −49 Original line number Diff line number Diff line Loading @@ -897,24 +897,24 @@ dlsym_mmap(void* addr, size_t length, int prot, int flags, int fd, FILE* dlsym_fopen(const char* filename, const char* mode) { if(real_fopen == NULL) { real_fopen = (FILE* (*)(const char*, const char*)) dlsym(RTLD_NEXT, "fopen"); real_fopen = (FILE * (*) (const char*, const char*) ) dlsym(RTLD_NEXT, "fopen"); } FILE* ret = real_fopen(filename, mode); return ret; } FILE* dlsym_fdopen(int fd, const char* mode) { if(real_fdopen == NULL) { real_fdopen = (FILE* (*)(int, const char*)) dlsym(RTLD_NEXT, "fdopen"); real_fdopen = (FILE * (*) (int, const char*) ) dlsym(RTLD_NEXT, "fdopen"); } FILE* ret = real_fdopen(fd, mode); return ret; } int Loading @@ -931,7 +931,8 @@ dlsym_fclose(FILE* stream) { size_t dlsym_fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { if(real_fread == NULL) { real_fread = (size_t (*)(void*, size_t, size_t, FILE*)) dlsym(RTLD_NEXT, "fread"); real_fread = (size_t(*)(void*, size_t, size_t, FILE*)) dlsym(RTLD_NEXT, "fread"); } size_t ret = real_fread(ptr, size, nmemb, stream); Loading @@ -941,13 +942,13 @@ dlsym_fread(void* ptr, size_t size, size_t nmemb, FILE* stream){ size_t dlsym_fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream) { if(real_fwrite == NULL) { real_fwrite = (size_t (*)(const void*, size_t, size_t, FILE*)) dlsym(RTLD_NEXT, "fwrite"); real_fwrite = (size_t(*)(const void*, size_t, size_t, FILE*)) dlsym( RTLD_NEXT, "fwrite"); } size_t ret = real_fwrite(ptr, size, nmemb, stream); return ret; } int Loading @@ -959,7 +960,6 @@ dlsym_fseek(FILE* stream, long int offset, int whence){ int ret = real_fseek(stream, offset, whence); return ret; } long dlsym_ftell(FILE* stream) { Loading @@ -970,7 +970,6 @@ dlsym_ftell(FILE* stream){ long ret = real_ftell(stream); return ret; } void dlsym_rewind(FILE* stream) { Loading Loading @@ -1012,11 +1011,9 @@ dlsym_fgets(char* str, int n, FILE* stream) { } return real_fgets(str, n, stream); } /** * stat management */ Loading Loading @@ -2624,7 +2621,6 @@ fdopen(int fd, const char* mode) { } FILE* fopen(const char* filename, const char* mode) { debug_info("[BYPASS] >> fopen.... %s \n", filename); Loading @@ -2639,7 +2635,24 @@ fopen(const char* filename, const char* mode) { return NULL; case gkfs::preload::RelativizeStatus::internal: { int fd = gkfs::syscall::gkfs_open(resolved, 0, O_RDONLY); int fd = 0; debug_info("[BYPASS] >> fopen GEKKO.... %s \n", filename); // convert mode to open mode int open_flags = 0; if(strchr(mode, 'r') != NULL) { open_flags |= O_RDONLY; } if(strchr(mode, 'w') != NULL) { open_flags |= O_WRONLY | O_CREAT | O_TRUNC; } if(strchr(mode, 'a') != NULL) { open_flags |= O_WRONLY | O_CREAT | O_APPEND; } if(strchr(mode, '+') != NULL) { open_flags |= O_RDWR | O_CREAT; } fd = gkfs::syscall::gkfs_open(resolved, 0666, open_flags); if(fd == -1) { return NULL; } Loading @@ -2650,7 +2663,9 @@ fopen(const char* filename, const char* mode) { break; } } return dlsym_fopen(filename, mode); ret = dlsym_fopen(filename, mode); return ret; } Loading @@ -2662,8 +2677,7 @@ fread(void* ptr, size_t size, size_t nmemb, FILE* stream) { 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); return gkfs::syscall::gkfs_read(stream->_fileno, ptr, size * nmemb); } } Loading