about summary refs log tree commit homepage
path: root/svc_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'svc_dev.c')
-rw-r--r--svc_dev.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/svc_dev.c b/svc_dev.c
index 68d8e3b..d7e1dcd 100644
--- a/svc_dev.c
+++ b/svc_dev.c
@@ -38,28 +38,19 @@ static void devlist_free(void *x)
         free(devlist);
 }
 
-static size_t devid_hash(const void *x, size_t tablesize)
-{
-        const struct mog_dev *dev = x;
-
-        return dev->devid % tablesize;
-}
-
-static bool devid_cmp(const void *a, const void *b)
-{
-        const struct mog_dev *dev_a = a;
-        const struct mog_dev *dev_b = b;
-
-        return dev_a->devid == dev_b->devid;
-}
-
 static struct mog_devlist * mog_devlist_new(dev_t st_dev)
 {
         struct mog_devlist *devlist = xmalloc(sizeof(struct mog_devlist));
 
         devlist->st_dev = st_dev;
         devlist->by_mogdevid = hash_initialize(7, NULL,
-                                               devid_hash, devid_cmp, free);
+                                               mog_dev_hash, mog_dev_cmp,
+
+                                               /*
+                                                * elements are freed when
+                                                * svc->by_mog_devid is freed
+                                                */
+                                               NULL);
 
         return devlist;
 }
@@ -126,7 +117,7 @@ static int svc_scandev(struct mog_svc *svc, size_t *nr, mog_scandev_cb cb)
                 if (*end != 0) continue;
                 if (mog_devid > 0xffffff) continue; /* MEDIUMINT in DB */
 
-                dev = mog_dev_new(svc, (uint32_t)mog_devid);
+                dev = mog_dev_for(svc, (uint32_t)mog_devid);
                 if (!dev) continue;
 
                 devlist = svc_devlist(svc, dev->st_dev);