]> git.wh0rd.org - fontconfig.git/blobdiff - fc-cache/fc-cache.c
Change RCS tag
[fontconfig.git] / fc-cache / fc-cache.c
index 92f53fc483de9a9e9957591fb92e81df5c84e0b2..be8b962596cbdadb20a7a8d85a4447ade22b11b6 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $XFree86: xc/lib/fontconfig/fc-cache/fc-cache.c,v 1.5 2002/06/19 20:55:19 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
@@ -24,6 +24,7 @@
 
 #include <fontconfig/fontconfig.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -50,6 +51,7 @@
 #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, '?'},
@@ -70,7 +72,8 @@ usage (char *program)
     fprintf (stderr, "Build font information caches in [dirs]\n"
             "(all directories in font configuration by default).\n");
     fprintf (stderr, "\n");
-    fprintf (stderr, "  -v, --force          scan directories with apparently valid caches\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");
@@ -128,20 +131,33 @@ scanDirs (FcStrList *list, FcConfig *config, char *program, FcBool force, FcBool
            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);
@@ -192,6 +208,7 @@ main (int argc, char **argv)
     FcStrList  *list;
     FcBool     verbose = FcFalse;
     FcBool     force = FcFalse;
+    FcBool     systemOnly = FcFalse;
     FcConfig   *config;
     int                i;
     int                ret;
@@ -208,6 +225,9 @@ main (int argc, char **argv)
        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);
@@ -224,6 +244,8 @@ main (int argc, char **argv)
     i = 1;
 #endif
 
+    if (systemOnly)
+       FcConfigEnableHome (FcFalse);
     config = FcInitLoadConfig ();
     if (!config)
     {