asprintf.h 587 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef ASPRINTF_H
  2. #define ASPRINTF_H
  3. #include <stdarg.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. static inline int vasprintf(char **strp, const char *fmt, va_list ap)
  7. {
  8. va_list cp;
  9. va_copy(cp, ap);
  10. int len = vsnprintf(NULL, 0, fmt, ap) + 1;
  11. if (len <= 0) {
  12. return -1;
  13. }
  14. *strp = malloc(len);
  15. if (*strp == NULL) {
  16. return -1;
  17. }
  18. int ret = vsnprintf(*strp, len, fmt, cp);
  19. va_end(cp);
  20. return ret;
  21. }
  22. static inline int asprintf(char **strp, const char *fmt, ...)
  23. {
  24. va_list ap;
  25. va_start(ap, fmt);
  26. int ret = vasprintf(strp, fmt, ap);
  27. va_end(ap);
  28. return ret;
  29. }
  30. #endif