10 #define PREFIX "/rootfs"
13 const char *add_prefix(const char *orig, char *prefixed) {
17 if ((strncmp(orig, "/proc", 5) == 0) ||
18 (strncmp(orig, "/sys", 4) == 0)) {
20 status = snprintf(prefixed, BUFSIZE, "%s%s", PREFIX, orig);
21 if ((unsigned int)status >= BUFSIZE) {
22 error(status, ENAMETOOLONG, "'%s' got truncated when adding '%s' prefix: '%s'",
23 orig, PREFIX, prefixed);
25 } else if (status < 1) {
26 error(status, errno, "adding '%s' prefix to file path failed: '%s' -> '%s'",
27 PREFIX, orig, prefixed);
30 return (const char*) prefixed;
38 FILE *fopen(const char *path, const char *mode) {
39 char filename[BUFSIZE] = "\0";
41 FILE *(*original_fopen)(const char*, const char*);
42 original_fopen = dlsym(RTLD_NEXT, "fopen");
44 return (*original_fopen)(add_prefix(path, filename), mode);
47 DIR *opendir(const char *name) {
48 char filename[BUFSIZE] = "\0";
50 DIR *(*original_opendir)(const char*);
51 original_opendir = dlsym(RTLD_NEXT, "opendir");
53 return (*original_opendir)(add_prefix(name, filename));
56 int *open(const char *pathname, int flags) {
57 char filename[BUFSIZE] = "\0";
59 int *(*original_open)(const char*, int);
60 original_open = dlsym(RTLD_NEXT, "open");
62 return (*original_open)(add_prefix(pathname, filename), flags);