summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2010-03-04 20:02:22 +0100
committerAndreas Schneider <mail@cynapses.org>2010-03-04 20:08:04 +0100
commitdea644bbd65b6cc2d60956ff2be1399f63ac1782 (patch)
tree42e21f0a9e030c399cf089d59ca207d902fa8142
parent8bcb835aa4ffb4e11deeb6ecea17387193ef7e8f (diff)
downloadlibssh-dea644bbd65b6cc2d60956ff2be1399f63ac1782.tar.gz
libssh-dea644bbd65b6cc2d60956ff2be1399f63ac1782.tar.xz
libssh-dea644bbd65b6cc2d60956ff2be1399f63ac1782.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 3c33d0e..35089d4 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 a86a163..76f72a7 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;