Two changes:
- after mkdir(), we immediately chmod(), such that we are not affected
by stupid umask's.
- if a directory we want to use is not writable but exists, we try a
chmod on it. This is to recover from stupid umask's having affected
us with older versions.
if (!parent)
return FcFalse;
if (access ((char *) parent, F_OK) == 0)
if (!parent)
return FcFalse;
if (access ((char *) parent, F_OK) == 0)
- ret = mkdir ((char *) dir, 0777) == 0;
+ ret = mkdir ((char *) dir, 0755) == 0 && chmod ((char *) dir, 0755) == 0;
else if (access ((char *) parent, F_OK) == -1)
else if (access ((char *) parent, F_OK) == -1)
- ret = FcMakeDirectory (parent) && (mkdir ((char *) dir, 0777) == 0);
+ ret = FcMakeDirectory (parent) && (mkdir ((char *) dir, 0755) == 0) && chmod ((char *) dir, 0755) == 0;
else
ret = FcFalse;
FcStrFree (parent);
else
ret = FcFalse;
FcStrFree (parent);
if (!list)
return FcFalse;
while ((test_dir = FcStrListNext (list))) {
if (!list)
return FcFalse;
while ((test_dir = FcStrListNext (list))) {
- if (access ((char *) test_dir, W_OK) == 0)
+ if (access ((char *) test_dir, W_OK|X_OK) == 0)
{
cache_dir = test_dir;
break;
{
cache_dir = test_dir;
break;
+ /*
+ * Otherwise, try making it writable
+ */
+ else if (chmod ((char *) test_dir, 0755) == 0)
+ {
+ cache_dir = test_dir;
+ break;
+ }
}
}
FcStrListDone (list);
}
}
FcStrListDone (list);