From: Michal Nazarewicz <min...@mina86.com>

---
 src/idle.c |   45 ++++++++++++++++++++++++++++++---------------
 1 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/src/idle.c b/src/idle.c
index dc556ba..8929631 100644
--- a/src/idle.c
+++ b/src/idle.c
@@ -25,8 +25,9 @@
 #include <stdbool.h>
 #include <stdio.h>
 
-int cmd_idle(int argc, char **argv,
-            struct mpd_connection *connection)
+static int idle_preapare(int argc, char **argv,
+                        struct mpd_connection *connection,
+                        enum mpd_idle *idlep)
 {
        enum mpd_idle idle = 0;
 
@@ -44,35 +45,49 @@ int cmd_idle(int argc, char **argv,
                idle |= parsed;
        }
 
-       idle = idle == 0 ? mpd_run_idle(connection)
-               : mpd_run_idle_mask(connection, idle);
-       if (idle == 0 &&
+       *idlep = idle;
+       return 0;
+}
+
+static int idle(struct mpd_connection *connection, enum mpd_idle mask)
+{
+       mask = mask == 0
+               ? mpd_run_idle(connection)
+               : mpd_run_idle_mask(connection, mask);
+       if (mask == 0 &&
            mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS)
                printErrorAndExit(connection);
 
-       for (unsigned j = 0;; ++j) {
-               enum mpd_idle i = 1 << j;
+       for (enum mpd_idle i = 1; i && i <= mask; i <<= 1) {
                const char *name = mpd_idle_name(i);
 
                if (name == NULL)
                        break;
 
-               if (idle & i)
-                       printf("%s\n", name);
+               if (mask & i)
+                       puts(name);
        }
 
        return 0;
 }
 
-int
-cmd_idleloop(int argc, char **argv, struct mpd_connection *connection)
+int cmd_idle(int argc, char **argv, struct mpd_connection *connection)
 {
+       enum mpd_idle mask;
+       int ret = idle_preapare(argc, argv, connection, &mask);
+       return ret == 0 ? idle(connection, mask) : ret;
+}
+
+int cmd_idleloop(int argc, char **argv, struct mpd_connection *connection)
+{
+       enum mpd_idle mask;
        int ret;
 
-       while (true) {
-               ret = cmd_idle(argc, argv, connection);
+       ret = idle_preapare(argc, argv, connection, &mask);
+       while (ret == 0) {
+               ret = idle(connection, mask);
                fflush(stdout);
-               if (ret != 0)
-                       return ret;
        }
+
+       return ret;
 }
-- 
1.7.7.3


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to