@@ -1,38 +0,0 @@
|
|||||||
#include <cstdio>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
|
|
||||||
#include <ft2build.h>
|
|
||||||
#include FT_FREETYPE_H
|
|
||||||
|
|
||||||
using FtInitFn = FT_Error (*)(FT_Library *);
|
|
||||||
using FtDoneFn = FT_Error (*)(FT_Library);
|
|
||||||
|
|
||||||
extern "C" FT_Error FT_Init_FreeType(FT_Library *library)
|
|
||||||
{
|
|
||||||
static FtInitFn real_fn
|
|
||||||
= reinterpret_cast<FtInitFn>(dlsym(RTLD_NEXT, "FT_Init_FreeType"));
|
|
||||||
if (!real_fn) {
|
|
||||||
std::fprintf(stderr,
|
|
||||||
"FT_Init_FreeType hook: failed to locate real symbol\n");
|
|
||||||
return FT_Err_Invalid_Handle;
|
|
||||||
}
|
|
||||||
FT_Error error = real_fn(library);
|
|
||||||
std::fprintf(stderr, "FT_Init_FreeType -> %p (err=%d)\n",
|
|
||||||
library ? static_cast<void *>(*library) : nullptr, error);
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" FT_Error FT_Done_FreeType(FT_Library library)
|
|
||||||
{
|
|
||||||
static FtDoneFn real_fn
|
|
||||||
= reinterpret_cast<FtDoneFn>(dlsym(RTLD_NEXT, "FT_Done_FreeType"));
|
|
||||||
std::fprintf(stderr, "FT_Done_FreeType(%p)\n",
|
|
||||||
static_cast<void *>(library));
|
|
||||||
if (!real_fn) {
|
|
||||||
std::fprintf(stderr,
|
|
||||||
"FT_Done_FreeType hook: failed to locate real symbol\n");
|
|
||||||
return FT_Err_Invalid_Handle;
|
|
||||||
}
|
|
||||||
return real_fn(library);
|
|
||||||
}
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user