> URL: http://svn.apache.org/r1445980
> Log: > * subversion/libsvn_subr/sorts.c > (svn_sort__array_reverse): Replace a debug-only assertion with an > implementation for non pointer sized array items, which I hope > we never need. [...] Thanks for prioviding an implementation. I updated the doc string for you in r1446012. - Julian > Modified: subversion/trunk/subversion/libsvn_subr/sorts.c > ============================================================================== > --- subversion/trunk/subversion/libsvn_subr/sorts.c (original) > +++ subversion/trunk/subversion/libsvn_subr/sorts.c Wed Feb 13 23:22:20 2013 > @@ -277,15 +277,32 @@ svn_sort__array_reverse(apr_array_header > { > int i; > > - assert(array->elt_size == sizeof(void *)); > + if (array->elt_size == sizeof(void *)) > + { > + for (i = 0; i < array->nelts / 2; i++) > + { > + int swap_index = array->nelts - i - 1; > + void *tmp = APR_ARRAY_IDX(array, i, void *); > > - for (i = 0; i < array->nelts / 2; i++) > + APR_ARRAY_IDX(array, i, void *) = > + APR_ARRAY_IDX(array, swap_index, void *); > + APR_ARRAY_IDX(array, swap_index, void *) = tmp; > + } > + } > + else > { > - int swap_index = array->nelts - i - 1; > - void *tmp = APR_ARRAY_IDX(array, i, void *); > + size_t sz = array->elt_size; > + char *tmp = apr_palloc(scratch_pool, sz); > + > + for (i = 0; i < array->nelts / 2; i++) > + { > + int swap_index = array->nelts - i - 1; > + char *x = array->elts + (sz * i); > + char *y = array->elts + (sz * swap_index); > > - APR_ARRAY_IDX(array, i, void *) = > - APR_ARRAY_IDX(array, swap_index, void *); > - APR_ARRAY_IDX(array, swap_index, void *) = tmp; > + memcpy(tmp, x, sz); > + memcpy(x, y, sz); > + memcpy(y, tmp, sz); > + } > } > } >