Advertisement
Guest User

Untitled

a guest
Jun 1st, 2022
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. /****************************************************************************/
  2. /* This code snippet has been released under the CC0 1.0 Universal license! */
  3. /****************************************************************************/
  4.  
  5. #define _CRT_SECURE_NO_WARNINGS /*stfu*/
  6. #include <stdio.h>
  7.  
  8. char *vasprintf(const char *const fmt, va_list ap)
  9. {
  10.     int result;
  11.     char *buffer;
  12.  
  13.     const int str_len = _vscprintf(fmt, ap);
  14.     if (str_len < 1)
  15.     {
  16.         return NULL;
  17.     }
  18.  
  19.     if (!(buffer = (char*) malloc(sizeof(char) * (((size_t)str_len) + 1U))))
  20.     {
  21.         return NULL;
  22.     }
  23.  
  24.     if ((result = _vsnprintf(buffer, ((size_t)str_len) + 1U, fmt, ap)) < 1)
  25.     {
  26.         free(buffer);
  27.         buffer = NULL;
  28.     }
  29.  
  30.     return buffer;
  31. }
  32.  
  33. char *asprintf(const char *const fmt, ...)
  34. {
  35.     char *buffer;
  36.  
  37.     va_list ap;
  38.     va_start(ap, fmt);
  39.  
  40.     buffer = vasprintf(fmt, ap);
  41.  
  42.     va_end(ap);
  43.     return buffer;
  44. }
  45.  
  46. wchar_t *vaswprintf(const wchar_t *const fmt, va_list ap)
  47. {
  48.     int result;
  49.     wchar_t *buffer;
  50.  
  51.     const int str_len = _vscwprintf(fmt, ap);
  52.     if (str_len < 1)
  53.     {
  54.         return NULL;
  55.     }
  56.  
  57.     if (!(buffer = (wchar_t*) malloc(sizeof(wchar_t) * (((size_t)str_len) + 1U))))
  58.     {
  59.         return NULL;
  60.     }
  61.  
  62.     if ((result = _vsnwprintf(buffer, ((size_t)str_len) + 1U, fmt, ap)) < 1)
  63.     {
  64.         free(buffer);
  65.         buffer = NULL;
  66.     }
  67.  
  68.     return buffer;
  69. }
  70.  
  71. wchar_t *aswprintf(const wchar_t *const fmt, ...)
  72. {
  73.     wchar_t *buffer;
  74.  
  75.     va_list ap;
  76.     va_start(ap, fmt);
  77.  
  78.     buffer = vaswprintf(fmt, ap);
  79.  
  80.     va_end(ap);
  81.     return buffer;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement