-int jbus_dispatch_pollfds(struct jbus **jbuses, int njbuses, struct pollfd *fds, int maxcount)
-{
- int i, r, n;
- DBusDispatchStatus sts;
-
- for (r = n = i = 0 ; i < njbuses && n < maxcount ; i++) {
- if (jbuses[i]->watchnr && fds[r].fd == jbuses[i]->watchfd) {
- if (fds[r].revents) {
- dbus_connection_read_write(jbuses[i]->connection, 0);
- sts = dbus_connection_get_dispatch_status(jbuses[i]->connection);
- while(sts == DBUS_DISPATCH_DATA_REMAINS && n < maxcount) {
- sts = dbus_connection_dispatch(jbuses[i]->connection);
- n++;
- }
- }
- r++;
- }
- }
- return n;
-}
-
-int jbus_dispatch_multiple(struct jbus **jbuses, int njbuses, int maxcount)
-{
- int i, r;
- DBusDispatchStatus sts;
-
- for (i = r = 0 ; i < njbuses && r < maxcount ; i++) {
- dbus_connection_read_write(jbuses[i]->connection, 0);
- sts = dbus_connection_get_dispatch_status(jbuses[i]->connection);
- while(sts == DBUS_DISPATCH_DATA_REMAINS && r < maxcount) {
- sts = dbus_connection_dispatch(jbuses[i]->connection);
- r++;
- }
- }
- return r;
-}
-
-int jbus_read_write_dispatch_multiple(struct jbus **jbuses, int njbuses, int toms, int maxcount)
-{
- int n, r, s;
- struct pollfd *fds;
-
- if (njbuses < 0 || njbuses > 100) {
- errno = EINVAL;
- return -1;
- }
- fds = alloca(njbuses * sizeof * fds);
- assert(fds != NULL);
-
- r = jbus_dispatch_multiple(jbuses, njbuses, maxcount);
- if (r)
- return r;
- n = jbus_fill_pollfds(jbuses, njbuses, fds);
- for(;;) {
- s = poll(fds, n, toms);
- if (s >= 0)
- break;
- if (errno != EINTR)
- return r ? r : s;
- toms = 0;
- }
- n = jbus_dispatch_pollfds(jbuses, njbuses, fds, maxcount - r);
- return n >= 0 ? r + n : r ? r : n;
-}
-
-int jbus_read_write_dispatch(struct jbus *jbus, int toms)
-{
- int r = jbus_read_write_dispatch_multiple(&jbus, 1, toms, 1000);
- return r < 0 ? r : 0;
-}
-
-int jbus_call_ss(struct jbus *jbus, const char *method, const char *query, void (*onresp)(int, const char*, void*), void *data)
+/*
+ * Asynchronous call to 'method' of 'jbus' passing the string 'query'.
+ * On response, the function 'onresp' is called with the returned string
+ * value and the closure 'data'.
+ * The function 'onresp' is invoked with 3 parameters:
+ * 1. int: 0 if no error or -1 if error.
+ * 2. const char *: the returned string (might be NULL if error)
+ * 3. void *: the closure 'data'
+ *
+ * Returns 0 in case of success or -1 in case of error.
+ */
+int jbus_call_ss(
+ struct jbus *jbus,
+ const char *method,
+ const char *query,
+ void (*onresp) (int, const char *, void *),
+ void *data)