enum shuffle_mode mode;
unsigned int seed;
void (*shuffler) (void **a, size_t len);
- char strval[INTSTR_LENGTH];
+ char strval[INTSTR_LENGTH + 1];
} config = { sm_none, 0, NULL, "" };
/* Return string value of --shuffle= option passed.
const char *
shuffle_get_mode ()
{
- return config.strval[0] ? config.strval : NULL;
+ return config.strval[0] == '\0' ? NULL : config.strval;
}
void
shuffle_set_mode (const char *cmdarg)
{
/* Parse supported '--shuffle' mode. */
- if (strcasecmp (cmdarg, "random") == 0)
+ if (strcasecmp (cmdarg, "reverse") == 0)
{
- config.mode = sm_random;
- config.seed = (unsigned int) (time (NULL) ^ make_pid ());
+ config.mode = sm_reverse;
+ config.shuffler = reverse_shuffle_array;
+ strcpy (config.strval, "reverse");
}
- else if (strcasecmp (cmdarg, "reverse") == 0)
- config.mode = sm_reverse;
else if (strcasecmp (cmdarg, "identity") == 0)
- config.mode = sm_identity;
+ {
+ config.mode = sm_identity;
+ config.shuffler = identity_shuffle_array;
+ strcpy (config.strval, "identity");
+ }
else if (strcasecmp (cmdarg, "none") == 0)
- config.mode = sm_none;
- /* Assume explicit seed if starts from a digit. */
+ {
+ config.mode = sm_none;
+ config.shuffler = NULL;
+ config.strval[0] = '\0';
+ }
else
{
- const char *err;
- config.mode = sm_random;
- config.seed = make_toui (cmdarg, &err);
-
- if (err)
+ if (strcasecmp (cmdarg, "random") == 0)
+ config.seed = (unsigned int) (time (NULL) ^ make_pid ());
+ else
{
- OS (error, NILF, _("invalid shuffle mode: '%s'"), cmdarg);
- die (MAKE_FAILURE);
+ /* Assume explicit seed. */
+ const char *err;
+ config.seed = make_toui (cmdarg, &err);
+ if (err)
+ OSS (fatal, NILF, _("invalid shuffle mode: %s: '%s'"), err, cmdarg);
}
- }
- switch (config.mode)
- {
- case sm_random:
+ config.mode = sm_random;
config.shuffler = random_shuffle_array;
sprintf (config.strval, "%u", config.seed);
- break;
- case sm_reverse:
- config.shuffler = reverse_shuffle_array;
- strcpy (config.strval, "reverse");
- break;
- case sm_identity:
- config.shuffler = identity_shuffle_array;
- strcpy (config.strval, "identity");
- break;
- case sm_none:
- config.strval[0] = '\0';
- break;
}
}