http://ftp.x.org/contrib/applications/xscreensaver-2.17.tar.gz
[xscreensaver] / utils / resources.c
index 827482319cf500ea7a8451354f49d79347f6e567..11e326ea819077755de41d9fd62edb46eeac83ab 100644 (file)
@@ -1,4 +1,5 @@
-/* xscreensaver, Copyright (c) 1992, 1997 Jamie Zawinski <jwz@netscape.com>
+/* xscreensaver, Copyright (c) 1992, 1997, 1998
+ *  Jamie Zawinski <jwz@netscape.com>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -83,12 +84,28 @@ get_integer_resource (char *res_name, char *res_class)
 {
   int val;
   char c, *s = get_string_resource (res_name, res_class);
+  char *ss = s;
   if (!s) return 0;
-  if (1 == sscanf (s, " %d %c", &val, &c))
+
+  while (*ss && *ss <= ' ') ss++;                      /* skip whitespace */
+
+  if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X'))  /* 0x: parse as hex */
     {
-      free (s);
-      return val;
+      if (1 == sscanf (ss+2, "%x %c", &val, &c))
+       {
+         free (s);
+         return val;
+       }
     }
+  else                                                 /* else parse as dec */
+    {
+      if (1 == sscanf (ss, "%d %c", &val, &c))
+       {
+         free (s);
+         return val;
+       }
+    }
+
   fprintf (stderr, "%s: %s must be an integer, not %s.\n",
           progname, res_name, s);
   free (s);
@@ -125,6 +142,8 @@ get_pixel_resource (char *res_name, char *res_class,
   for (s2 = s + strlen(s) - 1; s2 > s; s2--)
     if (*s2 == ' ' || *s2 == '\t')
       *s2 = 0;
+    else
+      break;
 
   if (! XParseColor (dpy, cmap, s, &color))
     {