On Fri, Jun 17, 2016 at 20:04:37 +0200, Ján Tomko wrote: > This function generates some big random numbers. > > Cache the result and supply it to any subsequent generate2 calls. > --- > tests/virnettlscontexttest.c | 2 +- > tests/virnettlssessiontest.c | 2 +- > tests/virrandommock.c | 51 ++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 53 insertions(+), 2 deletions(-) > diff --git a/tests/virrandommock.c b/tests/virrandommock.c > index 6df5e20..04703a1 100644 > --- a/tests/virrandommock.c > +++ b/tests/virrandommock.c > @@ -37,3 +37,54 @@ virRandomBytes(unsigned char *buf, > > return 0; > } > + > + > +#ifdef WITH_GNUTLS > +# include <assert.h> > +# include <stdio.h> > +# include <gnutls/gnutls.h> > + > +static int (*realgenerate2)(gnutls_dh_params_t dparams, > + unsigned int bits); > + > +static void init_syms(void) > +{ We have a macro to help with all the stuff below. It also has better error message. You should use it: VIR_MOCK_REAL_INIT > + if (realgenerate2) > + return; > + > + realgenerate2 = dlsym(RTLD_NEXT, "gnutls_dh_params_generate2"); > + if (realgenerate2) > + return; > + > + fprintf(stderr, "Error getting symbols"); > + abort(); > +} > + > +static gnutls_dh_params_t params_cache; > +unsigned int cachebits; Perhaps this should be static too. > + > +int > +gnutls_dh_params_generate2(gnutls_dh_params_t dparams, > + unsigned int bits) > +{ > + int rc = 0; > + > + init_syms(); > + > + if (!params_cache) { > + if (gnutls_dh_params_init(¶ms_cache) < 0) { > + fprintf(stderr, "Error initializing params cache"); > + abort(); > + } > + rc = realgenerate2(params_cache, bits); > + > + if (rc < 0) > + return rc; > + cachebits = bits; > + } > + > + assert(cachebits == bits); I'd rather not use assert here. Since you already have abort available you can use it directly. > + > + return gnutls_dh_params_cpy(dparams, params_cache); > +} ACK with fixes. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list