[dhcp-agent-commits] dhcp-agent/src dhcp-guile-util.h,1.2,1.3 dhcp-guile-util.c,1.3,1.4
Status: Alpha
Brought to you by:
actmodern
From: <act...@us...> - 2003-08-18 01:48:20
|
Update of /cvsroot/dhcp-agent/dhcp-agent/src In directory sc8-pr-cvs1:/tmp/cvs-serv28420/src Modified Files: dhcp-guile-util.h dhcp-guile-util.c Log Message: added utility code to transform address pair list to cons Index: dhcp-guile-util.h =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/src/dhcp-guile-util.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dhcp-guile-util.h 10 Aug 2003 01:21:33 -0000 1.2 --- dhcp-guile-util.h 18 Aug 2003 01:48:17 -0000 1.3 *************** *** 32,35 **** --- 32,37 ---- extern list_t *x_scm_guile_string_list_to_list(SCM scm_list); extern SCM x_scm_comma_delimited_string_to_scm_list(const char *string_val); + extern list_t *guile_address_list_to_internal_list(SCM scm_address_list); + extern SCM address_pair_list_to_guile_address_pair_list(list_t *address_list); #endif /* DHCP_GUILE_UTIL_H */ Index: dhcp-guile-util.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/src/dhcp-guile-util.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** dhcp-guile-util.c 12 Aug 2003 12:06:17 -0000 1.3 --- dhcp-guile-util.c 18 Aug 2003 01:48:17 -0000 1.4 *************** *** 119,120 **** --- 119,186 ---- return scm_string_list; } + + /* convert a list of address from the scheme environ to the native one. */ + list_t *guile_address_list_to_internal_list(SCM scm_address_list) + { + char *address_string; + int list_length, i; + SCM scm_list_length; + SCM scm_address_string; + ip_addr_t *ip_address; + list_t *address_list; + + SCM_ASSERT(SCM_CONSP(scm_address_list), scm_address_list, + SCM_ARG1, "guile_address_list_to_internal_list"); + + scm_list_length = scm_length(scm_address_list); + list_length = scm_num2int(scm_list_length, SCM_ARG1, "guile_address_list_to_internal_list"); + + address_list = list_create(); + + for(i = 0;i < list_length;i++) { + scm_address_string = scm_list_ref(scm_address_list, SCM_MAKINUM(i)); + address_string = x_scm_string2newstr(scm_address_string); + + ip_address = string_ip_to_ip_addr(address_string); + list_add_to_end(address_list, ip_address); + xfree(address_string); + + } + + return address_list; + } + + /* turn a native address list to a guile address list. */ + SCM address_list_to_guile_address_list(list_t *address_list) + { + SCM scm_address_list = SCM_EOL; + ip_addr_t *ip_addr; + + list_rewind(address_list); + while((ip_addr = list_next(address_list)) != NULL) { + + scm_address_list = scm_cons(SCM_MAKINUM(*ip_addr), scm_address_list); + } + + return scm_reverse(scm_address_list); + } + + /* turn a native address pair list to a guile address pair list. */ + SCM address_pair_list_to_guile_address_pair_list(list_t *address_list) + { + SCM scm_address_list = SCM_EOL; + ip_addr_t *first_ip, *second_ip; + + list_rewind(address_list); + while((first_ip = list_next(address_list)) != NULL) { + + second_ip = list_next(address_list); + if(second_ip == NULL) { + FATAL_MESSAGE("passed uneven list as address pair"); + } + + scm_address_list = scm_cons(scm_cons(SCM_MAKINUM(*first_ip), SCM_MAKINUM(*second_ip)), scm_address_list); + } + + return scm_reverse(scm_address_list); + } |