/*
- * $XFree86: xc/lib/fontconfig/fc-cache/fc-cache.c,v 1.6 2002/07/01 05:11:20 keithp Exp $
+ * $RCSId: xc/lib/fontconfig/fc-cache/fc-cache.c,v 1.8tsi Exp $
*
- * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2002 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#include <fontconfig/fontconfig.h>
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <getopt.h>
const struct option longopts[] = {
{"force", 0, 0, 'f'},
+ {"system-only", 0, 0, 's'},
{"version", 0, 0, 'V'},
{"verbose", 0, 0, 'v'},
{"help", 0, 0, '?'},
"(all directories in font configuration by default).\n");
fprintf (stderr, "\n");
fprintf (stderr, " -f, --force scan directories with apparently valid caches\n");
+ fprintf (stderr, " -s, --system-only scan system-wide directories only\n");
fprintf (stderr, " -v, --verbose display status information while busy\n");
fprintf (stderr, " -V, --version display font config version and exit\n");
fprintf (stderr, " -?, --help display this help and exit\n");
continue;
}
- if (stat ((char *) dir, &statb) == -1)
+ if (access ((char *) dir, W_OK) < 0)
{
- if (errno == ENOENT || errno == ENOTDIR)
- {
- fprintf (stderr, "\"%s\": no such directory, skipping\n", dir);
- }
- else
- {
+ switch (errno) {
+ case ENOENT:
+ case ENOTDIR:
+ if (verbose)
+ printf ("skipping, no such directory\n");
+ break;
+ case EACCES:
+ case EROFS:
+ if (verbose)
+ printf ("skipping, no write access\n");
+ break;
+ default:
fprintf (stderr, "\"%s\": ", dir);
perror ("");
ret++;
}
continue;
}
+ if (stat ((char *) dir, &statb) == -1)
+ {
+ fprintf (stderr, "\"%s\": ", dir);
+ perror ("");
+ ret++;
+ continue;
+ }
if (!S_ISDIR (statb.st_mode))
{
fprintf (stderr, "\"%s\": not a directory, skipping\n", dir);
FcStrList *list;
FcBool verbose = FcFalse;
FcBool force = FcFalse;
+ FcBool systemOnly = FcFalse;
FcConfig *config;
int i;
int ret;
case 'f':
force = FcTrue;
break;
+ case 's':
+ systemOnly = FcTrue;
+ break;
case 'V':
fprintf (stderr, "fontconfig version %d.%d.%d\n",
FC_MAJOR, FC_MINOR, FC_REVISION);
i = 1;
#endif
+ if (systemOnly)
+ FcConfigEnableHome (FcFalse);
config = FcInitLoadConfig ();
if (!config)
{