static isc_result_t get(isc_entropysource_t *source, void *arg, isc_boolean_t blocking) { isc_keyboard_t *kbd = (isc_keyboard_t *)arg; isc_result_t result; isc_time_t t; isc_uint32_t sample; isc_uint32_t extra; unsigned char c; if (!blocking) return (ISC_R_NOENTROPY); result = isc_keyboard_getchar(kbd, &c); if (result != ISC_R_SUCCESS) return (result); TIME_NOW(&t); sample = isc_time_nanoseconds(&t); extra = c; result = isc_entropy_addcallbacksample(source, sample, extra); if (result != ISC_R_SUCCESS) { printf("\r\n"); return (result); } printf("."); fflush(stdout); return (result); }
int main(int argc, char **argv) { isc_keyboard_t kbd; unsigned char c; isc_result_t res; unsigned int count; UNUSED(argc); UNUSED(argv); isc__mem_register(); isc__task_register(); isc__timer_register(); isc__socket_register(); printf("Type Q to exit.\n"); res = isc_keyboard_open(&kbd); CHECK("isc_keyboard_open()", res); c = 'x'; count = 0; while (res == ISC_R_SUCCESS && c != 'Q') { res = isc_keyboard_getchar(&kbd, &c); printf("."); fflush(stdout); count++; if (count % 64 == 0) printf("\r\n"); } printf("\r\n"); if (res != ISC_R_SUCCESS) { printf("FAILURE: keyboard getchar failed: %s\r\n", isc_result_totext(res)); goto errout; } errout: res = isc_keyboard_close(&kbd, 3); CHECK("isc_keyboard_close()", res); return (0); }