Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. #define ASPRINTF_DEFAULT_ALLOC_SIZE 256
  2. //#define ASPRINTF_REALLOC_IF_LOWER_DEFAULT_ALLOC
  3.  
  4. int asprintf( char** result, const char* format,... )
  5. {
  6. //#pragma GCC diagnostic push
  7. //#pragma GCC diagnostic ignored "-Wformat-security"
  8. uint r;
  9. va_list list;
  10. va_start( list, format );
  11. if( *result == NULL )
  12. *result = (char*) malloc( ASPRINTF_DEFAULT_ALLOC_SIZE );
  13. r = vsnprintf( *result, ASPRINTF_DEFAULT_ALLOC_SIZE, format, list );
  14. ++r;
  15. if( r > ASPRINTF_DEFAULT_ALLOC_SIZE )
  16. {
  17. free(*result);
  18. *result = (char*) malloc( r );
  19. va_start( list, format );
  20. r = vsnprintf( *result, r, format, list );
  21. }
  22. #ifdef ASPRINTF_REALLOC_IF_LOWER_DEFAULT_ALLOC
  23. else if( r < ASPRINTF_DEFAULT_ALLOC_SIZE )
  24. *result = realloc( *result, r );
  25. #endif
  26. va_end(list);
  27.  
  28. return r;
  29. //#pragma GCC diagnostic pop
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement