Verified Commit 716f7705 authored by Tommaso Tocci's avatar Tommaso Tocci
Browse files

intercept fseek

parent 60b39682
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ extern void* libc_fgetc;
extern void* libc_fgets;
extern void* libc_ungetc;

extern void* libc_fseek;

extern void* libc_mkdir;
extern void* libc_mkdirat;
extern void* libc_unlink;
+16 −0
Original line number Diff line number Diff line
@@ -479,6 +479,22 @@ int ungetc(int c, FILE *stream) {
    return LIBC_FUNC(ungetc, c, stream);
}

int fseek(FILE *stream, long offset, int whence) {
    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 [fd: {}, offset: {}, whence: {}");
            if(adafs_lseek(fd, offset, whence) == -1) {
                return -1;
            } else {
                return 0;
            }
        }
    }
    return LIBC_FUNC(fseek, stream, offset, whence);
}

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

#undef creat
+4 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ void* libc_fgetc;
void* libc_fgets;
void* libc_ungetc;

void* libc_fseek;

void* libc_mkdir;
void* libc_mkdirat;
void* libc_unlink;
@@ -152,6 +154,8 @@ void init_passthrough_() {
    libc_fgets = dlsym(libc, "fgets");
    libc_ungetc = dlsym(libc, "ungetc");

    libc_fseek = dlsym(libc, "fseek");

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