From a7875e935f415997ca14e741b06dcc25b6f6359d Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Fri, 13 Sep 2013 16:30:53 +0200 Subject: [PATCH] add solv_memdup and solv_memdup2 inline helper functions --- src/chksum.c | 7 +------ src/repodata.c | 8 ++------ src/rules.c | 5 +---- src/transaction.c | 9 +++------ src/util.h | 22 ++++++++++++++++++++++ 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/chksum.c b/src/chksum.c index 7b18ba7..cb3c8af 100644 --- a/src/chksum.c +++ b/src/chksum.c @@ -57,12 +57,7 @@ solv_chksum_create(Id type) void * solv_chksum_create_clone(void *handle) { - struct ctxhandle *h; - if (!handle) - return 0; - h = solv_calloc(1, sizeof(*h)); - *h = *(struct ctxhandle *)handle; - return h; + return solv_memdup(handle, sizeof(struct ctxhandle)); } int diff --git a/src/repodata.c b/src/repodata.c index c535aed..a983a53 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -1284,10 +1284,7 @@ dataiterator_init_clone(Dataiterator *di, Dataiterator *from) if (di->dupstr) { if (di->dupstr == di->kv.str) - { - di->dupstr = solv_malloc(di->dupstrn); - memcpy(di->dupstr, from->dupstr, di->dupstrn); - } + di->dupstr = solv_memdup(di->dupstr, di->dupstrn); else { di->dupstr = 0; @@ -1828,8 +1825,7 @@ dataiterator_clonepos(Dataiterator *di, Dataiterator *from) if (from->dupstr && from->dupstr == from->kv.str) { di->dupstrn = from->dupstrn; - di->dupstr = solv_malloc(from->dupstrn); - memcpy(di->dupstr, from->dupstr, di->dupstrn); + di->dupstr = solv_memdup(from->dupstr, from->dupstrn); } } diff --git a/src/rules.c b/src/rules.c index 677807c..cefae35 100644 --- a/src/rules.c +++ b/src/rules.c @@ -2777,10 +2777,7 @@ solver_addbestrules(Solver *solv, int havebestinstalljobs) } } if (r2pkg.count) - { - solv->bestrules_pkg = solv_calloc(r2pkg.count, sizeof(Id)); - memcpy(solv->bestrules_pkg, r2pkg.elements, r2pkg.count * sizeof(Id)); - } + solv->bestrules_pkg = solv_memdup2(r2pkg.elements, r2pkg.count, sizeof(Id)); solv->bestrules_end = solv->nrules; queue_free(&q); queue_free(&q2); diff --git a/src/transaction.c b/src/transaction.c index 0e266fa..5fe90db 100644 --- a/src/transaction.c +++ b/src/transaction.c @@ -861,8 +861,7 @@ transaction_create_clone(Transaction *srctrans) if (srctrans->transaction_installed) { Repo *installed = srctrans->pool->installed; - trans->transaction_installed = solv_calloc(installed->end - installed->start, sizeof(Id)); - memcpy(trans->transaction_installed, srctrans->transaction_installed, (installed->end - installed->start) * sizeof(Id)); + trans->transaction_installed = solv_memdup2(srctrans->transaction_installed, installed->end - installed->start, sizeof(Id)); } map_init_clone(&trans->transactsmap, &srctrans->transactsmap); map_init_clone(&trans->multiversionmap, &srctrans->multiversionmap); @@ -870,11 +869,9 @@ transaction_create_clone(Transaction *srctrans) { struct _TransactionOrderdata *od = srctrans->orderdata; trans->orderdata = solv_calloc(1, sizeof(*trans->orderdata)); - trans->orderdata->tes = solv_malloc2(od->ntes, sizeof(*od->tes)); - memcpy(trans->orderdata->tes, od->tes, od->ntes * sizeof(*od->tes)); + trans->orderdata->tes = solv_memdup2(od->tes, od->ntes, sizeof(*od->tes)); trans->orderdata->ntes = od->ntes; - trans->orderdata->invedgedata = solv_malloc2(od->ninvedgedata, sizeof(Id)); - memcpy(trans->orderdata->invedgedata, od->invedgedata, od->ninvedgedata * sizeof(Id)); + trans->orderdata->invedgedata = solv_memdup2(od->invedgedata, od->ninvedgedata, sizeof(Id)); trans->orderdata->ninvedgedata = od->ninvedgedata; } return trans; diff --git a/src/util.h b/src/util.h index 2f2f096..d8a136d 100644 --- a/src/util.h +++ b/src/util.h @@ -90,6 +90,28 @@ static inline void *solv_calloc_block(size_t len, size_t size, size_t block) return buf; } +static inline void *solv_memdup(void *buf, size_t len) +{ + void *newbuf; + if (!buf) + return 0; + newbuf = solv_malloc(len); + if (len) + memcpy(newbuf, buf, len); + return newbuf; +} + +static inline void *solv_memdup2(void *buf, size_t num, size_t len) +{ + void *newbuf; + if (!buf) + return 0; + newbuf = solv_malloc2(num, len); + if (num) + memcpy(newbuf, buf, num * len); + return newbuf; +} + #ifdef __cplusplus } #endif -- 2.7.4