LINUX.ORG.RU

История изменений

Исправление superuser, (текущая версия) :

Для начала, такие вещи не пишут на C++

плюсую анонимуса, пиши на чистом C.
Я бы ещё вынес указатели на оригинальные функции в глобальные переменные и проверку добавил как-то так:

if (open_orig == NULL) {
    open_orig = (int (*)(const char*, int, ...))dlsym(RTLD_NEXT, "open");
    write_orig=(ssize_t (*)(int __fd,__const void *,size_t))dlsym(RTLD_NEXT,"write");
    close_orig=(int (*)(int __fd))dlsym(RTLD_NEXT,"close");
    read_orig=(ssize_t (*)(int __fd, void *__buf, size_t __nbytes))dlsym(RTLD_NEXT,"read");
}

Исходная версия superuser, :

Для начала, такие вещи не пишут на C

плюсую анонимуса, пиши на чистом C.
Я бы ещё вынес указатели на оригинальные функции в глобальные переменные и проверку добавил как-то так:

if (open_orig == NULL) {
    open_orig = (int (*)(const char*, int, ...))dlsym(RTLD_NEXT, "open");
    write_orig=(ssize_t (*)(int __fd,__const void *,size_t))dlsym(RTLD_NEXT,"write");
    close_orig=(int (*)(int __fd))dlsym(RTLD_NEXT,"close");
    read_orig=(ssize_t (*)(int __fd, void *__buf, size_t __nbytes))dlsym(RTLD_NEXT,"read");
}