8 #include <botan/internal/es_unix.h>     9 #include <botan/internal/unix_cmd.h>    10 #include <botan/parsing.h>    15 #include <sys/resource.h>    25 bool Unix_Program_Cmp(
const Unix_Program& a, 
const Unix_Program& b)
    27    if(a.priority == b.priority)
    28       return (a.name_and_args < b.name_and_args);
    30    return (a.priority < b.priority);
    41    std::vector<Unix_Program> default_sources = get_default_sources();
    42    add_sources(&default_sources[0], default_sources.size());
    50    sources.insert(sources.end(), srcs, srcs + count);
    51    std::sort(sources.begin(), sources.end(), Unix_Program_Cmp);
    62    const char* stat_targets[] = {
    73    for(
size_t i = 0; stat_targets[i]; i++)
    77       if(::stat(stat_targets[i], &statbuf) == 0)
    78          accum.
add(&statbuf, 
sizeof(statbuf), .005);
    81    accum.
add(::getpid(),  0);
    82    accum.
add(::getppid(), 0);
    83    accum.
add(::getuid(),  0);
    84    accum.
add(::getgid(), 0);
    85    accum.
add(::getpgrp(), 0);
    87    struct ::rusage usage;
    88    ::getrusage(RUSAGE_SELF, &usage);
    89    accum.
add(usage, .005);
    91    ::getrusage(RUSAGE_CHILDREN, &usage);
    92    accum.
add(usage, .005);
    94    const size_t MINIMAL_WORKING = 16;
    98    for(
size_t i = 0; i != sources.size(); i++)
   102       size_t got_from_src = 0;
   106          size_t got_this_loop = pipe.
read(&io_buffer[0], io_buffer.
size());
   107          got_from_src += got_this_loop;
   109          accum.
add(&io_buffer[0], got_this_loop, .005);
   112       sources[i].working = (got_from_src >= MINIMAL_WORKING) ? 
true : 
false;
 MemoryRegion< byte > & get_io_buffer(size_t size)
void clear_mem(T *ptr, size_t n)
void add(const void *bytes, size_t length, double entropy_bits_per_byte)
size_t read(byte[], size_t)
Unix_EntropySource(const std::vector< std::string > &path)
bool polling_goal_achieved() const
void poll(Entropy_Accumulator &accum)
void add_sources(const Unix_Program[], size_t)