История изменений
Исправление 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");
}