From 2881d89f651c008a576da5981b0346e0eee12d09 Mon Sep 17 00:00:00 2001 From: Kuntz Thomas Date: Fri, 10 Apr 2015 20:30:46 +0200 Subject: [PATCH] Change osl_generic_nclone and osl_generic_clone Now osl_generic_clone make a call to osl_generic_nclone with a size of -1. Now instead of calling osl_generic_clone when n<0, osl_generic_nclone print all the osl_generic in the list. --- include/osl/generic.h | 1 + source/generic.c | 57 ++++++++++++++++----------------------------------- 2 files changed, 19 insertions(+), 39 deletions(-) diff --git a/include/osl/generic.h b/include/osl/generic.h index 4b15824..c609a25 100644 --- a/include/osl/generic.h +++ b/include/osl/generic.h @@ -133,6 +133,7 @@ int osl_generic_has_URI(osl_const_generic_const_p, char const * const); void * osl_generic_lookup(osl_generic_p, char const * const); osl_generic_p osl_generic_shell(void *, osl_interface_p); +int osl_generic_count(osl_generic_p); # if defined(__cplusplus) diff --git a/source/generic.c b/source/generic.c index a7a8508..90aab4c 100644 --- a/source/generic.c +++ b/source/generic.c @@ -538,32 +538,13 @@ int osl_generic_number(osl_generic_p generic) { * \return A pointer to the clone of the input generic structure. */ osl_generic_p osl_generic_clone(osl_generic_p generic) { - osl_generic_p clone = NULL, new; - osl_interface_p interface; - void * x; - - while (generic != NULL) { - if (generic->interface != NULL) { - x = generic->interface->clone(generic->data); - interface = osl_interface_clone(generic->interface); - new = osl_generic_malloc(); - new->interface = interface; - new->data = x; - osl_generic_add(&clone, new); - } - else { - OSL_warning("unregistered interface, cloning ignored"); - } - generic = generic->next; - } - - return clone; + return osl_generic_nclone(generic,-1); } /** - * @brief This function builds and returns a "hard copy" (not a pointer copy) of the - * n first elements of an osl_generic_t list. + * @brief This function builds and returns a "hard copy" (not a pointer copy) + * of the n first elements of an osl_generic_t list. * * \param generic The pointer to the generic structure we want to clone. * \param n The number of nodes we want to copy (n<0 for infinity). @@ -579,25 +560,23 @@ osl_generic_p osl_generic_nclone(osl_generic_p generic, int n) if(n<0) { - clone = osl_generic_clone(generic); + n = osl_generic_count(generic); } - else - { - while ((generic != NULL) && (n>0)) { - if (generic->interface != NULL) { - x = generic->interface->clone(generic->data); - interface = osl_interface_clone(generic->interface); - new = osl_generic_malloc(); - new->interface = interface; - new->data = x; - osl_generic_add(&clone, new); - } - else { - OSL_warning("unregistered interface, cloning ignored"); - } - generic = generic->next; - n--; + + while ((generic != NULL) && (n>0)) { + if (generic->interface != NULL) { + x = generic->interface->clone(generic->data); + interface = osl_interface_clone(generic->interface); + new = osl_generic_malloc(); + new->interface = interface; + new->data = x; + osl_generic_add(&clone, new); + } + else { + OSL_warning("unregistered interface, cloning ignored"); } + generic = generic->next; + n--; } return clone; -- 2.11.4.GIT