static gpointer pull_buffer_impl( XferElement *elt, size_t *size) { XferSourceRandom *self = (XferSourceRandom *)elt; char *buf; if (elt->cancelled || (self->limited_length && self->length == 0)) { *size = 0; return NULL; } if (self->limited_length) { *size = MIN(10240, self->length); self->length -= *size; } else { *size = 10240; } buf = g_malloc(*size); simpleprng_fill_buffer(&self->prng, buf, *size); return buf; }
static int test_roundtrip_rand(void) { int i, ret; simpleprng_state_t state; char *in, *tmp_enc = NULL, *tmp_dec = NULL; size_t size; GError *err = NULL; simpleprng_seed(&state, 0xface); ret = TRUE; for (i = 0; i < 100; i++) { size = simpleprng_rand_byte(&state); in = g_malloc0(size+1); simpleprng_fill_buffer(&state, in, size); tmp_enc = hexencode_string(in); tmp_dec = tmp_enc? hexdecode_string(tmp_enc, &err) : NULL; if (!tmp_enc || !tmp_dec || strcmp(in, tmp_dec) || err) { ret = FALSE; tu_dbg("roundtrip failure:\n") tu_dbg("input: \"%s\"\n", in); tu_dbg("enc output: \"%s\"\n", tmp_enc? tmp_enc : "(null)"); tu_dbg("dec output: \"%s\"\n", tmp_dec? tmp_dec : "(null)"); tu_dbg("error msg: %s\n", err? err->message : "(none)"); } g_clear_error(&err); amfree(tmp_enc); amfree(tmp_dec); g_free(in); } return ret; }