int isn't big enough to hold a FILE* / DIR* on some systems, this causes
segfaults in calls that try to use the resulting FILE* / DIR*:
TESTSUITE: ERR: 'testsuite_rootfs_fopen' [1176160] terminated by signal 11 (Segmentation fault)
TESTSUITE: ERR: FAILED: testsuite_rootfs_fopen
FAIL: testsuite/test-testsuite
...
TESTSUITE: ERR: 'loaded_1' [1176166] terminated by signal 11 (Segmentation fault)
TESTSUITE: ERR: FAILED: loaded_1
FAIL: testsuite/test-loaded
...
TESTSUITE: ERR: 'from_alias' [1176181] terminated by signal 11 (Segmentation fault)
TESTSUITE: ERR: FAILED: from_alias
FAIL: testsuite/test-new-module
For reference on my system:
sizeof(int) = 4
sizeof(long) = 8
sizeof(FILE*) = 8
sizeof(DIR*) = 8
{
const char *p;
char buf[PATH_MAX * 2];
- static int (*_fopen)(const char *path, const char *mode);
+ static FILE* (*_fopen)(const char *path, const char *mode);
if (!get_rootpath(__func__))
return NULL;
if (p == NULL)
return NULL;
- return (void *) (long) (*_fopen)(p, mode);
+ return (*_fopen)(p, mode);
}
TS_EXPORT int open(const char *path, int flags, ...)
{
const char *p;
char buf[PATH_MAX * 2];
- static int (*_opendir)(const char *path);
+ static DIR* (*_opendir)(const char *path);
if (!get_rootpath(__func__))
return NULL;
if (p == NULL)
return NULL;
- return (void *)(long)(*_opendir)(p);
+ return (*_opendir)(p);
}