98 lines
2.1 KiB
C
98 lines
2.1 KiB
C
#include <stdlib.h> /* malloc */
|
|
#include <stdio.h> /* printf */
|
|
#include <string.h>
|
|
#include "uthash.h"
|
|
#include "utlist.h"
|
|
#include "utstring.h"
|
|
|
|
typedef struct example_user_t {
|
|
int id;
|
|
int cookie;
|
|
UT_hash_handle hh;
|
|
} example_user_t;
|
|
|
|
#define BUFLEN 20
|
|
|
|
typedef struct el {
|
|
char bname[BUFLEN];
|
|
struct el *next, *prev;
|
|
} el;
|
|
|
|
static int namecmp(void *_a, void *_b)
|
|
{
|
|
el *a = (el*)_a;
|
|
el *b = (el*)_b;
|
|
return strcmp(a->bname,b->bname);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
el *name, *elt, *tmp, etmp;
|
|
int i;
|
|
example_user_t *user, *users=NULL;
|
|
el *head = NULL; /* important- initialize to NULL! */
|
|
|
|
char linebuf[BUFLEN];
|
|
FILE *file;
|
|
|
|
UT_string *s;
|
|
char binary[] = "\xff\xff";
|
|
|
|
file = fopen( "test11.dat", "r" );
|
|
if (file == NULL) {
|
|
perror("can't open: ");
|
|
exit(-1);
|
|
}
|
|
|
|
while (fgets(linebuf,BUFLEN,file) != NULL) {
|
|
name = (el*)malloc(sizeof(el));
|
|
if (name == NULL) {
|
|
exit(-1);
|
|
}
|
|
strcpy(name->bname, linebuf);
|
|
DL_APPEND(head, name);
|
|
}
|
|
DL_SORT(head, namecmp);
|
|
DL_FOREACH(head,elt) {
|
|
printf("%s", elt->bname);
|
|
}
|
|
|
|
memcpy(etmp.bname, "WES\n", 5UL);
|
|
DL_SEARCH(head,elt,&etmp,namecmp);
|
|
if (elt != NULL) {
|
|
printf("found %s\n", elt->bname);
|
|
}
|
|
|
|
/* now delete each element, use the safe iterator */
|
|
DL_FOREACH_SAFE(head,elt,tmp) {
|
|
DL_DELETE(head,elt);
|
|
}
|
|
|
|
fclose(file);
|
|
|
|
/* create elements */
|
|
for(i=0; i<10; i++) {
|
|
user = (example_user_t*)malloc(sizeof(example_user_t));
|
|
if (user == NULL) {
|
|
exit(-1);
|
|
}
|
|
user->id = i;
|
|
user->cookie = i*i;
|
|
HASH_ADD_INT(users,id,user);
|
|
}
|
|
|
|
for(user=users; user != NULL; user=(example_user_t*)(user->hh.next)) {
|
|
printf("user %d, cookie %d\n", user->id, user->cookie);
|
|
}
|
|
|
|
utstring_new(s);
|
|
utstring_bincpy(s, binary, sizeof(binary));
|
|
printf("length is %u\n", (unsigned)utstring_len(s));
|
|
|
|
utstring_clear(s);
|
|
utstring_printf(s,"number %d", 10);
|
|
printf("%s\n", utstring_body(s));
|
|
|
|
utstring_free(s);
|
|
return 0;
|
|
}
|