| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include <ccan/asprintf/asprintf.h>
- /* Include the C files directly. */
- /* Override vasprintf for testing. */
- #if HAVE_ASPRINTF
- #define vasprintf my_vasprintf
- static int my_vasprintf(char **strp, const char *fmt, va_list ap);
- #else
- #include <stdio.h>
- #include <stdarg.h>
- #define vsnprintf my_vsnprintf
- static int my_vsnprintf(char *str, size_t size, const char *format, va_list ap);
- #endif
- #include <ccan/asprintf/asprintf.c>
- #include <ccan/tap/tap.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdbool.h>
- static bool fail;
- #if HAVE_ASPRINTF
- #undef vasprintf
- static int my_vasprintf(char **strp, const char *fmt, va_list ap)
- {
- if (fail) {
- /* Set strp to crap. */
- *strp = (char *)(long)1;
- return -1;
- }
- return vasprintf(strp, fmt, ap);
- }
- #else
- #undef vsnprintf
- static int my_vsnprintf(char *str, size_t size, const char *format, va_list ap)
- {
- if (fail) {
- return -1;
- }
- return vsnprintf(str, size, format, ap);
- }
- #endif
- int main(void)
- {
- char *p, nul = '\0';
- int ret;
- /* This is how many tests you plan to run */
- plan_tests(8);
- fail = false;
- p = afmt("Test %u%cafter-nul", 1, nul);
- ok1(p);
- ok1(strlen(p) == strlen("Test 1"));
- ok1(memcmp(p, "Test 1\0after-nul\0", 17) == 0);
- free(p);
- ret = asprintf(&p, "Test %u%cafter-nul", 1, nul);
- ok1(ret == 16);
- ok1(p);
- ok1(strlen(p) == strlen("Test 1"));
- ok1(memcmp(p, "Test 1\0after-nul\0", 17) == 0);
- free(p);
- fail = true;
- p = afmt("Test %u%cafter-nul", 1, nul);
- ok1(p == NULL);
- /* This exits depending on whether all tests passed */
- return exit_status();
- }
|