Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1:Staging:C
ksh
ksh93-fs3d.dif
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ksh93-fs3d.dif of Package ksh
2013-10-17 10:30:20 - werner@suse.de Found by debugging with valgrind and environment variable LD_LIBRARY_PATH that the mount() system call function from the glibc is used instead of a fs3d_mount() function. To avoid this make fs3d_mount() a weak symbol to be overloadable by a shared library function and make the stub function return -1 for not configured file system type. --- src/lib/libast/misc/fs3d.c +++ src/lib/libast/misc/fs3d.c 2013-10-17 10:30:20.000000000 +0000 @@ -28,6 +28,20 @@ * only active for non-shared 3d library */ +#if defined(__linux__) && defined(__GNUC__) +# if defined __USE_ISOC99 +# define _cat_pragma(exp) _Pragma(#exp) +# define _weak_pragma(exp) _cat_pragma(weak name) +# else +# define _weak_pragma(exp) +# endif +# define _declare(name,sym) __extension__ extern __typeof__(sym) name +# define weak_symbol(sym) _weak_pragma(name) _declare(sym,sym) __attribute__((__weak__)) +# include <error.h> +#else +# define weak_symbol(sym) +#endif + #define mount ______mount #include <ast.h> @@ -35,6 +49,7 @@ #undef mount #include <fs3d.h> +weak_symbol(fs3d_mount); int fs3d(register int op) @@ -102,11 +117,18 @@ fs3d(register int op) * user code that includes <fs3d.h> will have mount() mapped to fs3d_mount() * this restricts the various "standard" mount prototype conflicts to this spot * this means that code that includes <fs3d.h> cannot access the real mount - * (at least without some additional macro hackery + * (at least without some additional macro hackery) */ #undef mount - +#if defined(__linux__) && defined(__GNUC__) +int __attribute__((__noinline__)) +fs3d_mount(const char* source, char* target, int flags, void* data) +{ + errno = ENODEV; + return -1; +} +#else extern int mount(const char*, char*, int, void*); int @@ -114,3 +136,4 @@ fs3d_mount(const char* source, char* tar { return mount(source, target, flags, data); } +#endif
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor