sndiod: Make opt_setdev() return 1 if the device was accepted
authorratchov <ratchov@openbsd.org>
Mon, 22 Apr 2024 10:42:04 +0000 (10:42 +0000)
committerratchov <ratchov@openbsd.org>
Mon, 22 Apr 2024 10:42:04 +0000 (10:42 +0000)
usr.bin/sndiod/opt.c
usr.bin/sndiod/opt.h

index 0dfd8ba..17d2456 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: opt.c,v 1.9 2021/11/01 14:43:25 ratchov Exp $ */
+/*     $OpenBSD: opt.c,v 1.10 2024/04/22 10:42:04 ratchov Exp $        */
 /*
  * Copyright (c) 2008-2011 Alexandre Ratchov <alex@caoua.org>
  *
@@ -375,7 +375,7 @@ opt_done(struct opt *o)
  * Set opt's device, and (if necessary) move clients to
  * to the new device
  */
-void
+int
 opt_setdev(struct opt *o, struct dev *ndev)
 {
        struct dev *odev;
@@ -385,12 +385,12 @@ opt_setdev(struct opt *o, struct dev *ndev)
        int i;
 
        if (!dev_ref(ndev))
-               return;
+               return 0;
 
        odev = o->dev;
        if (odev == ndev) {
                dev_unref(ndev);
-               return;
+               return 1;
        }
 
        /* check if clients can use new device */
@@ -399,18 +399,20 @@ opt_setdev(struct opt *o, struct dev *ndev)
                        continue;
                if (s->ops != NULL && !dev_iscompat(odev, ndev)) {
                        dev_unref(ndev);
-                       return;
+                       return 0;
                }
        }
 
        /*
         * if we're using MMC, move all opts to the new device, mtc_setdev()
         * will call us back
+        *
+        * XXX: move this to the end to avoid the recursion
         */
        if (o->mtc != NULL && o->mtc->dev != ndev) {
                mtc_setdev(o->mtc, ndev);
                dev_unref(ndev);
-               return;
+               return 1;
        }
 
        c = ctl_find(CTL_OPT_DEV, o, o->dev);
@@ -468,6 +470,7 @@ opt_setdev(struct opt *o, struct dev *ndev)
        }
 
        dev_unref(ndev);
+       return 1;
 }
 
 /*
index 7dd9e2f..386e6c2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: opt.h,v 1.7 2021/11/01 14:43:25 ratchov Exp $ */
+/*     $OpenBSD: opt.h,v 1.8 2024/04/22 10:42:04 ratchov Exp $ */
 /*
  * Copyright (c) 2008-2012 Alexandre Ratchov <alex@caoua.org>
  *
@@ -47,7 +47,7 @@ struct opt *opt_byname(char *);
 struct opt *opt_bynum(int);
 void opt_init(struct opt *);
 void opt_done(struct opt *);
-void opt_setdev(struct opt *, struct dev *);
+int opt_setdev(struct opt *, struct dev *);
 struct dev *opt_ref(struct opt *);
 void opt_unref(struct opt *);