git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
implemented url resolving in namespaces
[swftools.git]
/
lib
/
q.c
diff --git
a/lib/q.c
b/lib/q.c
index
e578107
..
b1553b5
100644
(file)
--- a/
lib/q.c
+++ b/
lib/q.c
@@
-295,7
+295,7
@@
void trie_put(trie_t**t, unsigned const char*id)
if(id[0]) {
trie_put(&(*t)->row[id[0]], id+1);
} else {
if(id[0]) {
trie_put(&(*t)->row[id[0]], id+1);
} else {
- (*t)->rest = "";
+ (*t)->rest = strdup("");
}
}
}
}
@@
-304,14
+304,28
@@
int trie_lookup(trie_t*t, unsigned const char*id)
while(t) {
if(t->rest && !strcmp(t->rest, id))
return 1;
while(t) {
if(t->rest && !strcmp(t->rest, id))
return 1;
- t = t->row[id[0]];
if(!*id)
return 0;
if(!*id)
return 0;
- id++;
+ t = t->row[*id++];
}
return 0;
}
}
return 0;
}
+char trie_remove(trie_t*t, unsigned const char*id)
+{
+ while(t) {
+ if(t->rest && !strcmp(t->rest, id)) {
+ free(t->rest);
+ t->rest = 0;
+ return 1;
+ }
+ if(!*id)
+ return 0;
+ t = t->row[*id++];
+ }
+}
+
+
// ------------------------------- crc32 --------------------------------------
static unsigned int*crc32 = 0;
static void crc32_init(void)
// ------------------------------- crc32 --------------------------------------
static unsigned int*crc32 = 0;
static void crc32_init(void)
@@
-764,6
+778,14
@@
void dict_init(dict_t*h, int size)
h->num = 0;
h->key_type = &charptr_type;
}
h->num = 0;
h->key_type = &charptr_type;
}
+void dict_init2(dict_t*h, type_t*t, int size)
+{
+ memset(h, 0, sizeof(dict_t));
+ h->hashsize = size;
+ h->slots = h->hashsize?(dictentry_t**)rfx_calloc(sizeof(dictentry_t*)*h->hashsize):0;
+ h->num = 0;
+ h->key_type = t;
+}
dict_t*dict_clone(dict_t*o)
{
dict_t*dict_clone(dict_t*o)
{
@@
-925,7
+947,7
@@
char dict_del(dict_t*h, const void*key)
memset(e, 0, sizeof(dictentry_t));
rfx_free(e);
if(e == head) {
memset(e, 0, sizeof(dictentry_t));
rfx_free(e);
if(e == head) {
- h->slots[hash] = 0;
+ h->slots[hash] = next;
} else {
assert(prev);
prev->next = next;
} else {
assert(prev);
prev->next = next;
@@
-1094,7
+1116,6
@@
array_t* array_new2(type_t*type) {
void*array_getkey(array_t*array, int nr) {
if(nr > array->num || nr<0) {
printf("error: reference to element %d in array[%d]\n", nr, array->num);
void*array_getkey(array_t*array, int nr) {
if(nr > array->num || nr<0) {
printf("error: reference to element %d in array[%d]\n", nr, array->num);
- *(int*)0 = 0xdead;
return 0;
}
return array->d[nr].name;
return 0;
}
return array->d[nr].name;
@@
-1102,7
+1123,6
@@
void*array_getkey(array_t*array, int nr) {
void*array_getvalue(array_t*array, int nr) {
if(nr > array->num || nr<0) {
printf("error: reference to element %d in array[%d]\n", nr, array->num);
void*array_getvalue(array_t*array, int nr) {
if(nr > array->num || nr<0) {
printf("error: reference to element %d in array[%d]\n", nr, array->num);
- *(int*)0 = 0xdead;
return 0;
}
return array->d[nr].data;
return 0;
}
return array->d[nr].data;