.\" File automatically generated by doxy2man0.3 .\" Generation date: Thu Sep 3 2026 .TH radcli_avp_iter_next 3 2026-09-03 "radcli" "Radius client library" .SH "NAME" radcli_avp_iter_next \- Return the current attribute and advance. .SH SYNOPSIS .nf .B #include .sp \fBconst radcli_avp * radcli_avp_iter_next\fP( \fBradcli_avp_iter *\fP\fIit\fP ); .fi .SH DESCRIPTION .SH PARAMETERS .TP .B it an iterator from radcli_avp_list_iter(). .SH STRUCTURES .SS "" .PP .sp .PP Iterator over a radcli_avp_list. .PP A plain value: construct with radcli_avp_list_iter(), advance with radcli_avp_iter_next(). No allocation, safe to copy, safe to run several independent iterators over the same list concurrently (as long as nothing mutates the list while any of them are in use see radcli_avp_list_st's locking note in lib/avp.c). Fields are an implementation detail; do not access them directly. Deliberately not opaque via an incomplete type: a two-pointer cursor belongs on the caller's stack at zero cost, the way any ccan/list or kernel list cursor does, not behind a heap allocation. .PP Usage: radcli_avp_iterit=radcli_avp_list_iter(list); .PP constradcli_avp*a; .PP while((a=radcli_avp_iter_next(&it))!=NULL){ .PP ... .PP } .PP .sp .RS .nf \fB struct radcli_avp_iter { const radcli_avp_list *\fIlist\fP; const radcli_avp *\fIcur\fP; }; \fP .fi .RE .SH RETURN VALUE .PP the current attribute, or NULL once the list is exhausted every subsequent call on the same it also returns NULL; it does not restart. .SH SEE ALSO .PP .nh .ad l \fIradcli_avp_add_bytes\fP(3), \fIradcli_avp_add_bytes_by_num\fP(3), \fIradcli_avp_add_gigawords64\fP(3), \fIradcli_avp_add_gigawords64_by_num\fP(3), \fIradcli_avp_add_ip4\fP(3), \fIradcli_avp_add_ip4_by_num\fP(3), \fIradcli_avp_add_ip4prefix\fP(3), \fIradcli_avp_add_ip4prefix_by_num\fP(3), \fIradcli_avp_add_ip6\fP(3), \fIradcli_avp_add_ip6_by_num\fP(3), \fIradcli_avp_add_str\fP(3), \fIradcli_avp_add_str_by_num\fP(3), \fIradcli_avp_add_uint32\fP(3), \fIradcli_avp_add_uint32_by_num\fP(3), \fIradcli_avp_add_uint64\fP(3), \fIradcli_avp_add_uint64_by_num\fP(3), \fIradcli_avp_add_username\fP(3), \fIradcli_avp_concat_str\fP(3), \fIradcli_avp_concat_str_by_num\fP(3), \fIradcli_avp_def\fP(3), \fIradcli_avp_get\fP(3), \fIradcli_avp_get_by_num\fP(3), \fIradcli_avp_get_bytes\fP(3), \fIradcli_avp_get_bytes_by_num\fP(3), \fIradcli_avp_get_cstr\fP(3), \fIradcli_avp_get_cstr_by_num\fP(3), \fIradcli_avp_get_gigawords64\fP(3), \fIradcli_avp_get_gigawords64_by_num\fP(3), \fIradcli_avp_get_ip4prefix\fP(3), \fIradcli_avp_get_ip4prefix_by_num\fP(3), \fIradcli_avp_get_ip6\fP(3), \fIradcli_avp_get_ip6_by_num\fP(3), \fIradcli_avp_get_uint32\fP(3), \fIradcli_avp_get_uint32_by_num\fP(3), \fIradcli_avp_get_uint64\fP(3), \fIradcli_avp_get_uint64_by_num\fP(3), \fIradcli_avp_list_error\fP(3), \fIradcli_avp_list_free\fP(3), \fIradcli_avp_list_iter\fP(3), \fIradcli_avp_list_new\fP(3) .ad .hy