Mercurial > gnulib
changeset 37505:1aaefe261baa
get_shared_library_fullname: port to EMX
* lib/relocatable.c: Define strcmp and strncmp to stricmp and strnicmp
on EMX, respectively.
(_DLL_InitTerm): New on EMX.
(get_shared_library_fullname): Implement on EMX.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | KO Myung-Hun <komh78@gmail.com> |
---|---|
date | Wed, 03 Dec 2014 15:46:17 +0900 |
parents | 12811854baf7 |
children | fb0cd26533e7 |
files | ChangeLog lib/relocatable.c |
diffstat | 2 files changed, 57 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Dec 03 16:02:50 2014 +0900 +++ b/ChangeLog Wed Dec 03 15:46:17 2014 +0900 @@ -1,5 +1,11 @@ 2014-12-08 KO Myung-Hun <komh78@gmail.com> + get_shared_library_fullname: port to EMX + * lib/relocatable.c: Define strcmp and strncmp to stricmp and strnicmp + on EMX, respectively. + (_DLL_InitTerm): New on EMX. + (get_shared_library_fullname): Implement on EMX. + find_executable: port to EMX * lib/progreloc.c (find_executable): Implement on EMX.
--- a/lib/relocatable.c Wed Dec 03 16:02:50 2014 +0900 +++ b/lib/relocatable.c Wed Dec 03 15:46:17 2014 +0900 @@ -47,6 +47,14 @@ # include <windows.h> #endif +#ifdef __EMX__ +# define INCL_DOS +# include <os2.h> + +# define strcmp stricmp +# define strncmp strnicmp +#endif + #if DEPENDS_ON_LIBCHARSET # include <libcharset.h> #endif @@ -335,6 +343,45 @@ return TRUE; } +#elif defined __EMX__ + +extern int _CRT_init (void); +extern void _CRT_term (void); +extern void __ctordtorInit (void); +extern void __ctordtorTerm (void); + +unsigned long _System +_DLL_InitTerm (unsigned long hModule, unsigned long ulFlag) +{ + static char location[CCHMAXPATH]; + + switch (ulFlag) + { + case 0: + if (_CRT_init () == -1) + return 0; + + __ctordtorInit(); + + /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html + for specification of DosQueryModuleName(). */ + if (DosQueryModuleName (hModule, sizeof (location), location)) + return 0; + + _fnslashify (location); + shared_library_fullname = strdup (location); + break; + + case 1: + __ctordtorTerm(); + + _CRT_term (); + break; + } + + return 1; +} + #else /* Unix */ static void @@ -390,15 +437,16 @@ #endif } -#endif /* Native Windows / Unix */ +#endif /* Native Windows / EMX / Unix */ /* Return the full pathname of the current shared library. Return NULL if unknown. - Guaranteed to work only on Linux, Cygwin, and native Windows. */ + Guaranteed to work only on Linux, EMX, Cygwin, and native Windows. */ static char * get_shared_library_fullname () { -#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) +#if (!((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) \ + && !defined __EMX__) static bool tried_find_shared_library_fullname; if (!tried_find_shared_library_fullname) {