#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <db.h>

#define DATABASE "access.db"

typedef struct {
   char address[80];
   char phone[30];
} addrinfo;

int main(void)
{
   DB *db;
   DBT key, data;
   int ret, t_ret;
   addrinfo info, *addrp;

   if (! (db = dbopen(DATABASE, O_CREAT|O_RDWR, 0644, DB_HASH, NULL))) {
       fprintf(stderr, "Couldn't initialize database!\n");
       exit(1);
   }

   strcpy(info.address, "Kukvagen 54");
   strcpy(info.phone, "12345");

   memset(&key, 0, sizeof(key));
   memset(&data, 0, sizeof(data));
   key.data = "minnies";
   key.size = sizeof("minnies");
   data.data = &info;
   data.size = sizeof(info);

   if (! (ret = db->put(db, &key, &data, 0)))
       printf("db: %s: key stored.\n", (char *)key.data);
   else {
       perror("DB->put");
       goto err;
   }

   if (! (ret = db->get(db, &key, &data, 0))) {
       addrp = (addrinfo *)data.data;
       printf("db: %s: key retrieved: data was %s, %s.\n",
           (char *)key.data, addrp->address, addrp->phone);
   } else {
       if (ret > 0)
           fprintf(stderr, "Key not found\n");
       else
           perror("DB->get");
       goto err;
   }

   if (! (ret = db->del(db, &key, 0)))
       printf("db: %s: key was deleted.\n", (char *)key.data);
   else {
       if (ret > 0)
           fprintf(stderr, "Key not found\n");
       else
           perror("DB->del");
       goto err;
   }

   if (! (ret = db->get(db, &key, &data, 0)))
       printf("db: %s: key retrieved: data was %s.\n",
           (char *)key.data, (char *)data.data);
   else {
       if (ret > 0)
           fprintf(stderr, "Key not found\n");
       else
           perror("DB->get");
   }

err:
   if ((t_ret = db->close(db)) != 0 && ret == 0)
       ret = t_ret;

   exit(ret);
}