On Wed, Apr 18, 2012 at 17:52, <bl...@apache.org> wrote: > Author: blair > Date: Wed Apr 18 21:52:01 2012 > New Revision: 1327695 > > URL: http://svn.apache.org/viewvc?rev=1327695&view=rev > Log: > Refactor svn_checksum_create() to avoid two switch statements. > > * subversion/libsvn_subr/checksum.c > (checksum_create): > New static function that creates a svn_checksum_t * with > everything set but the contents of the digest. > (svn_checksum_create): > Use the existing switch statement to get the digest size without > needing DIGESTSIZE(). Use checksum_create().
Couldn't you just lose the switch in favor of: digest_size = DIGESTSIZE(kind) ?? Cheers, -g > > Modified: > subversion/trunk/subversion/libsvn_subr/checksum.c > > Modified: subversion/trunk/subversion/libsvn_subr/checksum.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/checksum.c?rev=1327695&r1=1327694&r2=1327695&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_subr/checksum.c (original) > +++ subversion/trunk/subversion/libsvn_subr/checksum.c Wed Apr 18 21:52:01 > 2012 > @@ -56,25 +56,43 @@ validate_kind(svn_checksum_kind_t kind) > return svn_error_create(SVN_ERR_BAD_CHECKSUM_KIND, NULL, NULL); > } > > +/* Create a svn_checksum_t with everything but the contents of the > + digest populated. */ > +static svn_checksum_t * > +checksum_create(svn_checksum_kind_t kind, > + apr_size_t digest_size, > + apr_pool_t *pool) > +{ > + // Use apr_palloc() instead of apr_pcalloc() so that the digest > + // contents are only set once by the caller. > + svn_checksum_t *checksum = apr_palloc(pool, sizeof(*checksum) + > digest_size); > + checksum->digest = (unsigned char *)checksum + sizeof(*checksum); > + checksum->kind = kind; > + return checksum; > +} > > svn_checksum_t * > svn_checksum_create(svn_checksum_kind_t kind, > apr_pool_t *pool) > { > svn_checksum_t *checksum; > + apr_size_t digest_size; > > switch (kind) > { > case svn_checksum_md5: > + digest_size = APR_MD5_DIGESTSIZE; > + break; > case svn_checksum_sha1: > - checksum = apr_pcalloc(pool, sizeof(*checksum) + DIGESTSIZE(kind)); > - checksum->digest = (unsigned char *)checksum + sizeof(*checksum); > - checksum->kind = kind; > - return checksum; > - > + digest_size = APR_SHA1_DIGESTSIZE; > + break; > default: > return NULL; > } > + > + checksum = checksum_create(kind, digest_size, pool); > + memset((unsigned char *) checksum->digest, 0, digest_size); > + return checksum; > } > > svn_checksum_t * > >