aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2010-03-04 20:02:22 +0100
committerAndreas Schneider <mail@cynapses.org>2010-03-06 12:29:03 +0100
commit2144049c7dad4b1584c893dae3303a724c829864 (patch)
treea13d5ded0c48c97f440f9be095a0a250b3e4a574
parent9dd86859e8582eefc958a14ba4787c2488730edc (diff)
downloadlibssh-2144049c7dad4b1584c893dae3303a724c829864.tar.gz
libssh-2144049c7dad4b1584c893dae3303a724c829864.tar.xz
libssh-2144049c7dad4b1584c893dae3303a724c829864.zip
Added a prepend function for ssh_list.
-rw-r--r--include/libssh/misc.h1
-rw-r--r--libssh/misc.c19
2 files changed, 20 insertions, 0 deletions
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;