sub _color {
my $arg = shift;
+ # perl 5.6.0 seems to do weird things to $arg if we don't make an
+ # explicitly stringified copy
+ # I vaguely remember a bug on this on p5p, but couldn't find it
+ # through bugs.perl.org (I had trouble getting it to find any bugs)
+ my $copy = $arg . "";
my $result;
if (ref $arg) {
$result = $arg;
}
else {
- if ($arg =~ /^HASH\(/) {
+ if ($copy =~ /^HASH\(/) {
$result = Imager::Color->new(%$arg);
}
- elsif ($arg =~ /^ARRAY\(/) {
+ elsif ($copy =~ /^ARRAY\(/) {
if (grep $_ > 1, @$arg) {
$result = Imager::Color->new(@$arg);
}
#include "dynaload.h"
#include "XSUB.h" /* so we can compile on threaded perls */
+static symbol_table_t symbol_table={i_has_format,ICL_set_internal,ICL_info,
+ i_img_new,i_img_empty,i_img_empty_ch,i_img_exorcise,
+ i_img_info,i_img_setmask,i_img_getmask,
+ i_box,i_draw,i_arc,i_copyto,i_copyto_trans,i_rubthru};
+
+
/* These functions are all shared - then comes platform dependant code */
UTIL_table_t UTIL_table={getstr,getint,getdouble,getvoid,getobj};
-extern symbol_table_t symbol_table;
/*
Dynamic loading works like this:
}
#endif /* __EMX__ */
+#ifdef OS_darwin
+
+#import <mach-o/dyld.h>
+
+static char *dl_error = "unknown";
+
+static char *dlopen(char *path, int mode /* mode is ignored */)
+{
+ int dyld_result;
+ NSObjectFileImage ofile;
+ NSModule handle = NULL;
+
+
+
+ dyld_result = NSCreateObjectFileImageFromFile(path, &ofile);
+ if (dyld_result != NSObjectFileImageSuccess)
+ {
+ switch (dyld_result) {
+ case NSObjectFileImageFailure:
+ dl_error = "object file setup failure";
+ break;
+ case NSObjectFileImageInappropriateFile:
+ dl_error = "not a Mach-O MH_BUNDLE file type";
+ break;
+ case NSObjectFileImageArch:
+ dl_error = "no object for this architecture";
+ break;
+ case NSObjectFileImageFormat:
+ dl_error = "bad object file format";
+ break;
+ case NSObjectFileImageAccess:
+ dl_error = "can't read object file";
+ break;
+ default:
+ dl_error = "unknown error from NSCreateObjectFileImageFromFile()";
+ break;
+ }
+ }
+ else
+ {
+ // NSLinkModule will cause the run to abort on any link error's
+ // not very friendly but the error recovery functionality is limited.
+ handle = NSLinkModule(ofile, path, TRUE);
+ }
+
+ return handle;
+}
+
+void *
+dlsym(handle, symbol)
+ void *handle;
+ char *symbol;
+{
+ void *addr;
+
+ if (NSIsSymbolNameDefined(symbol))
+ {
+ addr = NSAddressOfSymbol(NSLookupAndBindSymbol(symbol));
+ }
+ else
+ {
+ dl_error = "cannot find symbol";
+ addr = NULL;
+ }
+
+ return addr;
+}
+
+int dlclose(handle) /* stub only */
+ void *handle;
+{
+ return 0;
+}
+
+char *dlerror(handle) /* stub only */
+ void *handle;
+{
+ printf("Error occured\n");
+ return dl_error;
+}
+
+#define RTLD_LAZY 0
+
+#endif
void*
DSO_open(char* file,char** evalstring) {
return colorcnt;
}
-
-symbol_table_t symbol_table={i_has_format,ICL_set_internal,ICL_info,
- i_img_new,i_img_empty,i_img_empty_ch,i_img_exorcise,
- i_img_info,i_img_setmask,i_img_getmask,
- i_box,i_draw,i_arc,i_copyto,i_copyto_trans,i_rubthru};
-
-
/*
=back