+ case _CS_DARWIN_USER_DIR:
+ if ((p = alloca(PATH_MAX)) == NULL) {
+ errno = ENOMEM;
+ return (CONFSTR_ERR_RET);
+ }
+ if (_dirhelper(DIRHELPER_USER_LOCAL, p, PATH_MAX) == NULL)
+ return (CONFSTR_ERR_RET);
+ goto docopy;
+
+ case _CS_DARWIN_USER_TEMP_DIR:
+ if ((p = alloca(PATH_MAX)) == NULL) {
+ errno = ENOMEM;
+ return (CONFSTR_ERR_RET);
+ }
+ if (_dirhelper(DIRHELPER_USER_LOCAL_TEMP, p, PATH_MAX) == NULL) {
+ /*
+ * If _dirhelper() fails, try TMPDIR and P_tmpdir,
+ * finally failing otherwise.
+ */
+ if ((p = getenv("TMPDIR")) && access(p, W_OK) == 0)
+ goto docopy;
+ if (access(p = P_tmpdir, W_OK) == 0)
+ goto docopy;
+ return (CONFSTR_ERR_RET);
+ }
+ goto docopy;
+
+ case _CS_DARWIN_USER_CACHE_DIR:
+ if ((p = alloca(PATH_MAX)) == NULL) {
+ errno = ENOMEM;
+ return (CONFSTR_ERR_RET);
+ }
+ if (_dirhelper(DIRHELPER_USER_LOCAL_CACHE, p, PATH_MAX) == NULL)
+ return (CONFSTR_ERR_RET);
+ goto docopy;
+