--- dir.c.old 2010-12-02 15:57:24.000000000 -0800 +++ dir.c 2010-12-02 15:59:19.000000000 -0800 @@ -16,6 +16,7 @@ #include <sys/types.h> #include <sys/stat.h> +#include <sys/param.h> #ifdef HAVE_UNISTD_H #include <unistd.h> @@ -2002,4 +2003,9 @@ rb_file_const("FNM_DOTMATCH", INT2FIX(FNM_DOTMATCH)); rb_file_const("FNM_CASEFOLD", INT2FIX(FNM_CASEFOLD)); rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE)); + + char buf[MAXPATHLEN]; + const size_t buflen = confstr(_CS_DARWIN_USER_TEMP_DIR, buf, sizeof buf); + VALUE str = buflen > 0 ? rb_obj_freeze(rb_str_new2(buf)) : Qnil; + rb_define_const(rb_cDir, "NS_TMPDIR", str); } --- lib/tmpdir.rb.old 2010-12-02 15:57:28.000000000 -0800 +++ lib/tmpdir.rb 2010-12-02 15:58:18.000000000 -0800 @@ -8,7 +8,7 @@ class Dir - @@systmpdir = '/tmp' + @@systmpdir = Dir.const_defined?(:NS_TMPDIR) ? Dir::NS_TMPDIR : '/tmp' begin require 'Win32API'