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);
+ }
|