diff lib/progreloc.c @ 17824:542f0c385022

find_executable: port to EMX * lib/progreloc.c (find_executable): Implement on EMX. Signed-off-by: Eric Blake <eblake@redhat.com>
author KO Myung-Hun <komh78@gmail.com>
date Wed, 03 Dec 2014 16:02:50 +0900
parents 4ffedeebd641
children ab58d4870664
line wrap: on
line diff
--- a/lib/progreloc.c	Thu Dec 04 10:03:34 2014 +0900
+++ b/lib/progreloc.c	Wed Dec 03 16:02:50 2014 +0900
@@ -44,6 +44,11 @@
 # include <windows.h>
 #endif
 
+#ifdef __EMX__
+# define INCL_DOS
+# include <os2.h>
+#endif
+
 #include "relocatable.h"
 
 #ifdef NO_XMALLOC
@@ -157,6 +162,23 @@
     /* Shouldn't happen.  */
     return NULL;
   return xstrdup (location);
+#elif defined __EMX__
+  PPIB ppib;
+  char location[CCHMAXPATH];
+
+  /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/619_L2H_DosGetInfoBlocksSynt.html
+     for specification of DosGetInfoBlocks().  */
+  if (DosGetInfoBlocks (NULL, &ppib))
+    return NULL;
+
+  /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html
+     for specification of DosQueryModuleName().  */
+  if (DosQueryModuleName (ppib->pib_hmte, sizeof (location), location))
+    return NULL;
+
+  _fnslashify (location);
+
+  return xstrdup (location);
 #else /* Unix */
 # ifdef __linux__
   /* The executable is accessible as /proc/<pid>/exe.  In newer Linux