- size_t n = confstr(_CS_DARWIN_USER_TEMP_DIR, target, (size_t) PATH_MAX);
- if ((n > 0) && (n < PATH_MAX)) return true;
- n = confstr(_CS_DARWIN_USER_CACHE_DIR, target, (size_t) PATH_MAX);
- if ((n > 0) && (n < PATH_MAX)) return true;
+ if (getenv("TMPDIR") && (-1 != access(getenv("TMPDIR"), W_OK))) {
+ strlcpy(target, getenv("TMPDIR"), (size_t)PATH_MAX);
+ return true;
+ }
+ if (stack_logging_finished_init) {
+ size_t n = confstr(_CS_DARWIN_USER_TEMP_DIR, target, (size_t) PATH_MAX);
+ if ((n > 0) && (n < PATH_MAX)) return true;
+ n = confstr(_CS_DARWIN_USER_CACHE_DIR, target, (size_t) PATH_MAX);
+ if ((n > 0) && (n < PATH_MAX)) return true;
+ } else {
+ /* <rdar://problem/11128080> Can't call confstr during init, so postpone
+ logging till after */
+ postpone_stack_logging();
+ }