+validate_spawns(void)
+{
+ struct spawn_prog *sp;
+ char which[PATH_MAX];
+ size_t i;
+
+ struct key *kp;
+
+ RB_FOREACH(kp, key_tree, &keys) {
+ if (kp->funcid != KF_SPAWN_CUSTOM)
+ continue;
+
+ /* find program */
+ TAILQ_FOREACH(sp, &spawns, entry) {
+ if (!strcasecmp(kp->spawn_name, sp->name))
+ break;
+ }
+
+ if (sp == NULL || sp->flags & SWM_SPAWN_OPTIONAL)
+ continue;
+
+ /* verify we have the goods */
+ snprintf(which, sizeof which, "which %s", sp->argv[0]);
+ DNPRINTF(SWM_D_CONF, "validate_spawns: which %s\n",
+ sp->argv[0]);
+ for (i = strlen("which "); i < strlen(which); i++)
+ if (which[i] == ' ') {
+ which[i] = '\0';
+ break;
+ }
+ if (system(which) != 0)
+ add_startup_exception("could not find %s",
+ &which[strlen("which ")]);
+ }
+}
+
+void