tests: implement xcasprintf()
authorBartosz Golaszewski <bartekgola@gmail.com>
Wed, 22 Feb 2017 15:18:30 +0000 (16:18 +0100)
committerBartosz Golaszewski <bartekgola@gmail.com>
Wed, 22 Feb 2017 15:18:30 +0000 (16:18 +0100)
Add another flavor of xasprintf() which can also return the number of
bytes written to the created string.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
tests/unit/gpiod-unit.c

index 0e3f79b58d039c0ecd158b94b30f00de0abf7149..44dc763bbb089df25ec13dab3717c36090473080 100644 (file)
@@ -135,6 +135,22 @@ static GU_PRINTF(1, 2) char * xasprintf(const char *fmt, ...)
        return ret;
 }
 
+static GU_PRINTF(2, 3) char * xcasprintf(size_t *count, const char *fmt, ...)
+{
+       int status;
+       va_list va;
+       char *ret;
+
+       va_start(va, fmt);
+       status = vasprintf(&ret, fmt, va);
+       if (status < 0)
+               die_perr("asprintf");
+       va_end(va);
+
+       *count = status;
+       return ret;
+}
+
 static void  check_chip_index(unsigned int index)
 {
        if (index >= globals.test_ctx.num_chips)
@@ -247,8 +263,8 @@ static void check_gpio_mockup(void)
 static void test_load_module(struct gu_chip_descr *descr)
 {
        char *modarg, *tmp_modarg;
+       size_t modarg_len, count;
        char **line_sizes;
-       size_t modarg_len;
        unsigned int i;
        int status;
 
@@ -256,12 +272,9 @@ static void test_load_module(struct gu_chip_descr *descr)
 
        modarg_len = strlen("gpio_mockup_ranges=");
        for (i = 0; i < descr->num_chips; i++) {
-               status = asprintf(&line_sizes[i],
-                                 "-1,%u,", descr->num_lines[i]);
-               if (status < 0)
-                       die_perr("asprintf");
-
-               modarg_len += status;
+               line_sizes[i] = xcasprintf(&count, "-1,%u,",
+                                          descr->num_lines[i]);
+               modarg_len += count;
        }
 
        modarg = xzalloc(modarg_len + 1);