]> hackdaworld.org Git - my-code/api.git/commitdiff
list system updates for moldyn api, gets changed soon again (clean up)!
authorhackbard <hackbard>
Tue, 28 Nov 2006 11:31:21 +0000 (11:31 +0000)
committerhackbard <hackbard>
Tue, 28 Nov 2006 11:31:21 +0000 (11:31 +0000)
list/list.c
list/list.h

index 64a104a1cd3f7e0eb651e60cfc5782e07b898960..79d53f7a5f0088a8a4ef8abdf240ac4095ccda21 100644 (file)
@@ -53,7 +53,7 @@ int list_del_element(t_list *list,t_list_element *element) {
   if(element->prev!=NULL) element->prev->next=element->next;
   if(element==list->start) list->start=element->next;
   list_reset(list);
-  if(element->data!=NULL) free(element->data);
+  if((element->data!=NULL)&&(element->data_len)) free(element->data);
   free(element);
   dprintf(list->outfd,"[list] element deleted\n");
 
@@ -97,6 +97,81 @@ int list_search_data(t_list *list,void *data,int first_bytes) {
   return L_NO_SUCH_ELEMENT;
 }
 
+int list_add_immediate_ptr(t_list *list,void *ptr) {
+
+  /* if this is the first element */
+  if(list->start==NULL) {
+    list->start=(t_list_element *)malloc(sizeof(t_list_element));
+    if(list->start==NULL) {
+      dprintf(list->outfd,"[list] unable to allocate list element memory\n");
+      return L_E_MEM;
+    }
+    list->start->data=ptr;
+    list->start->data_len=0;
+    list->start->next=NULL;
+    list->start->prev=NULL;
+    list->current=list->start;
+    dprintf(list->outfd,"[list] added initial element\n");
+    return L_SUCCESS;
+  }
+
+  list->current->next=(t_list_element *)malloc(sizeof(t_list_element));
+  if(list->current->next==NULL) {
+    dprintf(list->outfd,"[list] unable to allocate element memory\n");
+    return L_E_MEM;
+  }
+  list->current->next->prev=list->current;
+  list->current->next->next=NULL;
+  list->current->next->data=ptr;
+  list->current->next->data_len=0;
+
+  list->current=list->current->next;
+
+  return L_SUCCESS;
+
+}
+
+int list_add_immediate(t_list *list,void *data,int data_len) {
+
+  /* if this is the first element */
+  if(list->start==NULL) {
+    list->start=(t_list_element *)malloc(sizeof(t_list_element));
+    if(list->start==NULL) {
+      dprintf(list->outfd,"[list] unable to allocate list element memory\n");
+      return L_E_MEM;
+    }
+    if((list->start->data=malloc(data_len))==NULL) {
+      dprintf(list->outfd,"[list] unable to allocate data memory\n");
+      return L_E_MEM;
+    }
+    memcpy(list->start->data,data,data_len);
+    list->start->data_len=data_len;
+    list->start->next=NULL;
+    list->start->prev=NULL;
+    list->current=list->start;
+    dprintf(list->outfd,"[list] added initial element\n");
+    return L_SUCCESS;
+  }
+
+  list->current->next=(t_list_element *)malloc(sizeof(t_list_element));
+  if(list->current->next==NULL) {
+    dprintf(list->outfd,"[list] unable to allocate element memory\n");
+    return L_E_MEM;
+  }
+  list->current->next->prev=list->current;
+  list->current->next->next=NULL;
+  if((list->current->next->data=malloc(data_len))==NULL) {
+    dprintf(list->outfd,"[list] unable to allocate data memory\n");
+    return L_E_MEM;
+  }
+  memcpy(list->current->next->data,data,data_len);
+  list->current->next->data_len=data_len;
+
+  list->current=list->current->next;
+
+  return L_SUCCESS;
+}
+
 int list_add_element(t_list *list,void *data,int data_len) {
 
   list_reset(list);
index 5d63af93c118d466101bdd57266ef6cff85ff5b7..4302d3222883af299038e10dc9943613e6703b1c 100644 (file)
@@ -1,5 +1,8 @@
 /* list.h -- list headers */
 
+#ifndef LIST_H
+#define LIST_H
+
 #define _GNU_SOURCE
 #include <stdio.h>
 #include <string.h>
@@ -36,6 +39,9 @@ int list_del_element(t_list *list,t_list_element *element);
 int list_del_current(t_list *list);
 int list_destroy(t_list *list);
 int list_search_data(t_list *list,void *data,int first_bytes);
+int list_add_immediate_ptr(t_list *list,void *ptr);
+int list_add_immediate(t_list *list,void *data,int data_len);
 int list_add_element(t_list *list,void *data,int data_len);
 int list_count(t_list *list);
 
+#endif