Fix bug on unknown commands 36/23736/2
authorJosé Bollo <jose.bollo@iot.bzh>
Tue, 4 Feb 2020 20:33:08 +0000 (21:33 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Fri, 7 Feb 2020 09:41:57 +0000 (10:41 +0100)
Unknow commands were leading to infinite loop.
This fixes.

Bug-AGL: SPEC-3166

Change-Id: If1529526c5779951b8e2e30d999f3fc037eae9d4
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/cynagora.c
src/main-cynagora-admin.c

index 16d953f..609ab84 100644 (file)
@@ -383,7 +383,7 @@ get_reply(
  * @param block
  *
  * @return  the count of fields greater than 0 or a negative -errno value
- *          or -EAGAIN if nothing and block == 0
+ *          or -EAGAIN if nothing and block == false
  *          or -EPIPE if broken link
  */
 static
index c6a9535..8f28db5 100644 (file)
@@ -459,24 +459,23 @@ int do_list(int ac, char **av)
        if (rc == 0) {
                memset(&lr, 0, sizeof lr);
                last_status = rc = cynagora_get(cynagora, &key, listcb, &lr);
-               if (rc < 0)
-                       fprintf(stderr, "error %s\n", strerror(-rc));
-               else {
-                       if (lr.count) {
-                               it = lr.head = listresult_sort(lr.count, lr.head);
-                               while(it) {
-                                       fprintf(stdout, "%-*s %-*s %-*s %-*s %-*s %-*s\n",
-                                               (int)lr.lengths[0], it->items[0],
-                                               (int)lr.lengths[1], it->items[1],
-                                               (int)lr.lengths[2], it->items[2],
-                                               (int)lr.lengths[3], it->items[3],
-                                               (int)lr.lengths[4], it->items[4],
-                                               (int)lr.lengths[5], it->items[5]);
-                                       it = it->next;
-                               }
+               if (lr.count) {
+                       it = lr.head = listresult_sort(lr.count, lr.head);
+                       while(it) {
+                               fprintf(stdout, "%-*s %-*s %-*s %-*s %-*s %-*s\n",
+                                       (int)lr.lengths[0], it->items[0],
+                                       (int)lr.lengths[1], it->items[1],
+                                       (int)lr.lengths[2], it->items[2],
+                                       (int)lr.lengths[3], it->items[3],
+                                       (int)lr.lengths[4], it->items[4],
+                                       (int)lr.lengths[5], it->items[5]);
+                               it = it->next;
                        }
-                       fprintf(stdout, "%d entries found\n", lr.count);
                }
+               if (rc < 0)
+                       fprintf(stderr, "error %d: %s\n", -rc, strerror(-rc));
+               else
+                       fprintf(stdout, "%d entries found\n", lr.count);
                /* free list */
                while(lr.head) {
                        it = lr.head;
@@ -679,13 +678,13 @@ int do_any(int ac, char **av)
        }
 
        if (!strcmp(av[0], "quit"))
-               return 0;
+               exit(0);
 
        if (!strcmp(av[0], "help") || !strcmp(av[0], "?"))
                return do_help(ac, av);
 
-       fprintf(stderr, "unknown command %s\n", av[0]);
-       return 0;
+       fprintf(stderr, "unknown command %s (try help)\n", av[0]);
+       return 1;
 }
 
 void do_all(int ac, char **av, int quit)