X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fq.c;h=989c47f4993984c37d5b784886ff34b58139a7fd;hb=f0a3da08874dcfae2f3180559b208f6726702e6a;hp=a38a35e0db2c208e49f2dd16770a5445d5af6b71;hpb=d0814136e2d0a4261931c644e6282c480a11d62f;p=swftools.git diff --git a/lib/q.c b/lib/q.c index a38a35e..989c47f 100644 --- a/lib/q.c +++ b/lib/q.c @@ -331,6 +331,8 @@ unsigned int crc32_add_byte(unsigned int checksum, unsigned char b) } unsigned int crc32_add_string(unsigned int checksum, const char*s) { + if(!s) + return checksum; while(*s) { checksum = crc32_add_byte(checksum, *s); s++; @@ -523,19 +525,27 @@ void stringarray_destroy(stringarray_t*sa) char charptr_equals(const void*o1, const void*o2) { + if(!o1 || !o2) + return o1==o2; return !strcmp(o1,o2); } unsigned int charptr_hash(const void*o) { + if(!o) + return 0; return string_hash2(o); } void* charptr_dup(const void*o) { + if(!o) + return 0; return strdup(o); } void charptr_free(void*o) { - rfx_free(o); + if(o) { + rfx_free(o); + } } char stringstruct_equals(const void*o1, const void*o2) { @@ -965,7 +975,7 @@ typedef struct _commonlist { listinfo_t info[0]; } commonlist_t; -int list_length(void*_list) +int list_length_(void*_list) { commonlist_t*l = (commonlist_t*)_list; if(!l) @@ -977,7 +987,7 @@ void list_append_(void*_list, void*entry) commonlist_t**list = (commonlist_t**)_list; commonlist_t* n = 0; if(!*list) { - n = malloc(sizeof(commonlist_t)+sizeof(listinfo_t)); + n = (commonlist_t*)malloc(sizeof(commonlist_t)+sizeof(listinfo_t)); *list = n; (*list)->info[0].size = 0; } else { @@ -989,6 +999,23 @@ void list_append_(void*_list, void*entry) (*list)->info[0].last = n; (*list)->info[0].size++; } +/* notice: prepending uses slighly more space than appending */ +void list_prepend_(void*_list, void*entry) +{ + commonlist_t**list = (commonlist_t**)_list; + commonlist_t* n = (commonlist_t*)malloc(sizeof(commonlist_t)+sizeof(listinfo_t)); + int size = 0; + commonlist_t* last = 0; + if(*list) { + last = (*list)->info[0].last; + size = (*list)->info[0].size; + } + n->next = *list; + n->entry = entry; + *list = n; + (*list)->info[0].last = last; + (*list)->info[0].size = size+1; +} void list_free_(void*_list) { commonlist_t**list = (commonlist_t**)_list;