From c545bec08949137fac9c6b0e302f1464ae3566b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sun, 9 Dec 2012 09:53:43 +0000 Subject: [PATCH] Fix Solid predicate generation. Previously "partitionmanager /dev/sda /dev/sdb /dev/sdc" did not work. svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1327820 --- src/util/helpers.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/util/helpers.cpp b/src/util/helpers.cpp index 9621b91..fbb112c 100644 --- a/src/util/helpers.cpp +++ b/src/util/helpers.cpp @@ -239,21 +239,24 @@ QList getSolidDeviceList() { predicate = " [ " + predicate + " AND "; - if (args->count() > 1) + qint32 brackets = (args->count() + 1) / 2; + brackets = args->count() == 1 ? 0 : brackets; + for (qint32 i = 0; i < brackets; i++) predicate += "[ "; - for (qint32 i = 0; i < args->count(); i++) + bool right_bracket = false; + for (qint32 i = 0; i < args->count(); i++, right_bracket =! right_bracket) { predicate += QString("Block.device == '%1' ").arg(args->arg(i)); + if (right_bracket) + predicate += i == 1 ? "] " : "] ] "; if (i < args->count() - 1) predicate += "OR "; + if (right_bracket && i != args->count() - 2 && i != args->count()-1) + predicate += "[ "; } - - if (args->count() > 1) - predicate += "] "; - - predicate += ']'; + predicate += right_bracket && brackets > 0 ? "] ]" : "]"; } return Solid::Device::listFromQuery(predicate);