aboutsummaryrefslogtreecommitdiff
path: root/tests/test84.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test84.c')
-rw-r--r--tests/test84.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/test84.c b/tests/test84.c
new file mode 100644
index 000000000..cbbfdedf7
--- /dev/null
+++ b/tests/test84.c
@@ -0,0 +1,71 @@
+#include "uthash.h"
+#include <stdio.h>
+#include <stdlib.h> /* malloc */
+
+typedef struct person_t {
+ char *first_name;
+ int id;
+ UT_hash_handle hh;
+} person_t;
+
+int main()
+{
+ person_t *people=NULL, *person, *new_person, *tmp;
+ const char **name;
+ const char * names[] = { "bob", "jack", "gary", "ty", "bo", "phil", "art",
+ "gil", "buck", "ted", NULL
+ };
+ int id=0;
+
+ for(name=names; *name!=NULL; name++) {
+ person = (person_t*)malloc(sizeof(person_t));
+ if (person == NULL) {
+ exit(-1);
+ }
+ person->first_name = (char*)malloc(10UL);
+ if (person->first_name == NULL) {
+ exit(-1);
+ }
+ strcpy(person->first_name, *name);
+ person->id = id++;
+ HASH_ADD_STR(people,first_name,person);
+ printf("added %s (id %d)\n", person->first_name, person->id);
+ }
+
+ person=NULL;
+ person_t **p=&person;
+
+ for(name=names; *name!=NULL; name++) {
+ HASH_FIND_STR(people,*name,*p);
+ if (person != NULL) {
+ printf("found %s (id %d)\n", person->first_name, person->id);
+ new_person = (person_t*)malloc(sizeof(person_t));
+ if (new_person == NULL) {
+ exit(-1);
+ }
+ new_person->first_name = (char*)malloc(10UL);
+ if (new_person->first_name == NULL) {
+ exit(-1);
+ }
+ strcpy(new_person->first_name, person->first_name);
+ new_person->id = person->id*10;
+ HASH_REPLACE_STR(people,first_name,new_person,tmp);
+ printf("replaced (%c) with %s (id %d)\n", (tmp!=NULL)?'y':'n', new_person->first_name, new_person->id);
+ if (tmp != NULL) {
+ free(tmp->first_name);
+ free(tmp);
+ }
+ } else {
+ printf("failed to find %s\n", *name);
+ }
+ }
+
+ printf("traversing... \n");
+ HASH_ITER(hh, people, person, tmp) {
+ printf("%s (id %d)\n", person->first_name, person->id);
+ HASH_DEL(people,person);
+ free(person->first_name);
+ free(person);
+ }
+ return 0;
+}