From: Wayne Davison Date: Fri, 18 Dec 2015 22:38:10 +0000 (-0800) Subject: Document expand_item_list's args & make sure incr==0 works OK. X-Git-Tag: v3.1.2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ff5824c25cdc586b4cd18f1e90fe226f2bf7a59;p=thirdparty%2Frsync.git Document expand_item_list's args & make sure incr==0 works OK. --- diff --git a/util.c b/util.c index 41e0c780..3bece5ca 100644 --- a/util.c +++ b/util.c @@ -1605,6 +1605,12 @@ int flist_ndx_pop(flist_ndx_list *lp) return ndx; } +/* Make sure there is room for one more item in the item list. If there + * is not, expand the list as indicated by the value of "incr": + * - if incr < 0 then increase the malloced size by -1 * incr + * - if incr >= 0 then either make the malloced size equal to "incr" + * or (if that's not large enough) double the malloced size + */ void *expand_item_list(item_list *lp, size_t item_size, const char *desc, int incr) { @@ -1616,9 +1622,11 @@ void *expand_item_list(item_list *lp, size_t item_size, new_size += -incr; /* increase slowly */ else if (new_size < (size_t)incr) new_size = incr; - else + else if (new_size) new_size *= 2; - if (new_size < lp->malloced) + else + new_size = 1; + if (new_size <= lp->malloced) overflow_exit("expand_item_list"); /* Using _realloc_array() lets us pass the size, not a type. */ new_ptr = _realloc_array(lp->items, item_size, new_size);