Example #1
0
_public_ int sd_bus_get_property(
                sd_bus *bus,
                const char *destination,
                const char *path,
                const char *interface,
                const char *member,
                sd_bus_error *error,
                sd_bus_message **reply,
                const char *type) {

        sd_bus_message *rep = NULL;
        int r;

        assert_return(bus, -EINVAL);
        assert_return(isempty(interface) || interface_name_is_valid(interface), -EINVAL);
        assert_return(member_name_is_valid(member), -EINVAL);
        assert_return(reply, -EINVAL);
        assert_return(signature_is_single(type, false), -EINVAL);
        assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
        assert_return(!bus_pid_changed(bus), -ECHILD);

        r = sd_bus_call_method(bus, destination, path, "org.freedesktop.DBus.Properties", "Get", error, &rep, "ss", strempty(interface), member);
        if (r < 0)
                return r;

        r = sd_bus_message_enter_container(rep, 'v', type);
        if (r < 0) {
                sd_bus_message_unref(rep);
                return r;
        }

        *reply = rep;
        return 0;
}
Example #2
0
bool signature_is_pair(const char *s) {
        assert(s);

        if (!bus_type_is_basic(*s))
                return false;

        return signature_is_single(s + 1, false);
}
Example #3
0
_public_ int sd_bus_set_property(
                sd_bus *bus,
                const char *destination,
                const char *path,
                const char *interface,
                const char *member,
                sd_bus_error *error,
                const char *type, ...) {

        _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
        va_list ap;
        int r;

        bus_assert_return(bus, -EINVAL, error);
        bus_assert_return(isempty(interface) || interface_name_is_valid(interface), -EINVAL, error);
        bus_assert_return(member_name_is_valid(member), -EINVAL, error);
        bus_assert_return(signature_is_single(type, false), -EINVAL, error);
        bus_assert_return(!bus_pid_changed(bus), -ECHILD, error);

        if (!BUS_IS_OPEN(bus->state)) {
                r = -ENOTCONN;
                goto fail;
        }

        r = sd_bus_message_new_method_call(bus, &m, destination, path, "org.freedesktop.DBus.Properties", "Set");
        if (r < 0)
                goto fail;

        r = sd_bus_message_append(m, "ss", strempty(interface), member);
        if (r < 0)
                goto fail;

        r = sd_bus_message_open_container(m, 'v', type);
        if (r < 0)
                goto fail;

        va_start(ap, type);
        r = sd_bus_message_appendv(m, type, ap);
        va_end(ap);
        if (r < 0)
                goto fail;

        r = sd_bus_message_close_container(m);
        if (r < 0)
                goto fail;

        return sd_bus_call(bus, m, 0, error, NULL);

fail:
        return sd_bus_error_set_errno(error, r);
}
Example #4
0
int main(int argc, char *argv[]) {

    assert_se(signature_is_single("y"));
    assert_se(signature_is_single("u"));
    assert_se(signature_is_single("v"));
    assert_se(signature_is_single("as"));
    assert_se(signature_is_single("(ss)"));
    assert_se(signature_is_single("()"));
    assert_se(signature_is_single("(()()()()())"));
    assert_se(signature_is_single("(((())))"));
    assert_se(signature_is_single("((((s))))"));
    assert_se(signature_is_single("{ss}"));
    assert_se(signature_is_single("a{ss}"));
    assert_se(!signature_is_single("uu"));
    assert_se(!signature_is_single(""));
    assert_se(!signature_is_single("("));
    assert_se(!signature_is_single(")"));
    assert_se(!signature_is_single("())"));
    assert_se(!signature_is_single("((())"));
    assert_se(!signature_is_single("{)"));
    assert_se(!signature_is_single("{}"));
    assert_se(!signature_is_single("{sss}"));
    assert_se(!signature_is_single("{s}"));
    assert_se(!signature_is_single("{ass}"));
    assert_se(!signature_is_single("a}"));

    assert_se(signature_is_pair("yy"));
    assert_se(signature_is_pair("ss"));
    assert_se(signature_is_pair("sas"));
    assert_se(signature_is_pair("sv"));
    assert_se(signature_is_pair("sa(vs)"));
    assert_se(!signature_is_pair(""));
    assert_se(!signature_is_pair("va"));
    assert_se(!signature_is_pair("sss"));
    assert_se(!signature_is_pair("{s}ss"));

    assert_se(signature_is_valid("ssa{ss}sssub", true));
    assert_se(signature_is_valid("ssa{ss}sssub", false));
    assert_se(signature_is_valid("{ss}", true));
    assert_se(!signature_is_valid("{ss}", false));
    assert_se(signature_is_valid("", true));
    assert_se(signature_is_valid("", false));

    assert_se(signature_is_valid("sssusa(uuubbba(uu)uuuu)a{u(uuuvas)}", false));

    assert_se(!signature_is_valid("a", false));
    assert_se(signature_is_valid("as", false));
    assert_se(signature_is_valid("aas", false));
    assert_se(signature_is_valid("aaas", false));
    assert_se(signature_is_valid("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad", false));
    assert_se(signature_is_valid("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas", false));
    assert_se(!signature_is_valid("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaau", false));

    assert_se(signature_is_valid("(((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))", false));
    assert_se(!signature_is_valid("((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))", false));

    assert_se(namespace_complex_pattern("", ""));
    assert_se(namespace_complex_pattern("foobar", "foobar"));
    assert_se(namespace_complex_pattern("foobar.waldo", "foobar.waldo"));
    assert_se(namespace_complex_pattern("foobar.", "foobar.waldo"));
    assert_se(namespace_complex_pattern("foobar.waldo", "foobar."));
    assert_se(!namespace_complex_pattern("foobar.waldo", "foobar"));
    assert_se(!namespace_complex_pattern("foobar", "foobar.waldo"));
    assert_se(!namespace_complex_pattern("", "foo"));
    assert_se(!namespace_complex_pattern("foo", ""));
    assert_se(!namespace_complex_pattern("foo.", ""));

    assert_se(path_complex_pattern("", ""));
    assert_se(path_complex_pattern("", "/"));
    assert_se(path_complex_pattern("/", ""));
    assert_se(path_complex_pattern("/", "/"));
    assert_se(path_complex_pattern("/foobar/", "/"));
    assert_se(path_complex_pattern("/foobar/", "/foobar"));
    assert_se(path_complex_pattern("/foobar", "/foobar"));
    assert_se(path_complex_pattern("/foobar", "/foobar/"));
    assert_se(!path_complex_pattern("/foobar", "/foobar/waldo"));
    assert_se(path_complex_pattern("/foobar/", "/foobar/waldo"));

    assert_se(namespace_simple_pattern("", ""));
    assert_se(namespace_simple_pattern("foobar", "foobar"));
    assert_se(namespace_simple_pattern("foobar.waldo", "foobar.waldo"));
    assert_se(namespace_simple_pattern("foobar", "foobar.waldo"));
    assert_se(!namespace_simple_pattern("foobar.waldo", "foobar"));
    assert_se(!namespace_simple_pattern("", "foo"));
    assert_se(!namespace_simple_pattern("foo", ""));

    return 0;
}