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
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;
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);
}
}
}
}
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);
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);
{
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;
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