Commit 8492adc4 authored by Ramon Nou's avatar Ramon Nou
Browse files

fgets fputs

parent df01156d
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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
+16 −43
Original line number Diff line number Diff line
@@ -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
@@ -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);
@@ -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);
}

/**
@@ -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;
}