static char *format_command (const char *cmd, Bool wrap_p);
static void merge_system_screenhacks (saver_preferences *p,
screenhack **system_list, int count);
+static void stop_the_insanity (saver_preferences *p);
+
static char *
chase_symlinks (const char *file)
LOSE:
fprintf (stderr, "%s: %s must be a number of bytes, not \"%s\".\n",
progname, name, s);
+ free (s);
return 0;
}
s2++;
while (isspace(*s2)) s2++;
if (*s2) goto LOSE;
+ free (s);
return n;
}
if (n2) name = n2;
+ /* Throttle the various timeouts to reasonable values before writing
+ the file to disk. */
+ stop_the_insanity (p);
+
+
if (verbose_p)
fprintf (stderr, "%s: writing \"%s\".\n", blurb(), name);
*ss++ = '\n';
*ss = 0;
}
+ free (hack_strings);
}
{
}
+
/* Populate `saver_preferences' with the contents of the resource database.
Note that this may be called multiple times -- it is re-run each time
the ~/.xscreensaver file is reloaded.
"Boolean");
p->use_proc_interrupts = get_boolean_resource ("procInterrupts", "Boolean");
- /* Throttle the various timeouts to reasonable values.
- */
- if (p->passwd_timeout <= 0) p->passwd_timeout = 30000; /* 30 secs */
- if (p->timeout < 10000) p->timeout = 10000; /* 10 secs */
- if (p->cycle != 0 && p->cycle < 2000) p->cycle = 2000; /* 2 secs */
- if (p->pointer_timeout <= 0) p->pointer_timeout = 5000; /* 5 secs */
- if (p->notice_events_timeout <= 0)
- p->notice_events_timeout = 10000; /* 10 secs */
- if (p->fade_seconds <= 0 || p->fade_ticks <= 0)
- p->fade_p = False;
- if (! p->fade_p) p->unfade_p = False;
-
- /* The DPMS settings may have the value 0.
- But if they are negative, or are a range less than 10 seconds,
- reset them to sensible defaults. (Since that must be a mistake.)
- */
- if (p->dpms_standby != 0 &&
- p->dpms_standby < 10 * 1000)
- p->dpms_standby = 2 * 60 * 60 * 1000; /* 2 hours */
- if (p->dpms_suspend != 0 &&
- p->dpms_suspend < 10 * 1000)
- p->dpms_suspend = 2 * 60 * 60 * 1000; /* 2 hours */
- if (p->dpms_off != 0 &&
- p->dpms_off < 10 * 1000)
- p->dpms_off = 4 * 60 * 60 * 1000; /* 4 hours */
-
- if (p->dpms_standby == 0 && /* if *all* are 0, then DPMS is disabled */
- p->dpms_suspend == 0 &&
- p->dpms_off == 0)
- p->dpms_enabled_p = False;
-
-
- p->watchdog_timeout = p->cycle * 0.6;
- if (p->watchdog_timeout < 30000) p->watchdog_timeout = 30000; /* 30 secs */
- if (p->watchdog_timeout > 3600000) p->watchdog_timeout = 3600000; /* 1 hr */
-
- get_screenhacks (p);
+ get_screenhacks (p); /* Parse the "programs" resource. */
p->selected_hack = get_integer_resource ("selected", "Integer");
if (p->selected_hack < 0 || p->selected_hack >= p->screenhacks_count)
else if (s && !strcasecmp (s, "blank")) p->mode = BLANK_ONLY;
else if (s && !strcasecmp (s, "off")) p->mode = DONT_BLANK;
else p->mode = RANDOM_HACKS;
+ if (s) free (s);
}
if (system_default_screenhack_count) /* note: first_time is also true */
p->timestamp_p = True;
p->initial_delay = 0;
}
+
+ /* Throttle the various timeouts to reasonable values after reading the
+ disk file. */
+ stop_the_insanity (p);
}
sprintf (res_name, "hacks.%s.name", s); /* resource? */
s2 = get_string_resource (res_name, res_name);
if (s2)
- return s2;
+ {
+ free (s);
+ return s2;
+ }
for (s2 = s; *s2; s2++) /* if it has any capitals, return it */
if (*s2 >= 'A' && *s2 <= 'Z')
start = end+1;
}
+ free (d);
+
if (p->screenhacks_count == 0)
{
free (p->screenhacks);
p->screenhacks = 0;
}
}
+
+
+/* Make sure all the values in the preferences struct are sane.
+ */
+static void
+stop_the_insanity (saver_preferences *p)
+{
+ if (p->passwd_timeout <= 0) p->passwd_timeout = 30000; /* 30 secs */
+ if (p->timeout < 15000) p->timeout = 15000; /* 15 secs */
+ if (p->cycle != 0 && p->cycle < 2000) p->cycle = 2000; /* 2 secs */
+ if (p->pointer_timeout <= 0) p->pointer_timeout = 5000; /* 5 secs */
+ if (p->notice_events_timeout <= 0)
+ p->notice_events_timeout = 10000; /* 10 secs */
+ if (p->fade_seconds <= 0 || p->fade_ticks <= 0)
+ p->fade_p = False;
+ if (! p->fade_p) p->unfade_p = False;
+
+ /* The DPMS settings may have the value 0.
+ But if they are negative, or are a range less than 10 seconds,
+ reset them to sensible defaults. (Since that must be a mistake.)
+ */
+ if (p->dpms_standby != 0 &&
+ p->dpms_standby < 10 * 1000)
+ p->dpms_standby = 2 * 60 * 60 * 1000; /* 2 hours */
+ if (p->dpms_suspend != 0 &&
+ p->dpms_suspend < 10 * 1000)
+ p->dpms_suspend = 2 * 60 * 60 * 1000; /* 2 hours */
+ if (p->dpms_off != 0 &&
+ p->dpms_off < 10 * 1000)
+ p->dpms_off = 4 * 60 * 60 * 1000; /* 4 hours */
+
+ if (p->dpms_standby == 0 && /* if *all* are 0, then DPMS is disabled */
+ p->dpms_suspend == 0 &&
+ p->dpms_off == 0)
+ p->dpms_enabled_p = False;
+
+ p->watchdog_timeout = p->cycle * 0.6;
+ if (p->watchdog_timeout < 30000) p->watchdog_timeout = 30000; /* 30 secs */
+ if (p->watchdog_timeout > 3600000) p->watchdog_timeout = 3600000; /* 1 hr */
+}