Verified Commit ae5d4d4a authored by Tommaso Tocci's avatar Tommaso Tocci
Browse files

intercept fflush

parent 4086b176
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ extern void* libc_clearerr;
extern void* libc_feof;
extern void* libc_ferror;
extern void* libc_fileno;
extern void* libc_fflush;

extern void* libc_mkdir;
extern void* libc_mkdirat;
+13 −0
Original line number Diff line number Diff line
@@ -265,6 +265,19 @@ int ferror(FILE *stream) {
    return (reinterpret_cast<decltype(&ferror)>(libc_ferror))(stream);
}

int fflush(FILE *stream) {
    init_passthrough_if_needed();
    if(CTX->initialized() && (stream != nullptr)) {
        auto fd = file_to_fd(stream);
        if(CTX->file_map()->exist(fd)) {
            CTX->log()->trace("{}() called with fd {}", __func__, fd);
            return 0;
        }
    }
    return (reinterpret_cast<decltype(&fflush)>(libc_fflush))(stream);

}

/******  FILE OPS  ******/

#undef creat
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ void* libc_clearerr;
void* libc_feof;
void* libc_ferror;
void* libc_fileno;
void* libc_fflush;

void* libc_mkdir;
void* libc_mkdirat;
@@ -107,6 +108,7 @@ void init_passthrough_() {
    libc_feof = dlsym(libc, "feof");
    libc_ferror = dlsym(libc, "ferror");
    libc_fileno = dlsym(libc, "fileno");
    libc_fflush = dlsym(libc, "fflush");

    libc_mkdir = dlsym(libc, "mkdir");
    libc_mkdirat = dlsym(libc, "mkdirat");