ubus: add count test to validate large message sizes
[project/ubus.git] / examples / count.c
diff --git a/examples/count.c b/examples/count.c
new file mode 100644 (file)
index 0000000..e3e9c8a
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 Felix Fietkau <nbd@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include "count.h"
+
+char *count_to_number(uint32_t num)
+{
+       uint32_t ptr = 0, size = 0;
+       uint32_t written = 0, i;
+       int new_line_every_n_numbers = 30;
+       char *s;
+
+       for (i=0; i < num; ++i) {
+               size += snprintf(NULL, 0, "%u ", i);
+               if (i > 0 && i % new_line_every_n_numbers == 0)
+                       size++;
+       }
+       size++; /* one for null char */
+
+       s = calloc(size, sizeof(char));
+       if (!s)
+               goto out;
+
+       for (i=0; i < num; ++i) {
+               written = sprintf(&s[ptr], "%u ", i);
+               ptr  += written;
+               if (i > 0 && i % new_line_every_n_numbers == 0) {
+                       sprintf(&s[ptr], "\n");
+                       ptr++;
+               }
+       }
+
+out:
+       return s;
+}