summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--dln.c9
-rw-r--r--eval.c8
-rw-r--r--hash.c9
4 files changed, 28 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 9d4464645f..f09985e3f2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Fri Oct 18 01:02:44 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c, eval.c: Use (*_NSGetEnviron()) instead of environ on
+ Darwin for namespace cleanness. [ruby-core:00537]
+
+ * dln.c (dln_load): Fix Darwin support that has been disabled and
+ switch to using it on Darwin instead of the system dlopen().
+ [ruby-core:00541]
+
Thu Oct 17 19:17:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* marshal.c (w_byten): added; write n bytes from s to arg.
diff --git a/dln.c b/dln.c
index 0d923f5dd3..3bb37f5790 100644
--- a/dln.c
+++ b/dln.c
@@ -90,7 +90,7 @@ char *getenv();
int eaccess();
-#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT) && !defined(_AIX)
+#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT) && !defined(_AIX) && !defined(__APPLE__)
/* dynamic load with dlopen() */
# define USE_DLN_DLOPEN
#endif
@@ -1429,12 +1429,9 @@ dln_load(file)
NSLinkModule(obj_file, file, NSLINKMODULE_OPTION_BINDNOW);
/* lookup the initial function */
- /*NSIsSymbolNameDefined require function name without "_" */
- if(NSIsSymbolNameDefined(buf + 1)) {
+ if(!NSIsSymbolNameDefined(buf)) {
rb_loaderror("Failed to lookup Init function %.200s",file);
- }
-
- /* NSLookupAndBindSymbol require function name with "_" !! */
+ }
init_fct = NSAddressOfSymbol(NSLookupAndBindSymbol(buf));
(*init_fct)();
diff --git a/eval.c b/eval.c
index 31a7cae5d8..207e6b464e 100644
--- a/eval.c
+++ b/eval.c
@@ -23,6 +23,10 @@
#include "st.h"
#include "dln.h"
+#ifdef __APPLE__
+#include <crt_externs.h>
+#endif
+
/* Make alloca work the best possible way. */
#ifdef __GNUC__
# ifndef atarist
@@ -1040,7 +1044,9 @@ error_print()
}
}
-#if !defined(NT) && !defined(__MACOS__)
+#if defined(__APPLE__)
+#define environ (*_NSGetEnviron())
+#elif !defined(NT) && !defined(__MACOS__)
extern char **environ;
#endif
char **rb_origenviron;
diff --git a/hash.c b/hash.c
index 69ca1db4e3..d759afd296 100644
--- a/hash.c
+++ b/hash.c
@@ -17,6 +17,10 @@
#include "util.h"
#include "rubysig.h"
+#ifdef __APPLE__
+#include <crt_externs.h>
+#endif
+
#define HASH_DELETED FL_USER1
#define HASH_PROC_DEFAULT FL_USER2
@@ -944,6 +948,11 @@ static char **origenviron;
static char **my_environ;
#undef environ
#define environ my_environ
+#elif defined(__APPLE__)
+#undef environ
+#define environ (*_NSGetEnviron())
+#define GET_ENVIRON(e) (e)
+#define FREE_ENVIRON(e)
#else
extern char **environ;
#define GET_ENVIRON(e) (e)