X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-bus%2Ftest-bus-zero-copy.c;h=db3906e274e21f8d0a9cd3af023983f8191c45b7;hp=63bb9214566e2d5be7118bd404836396f3420df0;hb=5cbe749238f62546f70d81173a2778f3982adb03;hpb=66b26c5c9b02e787bc46db24daff04ad41e05ec5 diff --git a/src/libsystemd-bus/test-bus-zero-copy.c b/src/libsystemd-bus/test-bus-zero-copy.c index 63bb92145..db3906e27 100644 --- a/src/libsystemd-bus/test-bus-zero-copy.c +++ b/src/libsystemd-bus/test-bus-zero-copy.c @@ -34,6 +34,8 @@ #define FIRST_ARRAY 17 #define SECOND_ARRAY 33 +#define STRING_SIZE 123 + int main(int argc, char *argv[]) { _cleanup_free_ char *bus_name = NULL, *address = NULL; uint8_t *p; @@ -44,6 +46,7 @@ int main(int argc, char *argv[]) { uint64_t sz; uint32_t u32; size_t i, l; + char *s; log_set_max_level(LOG_DEBUG); @@ -77,7 +80,7 @@ int main(int argc, char *argv[]) { r = sd_bus_message_new_method_call(b, ":1.1", "/a/path", "an.inter.face", "AMethod", &m); assert_se(r >= 0); - r = sd_bus_message_open_container(m, 'r', "ayay"); + r = sd_bus_message_open_container(m, 'r', "aysay"); assert_se(r >= 0); r = sd_bus_message_append_array_space(m, 'y', FIRST_ARRAY, (void**) &p); @@ -85,6 +88,24 @@ int main(int argc, char *argv[]) { memset(p, 'L', FIRST_ARRAY); + r = sd_memfd_new_and_map(&f, STRING_SIZE, (void**) &s); + assert_se(r >= 0); + + for (i = 0; i < STRING_SIZE-1; i++) + s[i] = '0' + (i % 10); + + s[STRING_SIZE-1] = 0; + munmap(s, STRING_SIZE); + + r = sd_memfd_get_size(f, &sz); + assert_se(r >= 0); + assert_se(sz == STRING_SIZE); + + r = sd_bus_message_append_string_memfd(m, f); + assert_se(r >= 0); + + sd_memfd_free(f); + r = sd_memfd_new_and_map(&f, SECOND_ARRAY, (void**) &p); assert_se(r >= 0); @@ -122,7 +143,7 @@ int main(int argc, char *argv[]) { bus_message_dump(m); sd_bus_message_rewind(m, true); - r = sd_bus_message_enter_container(m, 'r', "ayay"); + r = sd_bus_message_enter_container(m, 'r', "aysay"); assert_se(r > 0); r = sd_bus_message_read_array(m, 'y', (const void**) &p, &l); @@ -132,6 +153,13 @@ int main(int argc, char *argv[]) { for (i = 0; i < l; i++) assert_se(p[i] == 'L'); + r = sd_bus_message_read(m, "s", &s); + assert_se(r > 0); + + for (i = 0; i < STRING_SIZE-1; i++) + assert_se(s[i] == (char) ('0' + (i % 10))); + assert_se(s[STRING_SIZE-1] == 0); + r = sd_bus_message_read_array(m, 'y', (const void**) &p, &l); assert_se(r > 0); assert_se(l == SECOND_ARRAY);