static apr_status_t set_seed()

in flood.c [47:90]


static apr_status_t set_seed(config_t *config)
{
    apr_status_t stat;
    struct apr_xml_elem *root_elem, *seed_elem;
    char *xml_seed = XML_SEED;
    unsigned int seed;

    /* get the root config node */
    if ((stat = retrieve_root_xml_elem(&root_elem, config)) != APR_SUCCESS) {
        return stat;
    }

    /* get the seed node from config */
    if ((stat = retrieve_xml_elem_child(&seed_elem, root_elem, xml_seed)) != APR_SUCCESS) {
        seed = 1; /* default if not found */
    }
    else {
        if (seed_elem->first_cdata.first && seed_elem->first_cdata.first->text) {
            char *endptr;
            seed = (unsigned int) strtoll(seed_elem->first_cdata.first->text,
                                          &endptr, 10);
            if (*endptr != '\0') {
                apr_file_printf(local_stderr,
                                "XML Node %s has invalid value '%s'.\n",
                                XML_SEED, seed_elem->first_cdata.first->text);
                return APR_EGENERAL;
            }
        }
        else {
            seed = 1;
        }
    }

    /* actually set the seed */
#if FLOOD_USE_RAND
    srand(seed);
#elif FLOOD_USE_RAND48
    srand48(seed);
#elif FLOOD_USE_RANDOM
    srandom(seed);
#endif

    return APR_SUCCESS;
}