[mupen64plus-core] 210/310: Imported Upstream version 2.0~rc3+3+5d46baa3dd76

Sven Eckelmann ecsv-guest at moszumanska.debian.org
Thu Nov 26 05:58:01 UTC 2015


This is an automated email from the git hooks/post-receive script.

ecsv-guest pushed a commit to branch armhf_test
in repository mupen64plus-core.

commit e2abd2ae3497e4a7d78826c5720a9eac80df17c9
Author: Sven Eckelmann <sven at narfation.org>
Date:   Wed Jun 5 11:04:58 2013 +0200

    Imported Upstream version 2.0~rc3+3+5d46baa3dd76
---
 projects/msvc11/mupen64plus-core.vcxproj |  12 +-
 src/api/vidext.c                         |   3 +-
 src/main/list.h                          |  13 +-
 src/main/rom.c                           |   4 +-
 src/main/util.c                          |   2 +-
 src/main/util.h                          |   9 +-
 src/main/workqueue.h                     |   9 +-
 src/osal/files_win32.c                   |  42 +++---
 src/osal/preproc.h                       |   2 +
 src/osd/osd.cpp                          |   5 +-
 src/osd/osd.h                            |  17 +--
 src/r4300/pure_interp.c                  |   2 +-
 src/r4300/x86/assemble.h                 | 231 ++++++++++++++++---------------
 tools/install_binary_bundle.sh           |  22 +++
 tools/uninstall_binary_bundle.sh         |  39 ++++--
 15 files changed, 242 insertions(+), 170 deletions(-)

diff --git a/projects/msvc11/mupen64plus-core.vcxproj b/projects/msvc11/mupen64plus-core.vcxproj
index cd14133..8902c9d 100644
--- a/projects/msvc11/mupen64plus-core.vcxproj
+++ b/projects/msvc11/mupen64plus-core.vcxproj
@@ -20,10 +20,12 @@
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v110</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -50,11 +52,17 @@
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <TargetName>mupen64plus</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <TargetName>mupen64plus</TargetName>
+  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\src;..\..\..\mupen64plus-win32-deps\SDL-1.2.14\include;..\..\..\mupen64plus-win32-deps\zlib-1.2.3\include;..\..\..\mupen64plus-win32-deps\libpng-1.2.37\include;..\..\..\mupen64plus-win32-deps\freetype-2.3.5-1\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;DYNAREC;inline=__inline;M64P_OSD;M64P_PARALLEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;DYNAREC;M64P_OSD;M64P_PARALLEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -75,7 +83,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\src;..\..\..\mupen64plus-win32-deps\SDL-1.2.14\include;..\..\..\mupen64plus-win32-deps\zlib-1.2.3\include;..\..\..\mupen64plus-win32-deps\libpng-1.2.37\include;..\..\..\mupen64plus-win32-deps\freetype-2.3.5-1\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;DYNAREC;inline=__inline;M64P_OSD;M64P_PARALLEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;DYNAREC;M64P_OSD;M64P_PARALLEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
diff --git a/src/api/vidext.c b/src/api/vidext.c
index c75428e..9af2aae 100644
--- a/src/api/vidext.c
+++ b/src/api/vidext.c
@@ -259,10 +259,11 @@ EXPORT m64p_error CALL VidExt_ResizeWindow(int Width, int Height)
     /* call video extension override if necessary */
     if (l_VideoExtensionActive)
     {
+        m64p_error rval;
         // shut down the OSD
         osd_exit();
         // re-create the OGL context
-        m64p_error rval = (*l_ExternalVideoFuncTable.VidExtFuncResizeWindow)(Width, Height);
+        rval = (*l_ExternalVideoFuncTable.VidExtFuncResizeWindow)(Width, Height);
         if (rval == M64ERR_SUCCESS)
         {
             StateChanged(M64CORE_VIDEO_SIZE, (Width << 16) | Height);
diff --git a/src/main/list.h b/src/main/list.h
index 343892c..8ca24a4 100644
--- a/src/main/list.h
+++ b/src/main/list.h
@@ -27,6 +27,7 @@ extern "C" {
 #endif
 
 #include <stddef.h>
+#include "osal/preproc.h"
 
 struct list_head {
     struct list_head *prev;
@@ -36,13 +37,13 @@ struct list_head {
 #define LIST_HEAD(list) \
     struct list_head list = { &(list), &(list) }
 
-static inline void INIT_LIST_HEAD(struct list_head *head)
+static osal_inline void INIT_LIST_HEAD(struct list_head *head)
 {
     head->next = head;
     head->prev = head;
 }
 
-static inline void list_add(struct list_head *new_item, struct list_head *head)
+static osal_inline void list_add(struct list_head *new_item, struct list_head *head)
 {
     struct list_head *next = head->next;
 
@@ -52,7 +53,7 @@ static inline void list_add(struct list_head *new_item, struct list_head *head)
     head->next = new_item;
 }
 
-static inline void list_add_tail(struct list_head *new_item, struct list_head *head)
+static osal_inline void list_add_tail(struct list_head *new_item, struct list_head *head)
 {
     struct list_head *prev = head->prev;
 
@@ -62,7 +63,7 @@ static inline void list_add_tail(struct list_head *new_item, struct list_head *h
     head->prev = new_item;
 }
 
-static inline void list_del(struct list_head *entry)
+static osal_inline void list_del(struct list_head *entry)
 {
     struct list_head *next = entry->next;
     struct list_head *prev = entry->prev;
@@ -71,13 +72,13 @@ static inline void list_del(struct list_head *entry)
     prev->next = next;
 }
 
-static inline void list_del_init(struct list_head *entry)
+static osal_inline void list_del_init(struct list_head *entry)
 {
     list_del(entry);
     INIT_LIST_HEAD(entry);
 }
 
-static inline int list_empty(const struct list_head *head)
+static osal_inline int list_empty(const struct list_head *head)
 {
     return (head->next == head);
 }
diff --git a/src/main/rom.c b/src/main/rom.c
index 1684cb9..be26b0c 100644
--- a/src/main/rom.c
+++ b/src/main/rom.c
@@ -59,7 +59,7 @@ m64p_rom_header   ROM_HEADER;
 rom_params        ROM_PARAMS;
 m64p_rom_settings ROM_SETTINGS;
 
-static m64p_system_type rom_country_code_to_system_type(char country_code);
+static m64p_system_type rom_country_code_to_system_type(unsigned short country_code);
 static int rom_system_type_to_ai_dac_rate(m64p_system_type system_type);
 static int rom_system_type_to_vi_limit(m64p_system_type system_type);
 
@@ -236,7 +236,7 @@ m64p_error close_rom(void)
 /* ROM utility functions */
 
 // Get the system type associated to a ROM country code.
-static m64p_system_type rom_country_code_to_system_type(char country_code)
+static m64p_system_type rom_country_code_to_system_type(unsigned short country_code)
 {
     switch (country_code)
     {
diff --git a/src/main/util.c b/src/main/util.c
index 246610c..b92c762 100644
--- a/src/main/util.c
+++ b/src/main/util.c
@@ -122,7 +122,7 @@ void to_big_endian_buffer(void *buffer, size_t length, size_t count)
 /**********************
      GUI utilities
  **********************/
-void countrycodestring(char countrycode, char *string)
+void countrycodestring(unsigned short countrycode, char *string)
 {
     switch (countrycode)
     {
diff --git a/src/main/util.h b/src/main/util.h
index 46b0560..c5015f6 100644
--- a/src/main/util.h
+++ b/src/main/util.h
@@ -28,6 +28,7 @@ extern "C" {
 #endif
 
 #include <string.h>
+#include "osal/preproc.h"
 
 /**********************
      File utilities
@@ -64,7 +65,7 @@ file_status_t write_to_file(const char *filename, const void *data, size_t size)
  * added in relatively recent versions. In addition, GCC can detect the byte
  * swap code and optimize it with a high enough optimization level. */
 
-static inline unsigned short m64p_swap16(unsigned short x)
+static osal_inline unsigned short m64p_swap16(unsigned short x)
 {
     #ifdef _MSC_VER
     return _byteswap_ushort(x);
@@ -74,7 +75,7 @@ static inline unsigned short m64p_swap16(unsigned short x)
     #endif
 }
 
-static inline unsigned int m64p_swap32(unsigned int x)
+static osal_inline unsigned int m64p_swap32(unsigned int x)
 {
     #ifdef _MSC_VER
     return _byteswap_ulong(x); // long is always 32-bit in Windows
@@ -86,7 +87,7 @@ static inline unsigned int m64p_swap32(unsigned int x)
     #endif
 }
 
-static inline unsigned long long int m64p_swap64(unsigned long long int x)
+static osal_inline unsigned long long int m64p_swap64(unsigned long long int x)
 {
     #ifdef _MSC_VER
     return _byteswap_uint64(x);
@@ -127,7 +128,7 @@ void to_big_endian_buffer(void *buffer, size_t length, size_t count);
 /**********************
      GUI utilities
  **********************/
-void countrycodestring(char countrycode, char *string);
+void countrycodestring(unsigned short countrycode, char *string);
 void imagestring(unsigned char imagetype, char *string);
 
 /**********************
diff --git a/src/main/workqueue.h b/src/main/workqueue.h
index f6bc186..f0f7070 100644
--- a/src/main/workqueue.h
+++ b/src/main/workqueue.h
@@ -23,6 +23,7 @@
 #define __WORKQUEUE_H__
 
 #include "list.h"
+#include "osal/preproc.h"
 
 struct work_struct *work;
 typedef void (*work_func_t)(struct work_struct *work);
@@ -31,7 +32,7 @@ struct work_struct {
     struct list_head list;
 };
 
-static inline void init_work(struct work_struct *work, work_func_t func)
+static osal_inline void init_work(struct work_struct *work, work_func_t func)
 {
     INIT_LIST_HEAD(&work->list);
     work->func = func;
@@ -45,16 +46,16 @@ int queue_work(struct work_struct *work);
 
 #else
 
-static inline int workqueue_init(void)
+static osal_inline int workqueue_init(void)
 {
     return 0;
 }
 
-static inline void workqueue_shutdown(void)
+static osal_inline void workqueue_shutdown(void)
 {
 }
 
-static inline int queue_work(struct work_struct *work)
+static osal_inline int queue_work(struct work_struct *work)
 {
     work->func(work);
     return 0;
diff --git a/src/osal/files_win32.c b/src/osal/files_win32.c
index 4993f03..933aa20 100644
--- a/src/osal/files_win32.c
+++ b/src/osal/files_win32.c
@@ -77,42 +77,52 @@ static int search_dir_file(char *destpath, const char *path, const char *filenam
 
 int osal_mkdirp(const char *dirpath, int mode)
 {
-    char *mypath, *currpath;
+    char *mypath, *currpath, *lastchar;
     struct _stat fileinfo;
 
-    // Terminate quickly if the path already exists
-    if (_stat(dirpath, &fileinfo) == 0 && (fileinfo.st_mode & _S_IFDIR))
-        return 0;
-
-    // Create partial paths
-    mypath = currpath = strdup(dirpath);
+    // Create a copy of the path, so we can modify it
+    mypath = currpath = _strdup(dirpath);
     if (mypath == NULL)
         return 1;
 
+	// if the directory path ends with a separator, remove it
+	lastchar = mypath + strlen(mypath) - 1;
+	if (strchr(OSAL_DIR_SEPARATORS, *lastchar) != NULL)
+		*lastchar = 0;
+
+    // Terminate quickly if the path already exists
+    if (_stat(mypath, &fileinfo) == 0 && (fileinfo.st_mode & _S_IFDIR))
+		goto goodexit;
+
     while ((currpath = strpbrk(currpath + 1, OSAL_DIR_SEPARATORS)) != NULL)
     {
+		// if slash is right after colon, then we are looking at drive name prefix (C:\) and should
+		// just skip it, because _stat and _mkdir will both fail for "C:"
+		if (currpath > mypath && currpath[-1] == ':')
+			continue;
         *currpath = '\0';
         if (_stat(mypath, &fileinfo) != 0)
         {
             if (_mkdir(mypath) != 0)
-                break;
+				goto errorexit;
         }
-        else
+        else if (!(fileinfo.st_mode & _S_IFDIR))
         {
-            if (!(fileinfo.st_mode & _S_IFDIR))
-                break;
+			goto errorexit;
         }
         *currpath = OSAL_DIR_SEPARATORS[0];
     }
-    free(mypath);
-    if (currpath != NULL)
-        return 1;
 
     // Create full path
-    if (_stat(dirpath, &fileinfo) != 0 && _mkdir(dirpath) != 0)
-        return 1;
+    if  (_mkdir(mypath) != 0)
+        goto errorexit;
 
+goodexit:
+	free(mypath);
     return 0;
+errorexit:
+	free(mypath);
+	return 1;
 }
 
 const char * osal_get_shared_filepath(const char *filename, const char *firstsearch, const char *secondsearch)
diff --git a/src/osal/preproc.h b/src/osal/preproc.h
index bf00df7..d6ad2b1 100644
--- a/src/osal/preproc.h
+++ b/src/osal/preproc.h
@@ -29,6 +29,7 @@
   // macros
   #define OSAL_BREAKPOINT_INTERRUPT __asm{ int 3 };
   #define ALIGN(BYTES,DATA) __declspec(align(BYTES)) DATA;
+  #define osal_inline __inline
 
   // string functions
   #define osal_insensitive_strcmp(x, y) _stricmp(x, y)
@@ -44,6 +45,7 @@
   // macros
   #define OSAL_BREAKPOINT_INTERRUPT asm(" int $3; ");
   #define ALIGN(BYTES,DATA) DATA __attribute__((aligned(BYTES)));
+  #define osal_inline inline
 
   // string functions
   #define osal_insensitive_strcmp(x, y) strcasecmp(x, y)
diff --git a/src/osd/osd.cpp b/src/osd/osd.cpp
index c4826ee..c06b9bb 100644
--- a/src/osd/osd.cpp
+++ b/src/osd/osd.cpp
@@ -276,8 +276,9 @@ void osd_exit(void)
     // delete message queue
     SDL_LockMutex(osd_list_lock);
     list_for_each_entry_safe(msg, safe, &l_messageQueue, osd_message_t, list) {
-        free(msg->text);
-        free(msg);
+        osd_remove_message(msg);
+        if (!msg->user_managed)
+            free(msg);
     }
     SDL_UnlockMutex(osd_list_lock);
 
diff --git a/src/osd/osd.h b/src/osd/osd.h
index 199ac0d..bbdd699 100644
--- a/src/osd/osd.h
+++ b/src/osd/osd.h
@@ -23,6 +23,7 @@
 #define __OSD_H__
 
 #include "main/list.h"
+#include "osal/preproc.h"
 
 /******************************************************************
    osd_corner
@@ -100,36 +101,36 @@ void osd_message_set_user_managed(osd_message_t *);
 
 #else
 
-static inline void osd_init(int width, int height)
+static osal_inline void osd_init(int width, int height)
 {
 }
 
-static inline void osd_exit(void)
+static osal_inline void osd_exit(void)
 {
 }
 
-static inline void osd_render(void)
+static osal_inline void osd_render(void)
 {
 }
 
-static inline osd_message_t * osd_new_message(enum osd_corner eCorner, const char *fmt, ...)
+static osal_inline osd_message_t * osd_new_message(enum osd_corner eCorner, const char *fmt, ...)
 {
 	return NULL;
 }
 
-static inline void osd_update_message(osd_message_t *msg, const char *fmt, ...)
+static osal_inline void osd_update_message(osd_message_t *msg, const char *fmt, ...)
 {
 }
 
-static inline void osd_delete_message(osd_message_t *msg)
+static osal_inline void osd_delete_message(osd_message_t *msg)
 {
 }
 
-static inline void osd_message_set_static(osd_message_t *msg)
+static osal_inline void osd_message_set_static(osd_message_t *msg)
 {
 }
 
-static inline void osd_message_set_user_managed(osd_message_t *msg)
+static osal_inline void osd_message_set_user_managed(osd_message_t *msg)
 {
 }
 
diff --git a/src/r4300/pure_interp.c b/src/r4300/pure_interp.c
index 32083b7..0ddcf42 100644
--- a/src/r4300/pure_interp.c
+++ b/src/r4300/pure_interp.c
@@ -95,7 +95,7 @@ static void prefetch(void);
       } \
       else name(); \
    }
-#define CHECK_MEMORY(x)
+#define CHECK_MEMORY()
 
 #include "interpreter.def"
 
diff --git a/src/r4300/x86/assemble.h b/src/r4300/x86/assemble.h
index 9b75f89..83516fc 100644
--- a/src/r4300/x86/assemble.h
+++ b/src/r4300/x86/assemble.h
@@ -24,6 +24,7 @@
 
 #include "r4300/recomph.h"
 #include "api/callbacks.h"
+#include "osal/preproc.h"
 
 #include <stdlib.h>
 
@@ -64,7 +65,7 @@ void jump_start_rel32(void);
 void jump_end_rel32(void);
 void add_jump(unsigned int pc_addr, unsigned int mi_addr);
 
-static inline void put8(unsigned char octet)
+static osal_inline void put8(unsigned char octet)
 {
    (*inst_pointer)[code_length] = octet;
    code_length++;
@@ -75,7 +76,7 @@ static inline void put8(unsigned char octet)
    }
 }
 
-static inline void put32(unsigned int dword)
+static osal_inline void put32(unsigned int dword)
 {
    if ((code_length+4) >= max_code_length)
    {
@@ -86,26 +87,26 @@ static inline void put32(unsigned int dword)
    code_length+=4;
 }
 
-static inline void mov_eax_memoffs32(unsigned int *memoffs32)
+static osal_inline void mov_eax_memoffs32(unsigned int *memoffs32)
 {
    put8(0xA1);
    put32((unsigned int)(memoffs32));
 }
 
-static inline void mov_memoffs32_eax(unsigned int *memoffs32)
+static osal_inline void mov_memoffs32_eax(unsigned int *memoffs32)
 {
    put8(0xA3);
    put32((unsigned int)(memoffs32));
 }
 
-static inline void mov_m8_reg8(unsigned char *m8, int reg8)
+static osal_inline void mov_m8_reg8(unsigned char *m8, int reg8)
 {
    put8(0x88);
    put8((reg8 << 3) | 5);
    put32((unsigned int)(m8));
 }
 
-static inline void mov_reg16_m16(int reg16, unsigned short *m16)
+static osal_inline void mov_reg16_m16(int reg16, unsigned short *m16)
 {
    put8(0x66);
    put8(0x8B);
@@ -113,7 +114,7 @@ static inline void mov_reg16_m16(int reg16, unsigned short *m16)
    put32((unsigned int)(m16));
 }
 
-static inline void mov_m16_reg16(unsigned short *m16, int reg16)
+static osal_inline void mov_m16_reg16(unsigned short *m16, int reg16)
 {
    put8(0x66);
    put8(0x89);
@@ -121,27 +122,27 @@ static inline void mov_m16_reg16(unsigned short *m16, int reg16)
    put32((unsigned int)(m16));
 }
 
-static inline void cmp_reg32_m32(int reg32, unsigned int *m32)
+static osal_inline void cmp_reg32_m32(int reg32, unsigned int *m32)
 {
    put8(0x3B);
    put8((reg32 << 3) | 5);
    put32((unsigned int)(m32));
 }
 
-static inline void cmp_reg32_reg32(int reg1, int reg2)
+static osal_inline void cmp_reg32_reg32(int reg1, int reg2)
 {
    put8(0x39);
    put8((reg2 << 3) | reg1 | 0xC0);
 }
 
-static inline void cmp_reg32_imm8(int reg32, unsigned char imm8)
+static osal_inline void cmp_reg32_imm8(int reg32, unsigned char imm8)
 {
    put8(0x83);
    put8(0xF8 + reg32);
    put8(imm8);
 }
 
-static inline void cmp_preg32pimm32_imm8(int reg32, unsigned int imm32, unsigned char imm8)
+static osal_inline void cmp_preg32pimm32_imm8(int reg32, unsigned int imm32, unsigned char imm8)
 {
    put8(0x80);
    put8(0xB8 + reg32);
@@ -149,21 +150,21 @@ static inline void cmp_preg32pimm32_imm8(int reg32, unsigned int imm32, unsigned
    put8(imm8);
 }
 
-static inline void cmp_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void cmp_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xF8 + reg32);
    put32(imm32);
 }
 
-static inline void test_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void test_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0xF7);
    put8(0xC0 + reg32);
    put32(imm32);
 }
 
-static inline void test_m32_imm32(unsigned int *m32, unsigned int imm32)
+static osal_inline void test_m32_imm32(unsigned int *m32, unsigned int imm32)
 {
    put8(0xF7);
    put8(0x05);
@@ -171,131 +172,131 @@ static inline void test_m32_imm32(unsigned int *m32, unsigned int imm32)
    put32(imm32);
 }
 
-static inline void add_m32_reg32(unsigned int *m32, int reg32)
+static osal_inline void add_m32_reg32(unsigned int *m32, int reg32)
 {
    put8(0x01);
    put8((reg32 << 3) | 5);
    put32((unsigned int)(m32));
 }
 
-static inline void sub_reg32_m32(int reg32, unsigned int *m32)
+static osal_inline void sub_reg32_m32(int reg32, unsigned int *m32)
 {
    put8(0x2B);
    put8((reg32 << 3) | 5);
    put32((unsigned int)(m32));
 }
 
-static inline void sub_reg32_reg32(int reg1, int reg2)
+static osal_inline void sub_reg32_reg32(int reg1, int reg2)
 {
    put8(0x29);
    put8((reg2 << 3) | reg1 | 0xC0);
 }
 
-static inline void sbb_reg32_reg32(int reg1, int reg2)
+static osal_inline void sbb_reg32_reg32(int reg1, int reg2)
 {
    put8(0x19);
    put8((reg2 << 3) | reg1 | 0xC0);
 }
 
-static inline void sub_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void sub_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xE8 + reg32);
    put32(imm32);
 }
 
-static inline void sub_eax_imm32(unsigned int imm32)
+static osal_inline void sub_eax_imm32(unsigned int imm32)
 {
    put8(0x2D);
    put32(imm32);
 }
 
-static inline void jne_rj(unsigned char saut)
+static osal_inline void jne_rj(unsigned char saut)
 {
    put8(0x75);
    put8(saut);
 }
 
-static inline void je_rj(unsigned char saut)
+static osal_inline void je_rj(unsigned char saut)
 {
    put8(0x74);
    put8(saut);
 }
 
-static inline void jb_rj(unsigned char saut)
+static osal_inline void jb_rj(unsigned char saut)
 {
    put8(0x72);
    put8(saut);
 }
 
-static inline void jbe_rj(unsigned char saut)
+static osal_inline void jbe_rj(unsigned char saut)
 {
    put8(0x76);
    put8(saut);
 }
 
-static inline void ja_rj(unsigned char saut)
+static osal_inline void ja_rj(unsigned char saut)
 {
    put8(0x77);
    put8(saut);
 }
 
-static inline void jae_rj(unsigned char saut)
+static osal_inline void jae_rj(unsigned char saut)
 {
    put8(0x73);
    put8(saut);
 }
 
-static inline void jle_rj(unsigned char saut)
+static osal_inline void jle_rj(unsigned char saut)
 {
    put8(0x7E);
    put8(saut);
 }
 
-static inline void jge_rj(unsigned char saut)
+static osal_inline void jge_rj(unsigned char saut)
 {
    put8(0x7D);
    put8(saut);
 }
 
-static inline void jg_rj(unsigned char saut)
+static osal_inline void jg_rj(unsigned char saut)
 {
    put8(0x7F);
    put8(saut);
 }
 
-static inline void jl_rj(unsigned char saut)
+static osal_inline void jl_rj(unsigned char saut)
 {
    put8(0x7C);
    put8(saut);
 }
 
-static inline void jp_rj(unsigned char saut)
+static osal_inline void jp_rj(unsigned char saut)
 {
    put8(0x7A);
    put8(saut);
 }
 
-static inline void je_near_rj(unsigned int saut)
+static osal_inline void je_near_rj(unsigned int saut)
 {
    put8(0x0F);
    put8(0x84);
    put32(saut);
 }
 
-static inline void mov_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void mov_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0xB8+reg32);
    put32(imm32);
 }
 
-static inline void jmp_imm_short(char saut)
+static osal_inline void jmp_imm_short(char saut)
 {
    put8(0xEB);
    put8(saut);
 }
 
-static inline void or_m32_imm32(unsigned int *m32, unsigned int imm32)
+static osal_inline void or_m32_imm32(unsigned int *m32, unsigned int imm32)
 {
    put8(0x81);
    put8(0x0D);
@@ -303,19 +304,19 @@ static inline void or_m32_imm32(unsigned int *m32, unsigned int imm32)
    put32(imm32);
 }
 
-static inline void or_reg32_reg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void or_reg32_reg32(unsigned int reg1, unsigned int reg2)
 {
    put8(0x09);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void and_reg32_reg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void and_reg32_reg32(unsigned int reg1, unsigned int reg2)
 {
    put8(0x21);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void and_m32_imm32(unsigned int *m32, unsigned int imm32)
+static osal_inline void and_m32_imm32(unsigned int *m32, unsigned int imm32)
 {
    put8(0x81);
    put8(0x25);
@@ -323,13 +324,13 @@ static inline void and_m32_imm32(unsigned int *m32, unsigned int imm32)
    put32(imm32);
 }
 
-static inline void xor_reg32_reg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void xor_reg32_reg32(unsigned int reg1, unsigned int reg2)
 {
    put8(0x31);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void sub_m32_imm32(unsigned int *m32, unsigned int imm32)
+static osal_inline void sub_m32_imm32(unsigned int *m32, unsigned int imm32)
 {
    put8(0x81);
    put8(0x2D);
@@ -337,21 +338,21 @@ static inline void sub_m32_imm32(unsigned int *m32, unsigned int imm32)
    put32(imm32);
 }
 
-static inline void add_reg32_imm32(unsigned int reg32, unsigned int imm32)
+static osal_inline void add_reg32_imm32(unsigned int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xC0+reg32);
    put32(imm32);
 }
 
-static inline void inc_m32(unsigned int *m32)
+static osal_inline void inc_m32(unsigned int *m32)
 {
    put8(0xFF);
    put8(0x05);
    put32((unsigned int)(m32));
 }
 
-static inline void cmp_m32_imm32(unsigned int *m32, unsigned int imm32)
+static osal_inline void cmp_m32_imm32(unsigned int *m32, unsigned int imm32)
 {
    put8(0x81);
    put8(0x3D);
@@ -359,13 +360,13 @@ static inline void cmp_m32_imm32(unsigned int *m32, unsigned int imm32)
    put32(imm32);
 }
 
-static inline void cmp_eax_imm32(unsigned int imm32)
+static osal_inline void cmp_eax_imm32(unsigned int imm32)
 {
    put8(0x3D);
    put32(imm32);
 }
 
-static inline void mov_m32_imm32(unsigned int *m32, unsigned int imm32)
+static osal_inline void mov_m32_imm32(unsigned int *m32, unsigned int imm32)
 {
    put8(0xC7);
    put8(0x05);
@@ -373,64 +374,64 @@ static inline void mov_m32_imm32(unsigned int *m32, unsigned int imm32)
    put32(imm32);
 }
 
-static inline void jmp(unsigned int mi_addr)
+static osal_inline void jmp(unsigned int mi_addr)
 {
    put8(0xE9);
    put32(0);
    add_jump(code_length-4, mi_addr);
 }
 
-static inline void cdq(void)
+static osal_inline void cdq(void)
 {
    put8(0x99);
 }
 
-static inline void mov_m32_reg32(unsigned int *m32, unsigned int reg32)
+static osal_inline void mov_m32_reg32(unsigned int *m32, unsigned int reg32)
 {
    put8(0x89);
    put8((reg32 << 3) | 5);
    put32((unsigned int)(m32));
 }
 
-static inline void call_reg32(unsigned int reg32)
+static osal_inline void call_reg32(unsigned int reg32)
 {
    put8(0xFF);
    put8(0xD0+reg32);
 }
 
-static inline void shr_reg32_imm8(unsigned int reg32, unsigned char imm8)
+static osal_inline void shr_reg32_imm8(unsigned int reg32, unsigned char imm8)
 {
    put8(0xC1);
    put8(0xE8+reg32);
    put8(imm8);
 }
 
-static inline void shr_reg32_cl(unsigned int reg32)
+static osal_inline void shr_reg32_cl(unsigned int reg32)
 {
    put8(0xD3);
    put8(0xE8+reg32);
 }
 
-static inline void sar_reg32_cl(unsigned int reg32)
+static osal_inline void sar_reg32_cl(unsigned int reg32)
 {
    put8(0xD3);
    put8(0xF8+reg32);
 }
 
-static inline void shl_reg32_cl(unsigned int reg32)
+static osal_inline void shl_reg32_cl(unsigned int reg32)
 {
    put8(0xD3);
    put8(0xE0+reg32);
 }
 
-static inline void shld_reg32_reg32_cl(unsigned int reg1, unsigned int reg2)
+static osal_inline void shld_reg32_reg32_cl(unsigned int reg1, unsigned int reg2)
 {
    put8(0x0F);
    put8(0xA5);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void shld_reg32_reg32_imm8(unsigned int reg1, unsigned int reg2, unsigned char imm8)
+static osal_inline void shld_reg32_reg32_imm8(unsigned int reg1, unsigned int reg2, unsigned char imm8)
 {
    put8(0x0F);
    put8(0xA4);
@@ -438,21 +439,21 @@ static inline void shld_reg32_reg32_imm8(unsigned int reg1, unsigned int reg2, u
    put8(imm8);
 }
 
-static inline void shrd_reg32_reg32_cl(unsigned int reg1, unsigned int reg2)
+static osal_inline void shrd_reg32_reg32_cl(unsigned int reg1, unsigned int reg2)
 {
    put8(0x0F);
    put8(0xAD);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void sar_reg32_imm8(unsigned int reg32, unsigned char imm8)
+static osal_inline void sar_reg32_imm8(unsigned int reg32, unsigned char imm8)
 {
    put8(0xC1);
    put8(0xF8+reg32);
    put8(imm8);
 }
 
-static inline void shrd_reg32_reg32_imm8(unsigned int reg1, unsigned int reg2, unsigned char imm8)
+static osal_inline void shrd_reg32_reg32_imm8(unsigned int reg1, unsigned int reg2, unsigned char imm8)
 {
    put8(0x0F);
    put8(0xAC);
@@ -460,82 +461,82 @@ static inline void shrd_reg32_reg32_imm8(unsigned int reg1, unsigned int reg2, u
    put8(imm8);
 }
 
-static inline void mul_m32(unsigned int *m32)
+static osal_inline void mul_m32(unsigned int *m32)
 {
    put8(0xF7);
    put8(0x25);
    put32((unsigned int)(m32));
 }
 
-static inline void imul_reg32(unsigned int reg32)
+static osal_inline void imul_reg32(unsigned int reg32)
 {
    put8(0xF7);
    put8(0xE8+reg32);
 }
 
-static inline void mul_reg32(unsigned int reg32)
+static osal_inline void mul_reg32(unsigned int reg32)
 {
    put8(0xF7);
    put8(0xE0+reg32);
 }
 
-static inline void idiv_reg32(unsigned int reg32)
+static osal_inline void idiv_reg32(unsigned int reg32)
 {
    put8(0xF7);
    put8(0xF8+reg32);
 }
 
-static inline void div_reg32(unsigned int reg32)
+static osal_inline void div_reg32(unsigned int reg32)
 {
    put8(0xF7);
    put8(0xF0+reg32);
 }
 
-static inline void add_reg32_reg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void add_reg32_reg32(unsigned int reg1, unsigned int reg2)
 {
    put8(0x01);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void adc_reg32_reg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void adc_reg32_reg32(unsigned int reg1, unsigned int reg2)
 {
    put8(0x11);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void add_reg32_m32(unsigned int reg32, unsigned int *m32)
+static osal_inline void add_reg32_m32(unsigned int reg32, unsigned int *m32)
 {
    put8(0x03);
    put8((reg32 << 3) | 5);
    put32((unsigned int)(m32));
 }
 
-static inline void adc_reg32_imm32(unsigned int reg32, unsigned int imm32)
+static osal_inline void adc_reg32_imm32(unsigned int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xD0 + reg32);
    put32(imm32);
 }
 
-static inline void jmp_reg32(unsigned int reg32)
+static osal_inline void jmp_reg32(unsigned int reg32)
 {
    put8(0xFF);
    put8(0xE0 + reg32);
 }
 
-static inline void mov_reg32_preg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void mov_reg32_preg32(unsigned int reg1, unsigned int reg2)
 {
    put8(0x8B);
    put8((reg1 << 3) | reg2);
 }
 
-static inline void mov_preg32_reg32(int reg1, int reg2)
+static osal_inline void mov_preg32_reg32(int reg1, int reg2)
 {
    put8(0x89);
    put8((reg2 << 3) | reg1);
 }
 
-static inline void mov_reg32_preg32preg32pimm32(int reg1, int reg2, int reg3, unsigned int imm32)
+static osal_inline void mov_reg32_preg32preg32pimm32(int reg1, int reg2, int reg3, unsigned int imm32)
 {
    put8(0x8B);
    put8((reg1 << 3) | 0x84);
@@ -543,14 +544,14 @@ static inline void mov_reg32_preg32preg32pimm32(int reg1, int reg2, int reg3, un
    put32(imm32);
 }
 
-static inline void mov_reg32_preg32pimm32(int reg1, int reg2, unsigned int imm32)
+static osal_inline void mov_reg32_preg32pimm32(int reg1, int reg2, unsigned int imm32)
 {
    put8(0x8B);
    put8(0x80 | (reg1 << 3) | reg2);
    put32(imm32);
 }
 
-static inline void mov_reg32_preg32x4pimm32(int reg1, int reg2, unsigned int imm32)
+static osal_inline void mov_reg32_preg32x4pimm32(int reg1, int reg2, unsigned int imm32)
 {
    put8(0x8B);
    put8((reg1 << 3) | 4);
@@ -558,14 +559,14 @@ static inline void mov_reg32_preg32x4pimm32(int reg1, int reg2, unsigned int imm
    put32(imm32);
 }
 
-static inline void mov_preg32pimm32_reg8(int reg32, unsigned int imm32, int reg8)
+static osal_inline void mov_preg32pimm32_reg8(int reg32, unsigned int imm32, int reg8)
 {
    put8(0x88);
    put8(0x80 | reg32 | (reg8 << 3));
    put32(imm32);
 }
 
-static inline void mov_preg32pimm32_imm8(int reg32, unsigned int imm32, unsigned char imm8)
+static osal_inline void mov_preg32pimm32_imm8(int reg32, unsigned int imm32, unsigned char imm8)
 {
    put8(0xC6);
    put8(0x80 + reg32);
@@ -573,7 +574,7 @@ static inline void mov_preg32pimm32_imm8(int reg32, unsigned int imm32, unsigned
    put8(imm8);
 }
 
-static inline void mov_preg32pimm32_reg16(int reg32, unsigned int imm32, int reg16)
+static osal_inline void mov_preg32pimm32_reg16(int reg32, unsigned int imm32, int reg16)
 {
    put8(0x66);
    put8(0x89);
@@ -581,88 +582,88 @@ static inline void mov_preg32pimm32_reg16(int reg32, unsigned int imm32, int reg
    put32(imm32);
 }
 
-static inline void mov_preg32pimm32_reg32(int reg1, unsigned int imm32, int reg2)
+static osal_inline void mov_preg32pimm32_reg32(int reg1, unsigned int imm32, int reg2)
 {
    put8(0x89);
    put8(0x80 | reg1 | (reg2 << 3));
    put32(imm32);
 }
 
-static inline void add_eax_imm32(unsigned int imm32)
+static osal_inline void add_eax_imm32(unsigned int imm32)
 {
    put8(0x05);
    put32(imm32);
 }
 
-static inline void shl_reg32_imm8(unsigned int reg32, unsigned char imm8)
+static osal_inline void shl_reg32_imm8(unsigned int reg32, unsigned char imm8)
 {
    put8(0xC1);
    put8(0xE0 + reg32);
    put8(imm8);
 }
 
-static inline void mov_reg32_m32(unsigned int reg32, unsigned int* m32)
+static osal_inline void mov_reg32_m32(unsigned int reg32, unsigned int* m32)
 {
    put8(0x8B);
    put8((reg32 << 3) | 5);
    put32((unsigned int)(m32));
 }
 
-static inline void mov_reg8_m8(int reg8, unsigned char *m8)
+static osal_inline void mov_reg8_m8(int reg8, unsigned char *m8)
 {
    put8(0x8A);
    put8((reg8 << 3) | 5);
    put32((unsigned int)(m8));
 }
 
-static inline void and_eax_imm32(unsigned int imm32)
+static osal_inline void and_eax_imm32(unsigned int imm32)
 {
    put8(0x25);
    put32(imm32);
 }
 
-static inline void and_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void and_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xE0 + reg32);
    put32(imm32);
 }
 
-static inline void or_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void or_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xC8 + reg32);
    put32(imm32);
 }
 
-static inline void xor_reg32_imm32(int reg32, unsigned int imm32)
+static osal_inline void xor_reg32_imm32(int reg32, unsigned int imm32)
 {
    put8(0x81);
    put8(0xF0 + reg32);
    put32(imm32);
 }
 
-static inline void xor_reg8_imm8(int reg8, unsigned char imm8)
+static osal_inline void xor_reg8_imm8(int reg8, unsigned char imm8)
 {
    put8(0x80);
    put8(0xF0 + reg8);
    put8(imm8);
 }
 
-static inline void mov_reg32_reg32(unsigned int reg1, unsigned int reg2)
+static osal_inline void mov_reg32_reg32(unsigned int reg1, unsigned int reg2)
 {
    if (reg1 == reg2) return;
    put8(0x89);
    put8(0xC0 | (reg2 << 3) | reg1);
 }
 
-static inline void not_reg32(unsigned int reg32)
+static osal_inline void not_reg32(unsigned int reg32)
 {
    put8(0xF7);
    put8(0xD0 + reg32);
 }
 
-static inline void movsx_reg32_m8(int reg32, unsigned char *m8)
+static osal_inline void movsx_reg32_m8(int reg32, unsigned char *m8)
 {
    put8(0x0F);
    put8(0xBE);
@@ -670,7 +671,7 @@ static inline void movsx_reg32_m8(int reg32, unsigned char *m8)
    put32((unsigned int)(m8));
 }
 
-static inline void movsx_reg32_8preg32pimm32(int reg1, int reg2, unsigned int imm32)
+static osal_inline void movsx_reg32_8preg32pimm32(int reg1, int reg2, unsigned int imm32)
 {
    put8(0x0F);
    put8(0xBE);
@@ -678,7 +679,7 @@ static inline void movsx_reg32_8preg32pimm32(int reg1, int reg2, unsigned int im
    put32(imm32);
 }
 
-static inline void movsx_reg32_16preg32pimm32(int reg1, int reg2, unsigned int imm32)
+static osal_inline void movsx_reg32_16preg32pimm32(int reg1, int reg2, unsigned int imm32)
 {
    put8(0x0F);
    put8(0xBF);
@@ -686,7 +687,7 @@ static inline void movsx_reg32_16preg32pimm32(int reg1, int reg2, unsigned int i
    put32(imm32);
 }
 
-static inline void movsx_reg32_m16(int reg32, unsigned short *m16)
+static osal_inline void movsx_reg32_m16(int reg32, unsigned short *m16)
 {
    put8(0x0F);
    put8(0xBF);
@@ -694,140 +695,140 @@ static inline void movsx_reg32_m16(int reg32, unsigned short *m16)
    put32((unsigned int)(m16));
 }
 
-static inline void fldcw_m16(unsigned short *m16)
+static osal_inline void fldcw_m16(unsigned short *m16)
 {
    put8(0xD9);
    put8(0x2D);
    put32((unsigned int)(m16));
 }
 
-static inline void fld_preg32_dword(int reg32)
+static osal_inline void fld_preg32_dword(int reg32)
 {
    put8(0xD9);
    put8(reg32);
 }
 
-static inline void fdiv_preg32_dword(int reg32)
+static osal_inline void fdiv_preg32_dword(int reg32)
 {
    put8(0xD8);
    put8(0x30 + reg32);
 }
 
-static inline void fstp_preg32_dword(int reg32)
+static osal_inline void fstp_preg32_dword(int reg32)
 {
    put8(0xD9);
    put8(0x18 + reg32);
 }
 
-static inline void fchs(void)
+static osal_inline void fchs(void)
 {
    put8(0xD9);
    put8(0xE0);
 }
 
-static inline void fstp_preg32_qword(int reg32)
+static osal_inline void fstp_preg32_qword(int reg32)
 {
    put8(0xDD);
    put8(0x18 + reg32);
 }
 
-static inline void fadd_preg32_dword(int reg32)
+static osal_inline void fadd_preg32_dword(int reg32)
 {
    put8(0xD8);
    put8(reg32);
 }
 
-static inline void fsub_preg32_dword(int reg32)
+static osal_inline void fsub_preg32_dword(int reg32)
 {
    put8(0xD8);
    put8(0x20 + reg32);
 }
 
-static inline void fmul_preg32_dword(int reg32)
+static osal_inline void fmul_preg32_dword(int reg32)
 {
    put8(0xD8);
    put8(0x08 + reg32);
 }
 
-static inline void fistp_preg32_dword(int reg32)
+static osal_inline void fistp_preg32_dword(int reg32)
 {
    put8(0xDB);
    put8(0x18 + reg32);
 }
 
-static inline void fistp_preg32_qword(int reg32)
+static osal_inline void fistp_preg32_qword(int reg32)
 {
    put8(0xDF);
    put8(0x38 + reg32);
 }
 
-static inline void fld_preg32_qword(int reg32)
+static osal_inline void fld_preg32_qword(int reg32)
 {
    put8(0xDD);
    put8(reg32);
 }
 
-static inline void fild_preg32_qword(int reg32)
+static osal_inline void fild_preg32_qword(int reg32)
 {
    put8(0xDF);
    put8(0x28+reg32);
 }
 
-static inline void fild_preg32_dword(int reg32)
+static osal_inline void fild_preg32_dword(int reg32)
 {
    put8(0xDB);
    put8(reg32);
 }
 
-static inline void fadd_preg32_qword(int reg32)
+static osal_inline void fadd_preg32_qword(int reg32)
 {
    put8(0xDC);
    put8(reg32);
 }
 
-static inline void fdiv_preg32_qword(int reg32)
+static osal_inline void fdiv_preg32_qword(int reg32)
 {
    put8(0xDC);
    put8(0x30 + reg32);
 }
 
-static inline void fsub_preg32_qword(int reg32)
+static osal_inline void fsub_preg32_qword(int reg32)
 {
    put8(0xDC);
    put8(0x20 + reg32);
 }
 
-static inline void fmul_preg32_qword(int reg32)
+static osal_inline void fmul_preg32_qword(int reg32)
 {
    put8(0xDC);
    put8(0x08 + reg32);
 }
 
-static inline void fsqrt(void)
+static osal_inline void fsqrt(void)
 {
    put8(0xD9);
    put8(0xFA);
 }
 
-static inline void fabs_(void)
+static osal_inline void fabs_(void)
 {
    put8(0xD9);
    put8(0xE1);
 }
 
-static inline void fcomip_fpreg(int fpreg)
+static osal_inline void fcomip_fpreg(int fpreg)
 {
    put8(0xDF);
    put8(0xF0 + fpreg);
 }
 
-static inline void fucomip_fpreg(int fpreg)
+static osal_inline void fucomip_fpreg(int fpreg)
 {
    put8(0xDF);
    put8(0xE8 + fpreg);
 }
 
-static inline void ffree_fpreg(int fpreg)
+static osal_inline void ffree_fpreg(int fpreg)
 {
    put8(0xDD);
    put8(0xC0 + fpreg);
diff --git a/tools/install_binary_bundle.sh b/tools/install_binary_bundle.sh
index 9970e47..2f906dc 100755
--- a/tools/install_binary_bundle.sh
+++ b/tools/install_binary_bundle.sh
@@ -65,6 +65,28 @@ LIBDIR="${4:-${PREFIX}/lib}"
 PLUGINDIR="${5:-${PREFIX}/lib/mupen64plus}"
 MANDIR="${6:-${PREFIX}/share/man}"
 
+# simple check for permissions
+if [ -d "${SHAREDIR}" -a ! -w "${SHAREDIR}" ]; then
+	printf "Error: you do not have permission to install at: ${SHAREDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${BINDIR}" -a ! -w "${BINDIR}" ]; then
+	printf "Error: you do not have permission to install at: ${BINDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${LIBDIR}" -a ! -w "${LIBDIR}" ]; then
+	printf "Error: you do not have permission to install at: ${LIBDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${PLUGINDIR}" -a ! -w "${PLUGINDIR}" ]; then
+	printf "Error: you do not have permission to install at: ${PLUGINDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${MANDIR}" -a ! -w "${MANDIR}" ]; then
+	printf "Error: you do not have permission to install at: ${MANDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+
 printf "Installing Mupen64Plus Binary Bundle to ${PREFIX}\n"
 # Mupen64Plus-Core
 $INSTALL -d -v "${LIBDIR}"
diff --git a/tools/uninstall_binary_bundle.sh b/tools/uninstall_binary_bundle.sh
index 9998990..dc94518 100755
--- a/tools/uninstall_binary_bundle.sh
+++ b/tools/uninstall_binary_bundle.sh
@@ -48,6 +48,28 @@ LIBDIR="${4:-${PREFIX}/lib}"
 PLUGINDIR="${5:-${PREFIX}/lib/mupen64plus}"
 MANDIR="${6:-${PREFIX}/share/man}"
 
+# simple check for some permissions
+if [ -d "${SHAREDIR}" -a ! -w "${SHAREDIR}" ]; then
+	printf "Error: you do not have permission to uninstall from: ${SHAREDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${BINDIR}" -a ! -w "${BINDIR}" ]; then
+	printf "Error: you do not have permission to uninstall from: ${BINDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${LIBDIR}" -a ! -w "${LIBDIR}" ]; then
+	printf "Error: you do not have permission to uninstall from: ${LIBDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${PLUGINDIR}" -a ! -w "${PLUGINDIR}" ]; then
+	printf "Error: you do not have permission to uninstall from: ${PLUGINDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+if [ -d "${MANDIR}" -a ! -w "${MANDIR}" ]; then
+	printf "Error: you do not have permission to uninstall from: ${MANDIR}\nMaybe you need to be root?\n"
+	exit 1
+fi
+
 printf "Uninstalling Mupen64Plus Binary Bundle from ${PREFIX}\n"
 # Mupen64Plus-Core
 rm -f "${LIBDIR}"/libmupen64plus.so*
@@ -71,13 +93,14 @@ rm -f "${SHAREDIR}/RiceVideoLinux.ini"
 rm -f "${SHAREDIR}/InputAutoCfg.ini"
 rm -f "${SHAREDIR}/Glide64mk2.ini"
 # get rid of the empty dirs
-rmdir --ignore-fail-on-non-empty "${SHAREDIR}/doc"
-rmdir --ignore-fail-on-non-empty "${SHAREDIR}"
-rmdir --ignore-fail-on-non-empty "${BINDIR}"
-rmdir --ignore-fail-on-non-empty "${LIBDIR}"
-rmdir --ignore-fail-on-non-empty "${PLUGINDIR}"
-rmdir --ignore-fail-on-non-empty "${MANDIR}/man6"
-rmdir --ignore-fail-on-non-empty "${MANDIR}"
+# ignore directories if they are really symbolic links
+[ ! -L "${SHAREDIR}/doc" ] && rmdir --ignore-fail-on-non-empty "${SHAREDIR}/doc"
+[ ! -L "${SHAREDIR}" ] && rmdir --ignore-fail-on-non-empty "${SHAREDIR}"
+[ ! -L "${BINDIR}" ] && rmdir --ignore-fail-on-non-empty "${BINDIR}"
+[ ! -L "${LIBDIR}" ] && rmdir --ignore-fail-on-non-empty "${LIBDIR}"
+[ ! -L "${PLUGINDIR}" ] && rmdir --ignore-fail-on-non-empty "${PLUGINDIR}"
+[ ! -L "${MANDIR}/man6" ] && rmdir --ignore-fail-on-non-empty "${MANDIR}/man6"
+[ ! -L "${MANDIR}" ] && rmdir --ignore-fail-on-non-empty "${MANDIR}"
 
-printf "Done.\n"
+printf "Uninstall successful.\n"
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/mupen64plus-core.git



More information about the Pkg-games-commits mailing list