Signed-off-by: Djalal Harouni <tix...@opendz.org>
---
 domain.c | 68 +++++++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 37 insertions(+), 31 deletions(-)

diff --git a/domain.c b/domain.c
index 2e05e90..d27cad2 100644
--- a/domain.c
+++ b/domain.c
@@ -223,12 +223,44 @@ struct kdbus_domain *kdbus_domain_find_by_major(unsigned 
int major)
        return domain;
 }
 
+/* Caller has validated parent and name arguments */
+static int kdbus_domain_compose_path(struct kdbus_domain *domain,
+                                    struct kdbus_domain *parent,
+                                    const char *name)
+{
+       struct kdbus_domain *exists;
+
+       if (!parent) {
+               /* initial domain */
+               domain->devpath = kstrdup(KBUILD_MODNAME, GFP_KERNEL);
+               if (!domain->devpath)
+                       return -ENOMEM;
+       } else {
+               exists = kdbus_domain_find(parent, name);
+               if (exists) {
+                       kdbus_domain_unref(exists);
+                       return -EEXIST;
+               }
+
+               domain->devpath = kasprintf(GFP_KERNEL, "%s/domain/%s",
+                                           parent->devpath, name);
+               if (!domain->devpath)
+                       return -ENOMEM;
+
+               domain->name = kstrdup(name, GFP_KERNEL);
+               if (!domain->name)
+                       return -ENOMEM;
+       }
+
+       return 0;
+}
+
 /**
  * kdbus_domain_new() - create a new domain
  * @parent:            Parent domain, NULL for initial one
  * @name:              Name of the domain, NULL for the initial one
  * @mode:              The access mode for the "control" device node
- * @domain:                    The returned domain
+ * @domain:            The returned domain
  *
  * Return: 0 on success, negative errno on failure
  */
@@ -258,39 +290,13 @@ int kdbus_domain_new(struct kdbus_domain *parent, const 
char *name,
 
        if (parent)
                mutex_lock(&parent->lock);
+
        mutex_lock(&kdbus_subsys_lock);
 
        /* compose name and path of base directory in /dev */
-       if (!parent) {
-               /* initial domain */
-               d->devpath = kstrdup(KBUILD_MODNAME, GFP_KERNEL);
-               if (!d->devpath) {
-                       ret = -ENOMEM;
-                       goto exit_unlock;
-               }
-       } else {
-               struct kdbus_domain *exists;
-
-               exists = kdbus_domain_find(parent, name);
-               if (exists) {
-                       kdbus_domain_unref(exists);
-                       ret = -EEXIST;
-                       goto exit_unlock;
-               }
-
-               d->devpath = kasprintf(GFP_KERNEL, "%s/domain/%s",
-                                      parent->devpath, name);
-               if (!d->devpath) {
-                       ret = -ENOMEM;
-                       goto exit_unlock;
-               }
-
-               d->name = kstrdup(name, GFP_KERNEL);
-               if (!d->name) {
-                       ret = -ENOMEM;
-                       goto exit_unlock;
-               }
-       }
+       ret = kdbus_domain_compose_path(d, parent, name);
+       if (ret < 0)
+               goto exit_unlock;
 
        /* get dynamic major */
        ret = register_chrdev(0, d->devpath, &kdbus_device_ops);
-- 
1.8.5.3

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to