+/*
+ * Function: rc_avpair_copy
+ *
+ * Purpose: Return a copy of the existing list "p" ala strdup().
+ *
+ */
+VALUE_PAIR *rc_avpair_copy(VALUE_PAIR *p)
+{
+ VALUE_PAIR *vp, *fp = NULL, *lp = NULL;
+
+ while (p) {
+ vp = malloc(sizeof(VALUE_PAIR));
+ if (!vp) {
+ rc_log(LOG_CRIT, "rc_avpair_copy: out of memory");
+ return NULL; /* leaks a little but so what */
+ }
+ *vp = *p;
+ if (!fp)
+ fp = vp;
+ if (lp)
+ lp->next = vp;
+ lp = vp;
+ p = p->next;
+ }
+
+ return fp;
+}
+