singlang/preload/override_bindtextdomain.c

27 lines
884 B
C

#define _GNU_SOURCE
#include <dlfcn.h>
#include <string.h>
#include <stdio.h>
typedef char* (*bindtextdomain_t)(const char* domainname, const char* dirname);
char* bindtextdomain(const char* domainname, const char* dirname) {
static bindtextdomain_t original_bindtextdomain = NULL;
if (!original_bindtextdomain) {
original_bindtextdomain = (bindtextdomain_t)dlsym(RTLD_NEXT, "bindtextdomain");
if (!original_bindtextdomain) {
fprintf(stderr, "Error: failed to find bindtextdomain\n");
return NULL;
}
}
#ifndef PNAME
fprintf(stderr, "Error: PNAME is not defined. Please define PNAME during compilation.\n");
exit(1);
#else
if (strcmp(domainname, PNAME) == 0) {
return original_bindtextdomain(domainname, "build/usr/share/locale");
}
return original_bindtextdomain(domainname, dirname);
#endif
}