Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <limits.h>
- #ifndef INSANE_ASPRINTF_H
- #define INSANE_ASPRINTF_H
- #ifndef __cplusplus
- #include <stdarg.h>
- #else
- #include <cstdarg>
- extern "C"
- {
- #endif
- #define insane_free(ptr) { free(ptr); ptr = 0; }
- int vasprintf(char **strp, const char *fmt, va_list ap);
- int asprintf(char **strp, const char *fmt, ...);
- #ifdef __cplusplus
- }
- #endif
- #endif
- int vasprintf(char **strp, const char *fmt, va_list ap)
- {
- int r = -1, size = _vscprintf(fmt, ap);
- if ((size >= 0) && (size < INT_MAX))
- {
- *strp = (char *)malloc(size + 1); //+1 for null
- if (*strp)
- {
- r = vsnprintf(*strp, size + 1, fmt, ap); //+1 for null
- if ((r < 0) || (r > size))
- {
- insane_free(*strp);
- r = -1;
- }
- }
- }
- else { *strp = 0; }
- return(r);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement