X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fplugins%2Fradius%2Fradiusclient%2Flib%2Favpair.c;h=5f0644bb37ca6bea2a14fc15381ed80165d0ecee;hp=7db2249c4b352f5753d4a3f1a3d8fb1c42114ef4;hb=73722c28d461401b93d750a16c6ecc6eb975d58d;hpb=62230e86739202fd86841ad8bb39261a0410f63b diff --git a/pppd/plugins/radius/radiusclient/lib/avpair.c b/pppd/plugins/radius/radiusclient/lib/avpair.c index 7db2249..5f0644b 100644 --- a/pppd/plugins/radius/radiusclient/lib/avpair.c +++ b/pppd/plugins/radius/radiusclient/lib/avpair.c @@ -1,5 +1,5 @@ /* - * $Id: avpair.c,v 1.2 2002/10/01 08:35:21 fcusack Exp $ + * $Id: avpair.c,v 1.3 2002/11/13 18:19:26 fcusack Exp $ * * Copyright (C) 1995 Lars Fenneberg * @@ -361,6 +361,34 @@ VALUE_PAIR *rc_avpair_get (VALUE_PAIR *vp, UINT4 attr) return (vp); } +/* + * 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; +} + /* * Function: rc_avpair_insert * @@ -382,6 +410,9 @@ void rc_avpair_insert (VALUE_PAIR **a, VALUE_PAIR *p, VALUE_PAIR *b) return; } + if (!b) + return; + vp = *a; if ( p == (VALUE_PAIR *) NULL) /* run to end of "a" list */