From dea644bbd65b6cc2d60956ff2be1399f63ac1782 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 4 Mar 2010 20:02:22 +0100 Subject: [PATCH] Added a prepend function for ssh_list. --- include/libssh/misc.h | 1 + libssh/misc.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/libssh/misc.h b/include/libssh/misc.h index 3c33d0e1..35089d43 100644 --- a/include/libssh/misc.h +++ b/include/libssh/misc.h @@ -47,6 +47,7 @@ struct ssh_list *ssh_list_new(void); void ssh_list_free(struct ssh_list *list); struct ssh_iterator *ssh_list_get_iterator(const struct ssh_list *list); int ssh_list_add(struct ssh_list *list, const void *data); +int ssh_list_prepend(struct ssh_list *list, const void *data); void ssh_list_remove(struct ssh_list *list, struct ssh_iterator *iterator); const void *_ssh_list_pop_head(struct ssh_list *list); diff --git a/libssh/misc.c b/libssh/misc.c index a86a163b..76f72a72 100644 --- a/libssh/misc.c +++ b/libssh/misc.c @@ -237,6 +237,25 @@ int ssh_list_add(struct ssh_list *list,const void *data){ return SSH_OK; } +int ssh_list_prepend(struct ssh_list *list, const void *data){ + struct ssh_iterator *it = ssh_iterator_new(data); + + if (it == NULL) { + return SSH_ERROR; + } + + if (list->end == NULL) { + /* list is empty */ + list->root = list->end = it; + } else { + /* set as new root */ + it->next = list->root; + list->root = it; + } + + return SSH_OK; +} + void ssh_list_remove(struct ssh_list *list, struct ssh_iterator *iterator){ struct ssh_iterator *ptr,*prev; prev=NULL;