Simplify copying of xlat value
authorAlan T. DeKok <aland@freeradius.org>
Mon, 18 Feb 2013 16:24:39 +0000 (11:24 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 18 Feb 2013 16:31:21 +0000 (11:31 -0500)
src/lib/valuepair.c

index 975a524..24eba99 100644 (file)
@@ -129,7 +129,7 @@ void pairbasicfree(VALUE_PAIR *pair)
                {
                        char *tmp;
                
-                       memcpy(&tmp, pair->value.xlat, sizeof(tmp));
+                       memcpy(&tmp, &pair->value.xlat, sizeof(tmp));
                        free(tmp);
                }
        default:
@@ -342,23 +342,13 @@ VALUE_PAIR *paircopyvp(const VALUE_PAIR *vp)
        /*
         *      Now copy the value
         */
-       switch (vp->type)
-       {
-               case VT_XLAT:
-                       n->type = VT_NONE;
-                       
-                       if (pairmark_xlat(n, vp->value.xlat) < 0) {
-                               pairbasicfree(n);
-                               return NULL;
-                       }
-                       break;
-               default:
-                       break;
+       if (vp->type == VT_XLAT) {
+               n->value.xlat = strdup(n->value.xlat);
        }
        
        n->da = dict_attr_copy(vp->da, TRUE);
        if (!n->da) {
-               free(n);
+               pairbasicfree(n);
                
                return NULL;
        }
@@ -398,27 +388,13 @@ VALUE_PAIR *paircopyvpdata(const DICT_ATTR *da, const VALUE_PAIR *vp)
                return NULL;    
        }
 
-       /*
-        *      Now copy the value
-        */
-       switch (n->type)
-       {
-               case VT_XLAT:
-                       n->type = VT_NONE;
-                       
-                       if (pairmark_xlat(n, vp->value.xlat) < 0) {
-                               pairbasicfree(n);
-                               return NULL;
-                       }
-                       break;
-               default:
-                       break;
+       memcpy(n, vp, sizeof(*n));
+       n->da = da;
+
+       if (n->type == VT_XLAT) {
+               n->value.xlat = strdup(n->value.xlat);
        }
        
-       memcpy(&(n->data), &(vp->data), sizeof(n->data));
-       
-       n->length = vp->length;
-       
        if ((n->da->type == PW_TYPE_TLV) &&
            (n->vp_tlv != NULL)) {
                n->vp_tlv = malloc(n->length);