+static int ubus_cli_listen(struct ubus_context *ctx, int argc, char **argv)
+{
+ static struct ubus_object listener;
+ const char *event;
+ int ret = 0;
+
+ if (!argc) {
+ event = "*";
+ ret = ubus_register_event_handler(ctx, &listener, NULL);
+ }
+
+ for (;argc;argv++, argc--) {
+ event = argv[0];
+ ret = ubus_register_event_handler(ctx, &listener, argv[0]);
+ if (ret)
+ break;
+ }
+
+ if (ret) {
+ fprintf(stderr, "Error while registering for event '%s': %s\n",
+ event, ubus_strerror(ret));
+ }
+
+ uloop_init();
+ ubus_add_uloop(ctx);
+ uloop_run();
+ uloop_done();
+
+ return 0;
+}
+