struct dbus_signal *signals, size_t num_signals)
{
struct dbus_signal_handle *handle;
- int path_len, interface_len;
- int i = 0;
+ int path_len, interface_len, name_len;
+ int i = 0, j = 0;
int ret;
if (!path || !interface || !signals) {
return -EINVAL;
}
- /* Check whether (path, interface) pair is already registered */
+ /* Check whether (path, interface, name) pair is already registered */
path_len = strlen(path) + 1;
interface_len = strlen(interface) + 1;
G_SLIST_FOREACH(dbus_signal_handle_list, handle) {
if (strncmp(handle->interface, interface, interface_len))
continue;
- _E("D-Bus signals having same path(%s) and interface(%s) are already registered!",
- path, interface);
- return -EINVAL;
+ for (i = 0; i < num_signals; i++) {
+ name_len = strlen(signals[i].name) + 1;
+ for (j = 0; j < handle->num_signals; j++) {
+ if (strncmp(signals[i].name,
+ handle->signals[j].name,
+ name_len))
+ continue;
+ _E("D-Bus signal having same path(%s), "
+ "interface(%s) and name(%s) is "
+ "already registered!",
+ path, interface, signals[i].name);
+ return -EINVAL;
+ }
+ }
}
handle = calloc(1, sizeof(struct dbus_signal_handle));