add solv_memdup and solv_memdup2 inline helper functions
authorMichael Schroeder <mls@suse.de>
Fri, 13 Sep 2013 14:30:53 +0000 (16:30 +0200)
committerMichael Schroeder <mls@suse.de>
Fri, 13 Sep 2013 14:30:53 +0000 (16:30 +0200)
src/chksum.c
src/repodata.c
src/rules.c
src/transaction.c
src/util.h

index 7b18ba7..cb3c8af 100644 (file)
@@ -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
index c535aed..a983a53 100644 (file)
@@ -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);
     }
 }
 
index 677807c..cefae35 100644 (file)
@@ -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);
index 0e266fa..5fe90db 100644 (file)
@@ -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;
index 2f2f096..d8a136d 100644 (file)
@@ -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