shithub: puzzles

ref: eb88ee0973c9a19b14e2e0e1579ee17625d73e05
dir: /misc.c/

View raw version
/*
 * misc.c: Miscellaneous helpful functions.
 */

#include <assert.h>
#include <stdlib.h>

#include "puzzles.h"

int rand_upto(int limit)
{
    unsigned long divisor = RAND_MAX / (unsigned)limit;
    unsigned long max = divisor * (unsigned)limit;
    unsigned long n;

    assert(limit > 0);

    do {
        n = rand();
    } while (n >= max);

    n /= divisor;

    return (int)n;
}

void free_cfg(config_item *cfg)
{
    config_item *i;

    for (i = cfg; i->type != C_END; i++)
	if (i->type == C_STRING)
	    sfree(i->sval);
    sfree(cfg);
}