- /************************************ asprintf.h ****************************************/ 
-   
- /* Sources: 
-     https://stackoverflow.com/questions/40159892/using-asprintf-on-  
-     https://stackoverflow.com/questions/4785381/replacement-for-ms-vscprintf-on-macos-linux 
- */ 
-   
- #include <stdio.h> /* needed for vsnprintf */ 
- #include <stdlib.h> /* needed for malloc-free */ 
- #include <stdarg.h> /* needed for va_list */ 
-   
- #ifndef _vscprintf  
- /* For some reason, MSVC fails to honour this #ifndef. */ 
- /* Hence the function was renamed to _vscprintf_so(). */ 
- int _vscprintf_so(const char * format, va_list pargs) { 
-     int retval; 
-     va_list argcopy; 
-     retval = vsnprintf(NULL, 0, format, argcopy); 
-     return retval; 
- } 
- #endif // _vscprintf 
-   
- #ifndef vasprintf 
- int vasprintf(char **strp, const char *fmt, va_list ap) { 
-     int len = _vscprintf_so(fmt, ap); 
-     if (len == -1) return -1; 
-     char *- str  = malloc((size_t)-  len  + 1);
 
-     if (!str) return -1; 
-     int r = vsnprintf(str, len + 1, fmt, ap); /* "secure" version of vsprintf */ 
-     if (- r  == -1) return free(- str ), -1;
 
-     *strp = str; 
-     return r; 
- } 
- #endif // vasprintf 
-   
- #ifndef asprintf 
- int asprintf(char *strp[], const char *fmt, ...) { 
-     va_list ap; 
-     int r = vasprintf(strp, fmt, ap); 
-     return r; 
- } 
- #endif // asprintf 
-   
- /************************************** main.c ******************************************/ 
-   
- #include <stdio.h> /* needed for puts */ 
- #include <stdlib.h> /* needed for free */ 
- // #include "asprintf.h" /* Commented out for online compilers. Uncomment in desktop compiler. */ 
-   
- int main(void) { 
-     char *b; 
-     asprintf(&b, "Mama %s is equal %d.", "John", 58); 
-     puts(- b ); /* Expected: "Mama John is equal 58." */
 
-     free(- b ); /* Important! */
 
-     return 0; 
- } 
				LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBhc3ByaW50Zi5oICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBTb3VyY2VzOgogICAgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDAxNTk4OTIvdXNpbmctYXNwcmludGYtb24tIAogICAgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDc4NTM4MS9yZXBsYWNlbWVudC1mb3ItbXMtdnNjcHJpbnRmLW9uLW1hY29zLWxpbnV4CiovCgojaW5jbHVkZSA8c3RkaW8uaD4gLyogbmVlZGVkIGZvciB2c25wcmludGYgKi8KI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBuZWVkZWQgZm9yIG1hbGxvYy1mcmVlICovCiNpbmNsdWRlIDxzdGRhcmcuaD4gLyogbmVlZGVkIGZvciB2YV9saXN0ICovCgojaWZuZGVmIF92c2NwcmludGYgCi8qIEZvciBzb21lIHJlYXNvbiwgTVNWQyBmYWlscyB0byBob25vdXIgdGhpcyAjaWZuZGVmLiAqLwovKiBIZW5jZSB0aGUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gX3ZzY3ByaW50Zl9zbygpLiAqLwppbnQgX3ZzY3ByaW50Zl9zbyhjb25zdCBjaGFyICogZm9ybWF0LCB2YV9saXN0IHBhcmdzKSB7CiAgICBpbnQgcmV0dmFsOwogICAgdmFfbGlzdCBhcmdjb3B5OwogICAgdmFfY29weShhcmdjb3B5LCBwYXJncyk7CiAgICByZXR2YWwgPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCBhcmdjb3B5KTsKICAgIHZhX2VuZChhcmdjb3B5KTsKICAgIHJldHVybiByZXR2YWw7Cn0KI2VuZGlmIC8vIF92c2NwcmludGYKCiNpZm5kZWYgdmFzcHJpbnRmCmludCB2YXNwcmludGYoY2hhciAqKnN0cnAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkgewogICAgaW50IGxlbiA9IF92c2NwcmludGZfc28oZm10LCBhcCk7CiAgICBpZiAobGVuID09IC0xKSByZXR1cm4gLTE7CiAgICBjaGFyICpzdHIgPSBtYWxsb2MoKHNpemVfdCkgbGVuICsgMSk7CiAgICBpZiAoIXN0cikgcmV0dXJuIC0xOwogICAgaW50IHIgPSB2c25wcmludGYoc3RyLCBsZW4gKyAxLCBmbXQsIGFwKTsgLyogInNlY3VyZSIgdmVyc2lvbiBvZiB2c3ByaW50ZiAqLwogICAgaWYgKHIgPT0gLTEpIHJldHVybiBmcmVlKHN0ciksIC0xOwogICAgKnN0cnAgPSBzdHI7CiAgICByZXR1cm4gcjsKfQojZW5kaWYgLy8gdmFzcHJpbnRmCgojaWZuZGVmIGFzcHJpbnRmCmludCBhc3ByaW50ZihjaGFyICpzdHJwW10sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CiAgICB2YV9saXN0IGFwOwogICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgICBpbnQgciA9IHZhc3ByaW50ZihzdHJwLCBmbXQsIGFwKTsKICAgIHZhX2VuZChhcCk7CiAgICByZXR1cm4gcjsKfQojZW5kaWYgLy8gYXNwcmludGYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBtYWluLmMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+IC8qIG5lZWRlZCBmb3IgcHV0cyAqLwojaW5jbHVkZSA8c3RkbGliLmg+IC8qIG5lZWRlZCBmb3IgZnJlZSAqLwovLyAjaW5jbHVkZSAiYXNwcmludGYuaCIgLyogQ29tbWVudGVkIG91dCBmb3Igb25saW5lIGNvbXBpbGVycy4gVW5jb21tZW50IGluIGRlc2t0b3AgY29tcGlsZXIuICovCgppbnQgbWFpbih2b2lkKSB7CiAgICBjaGFyICpiOwogICAgYXNwcmludGYoJmIsICJNYW1hICVzIGlzIGVxdWFsICVkLiIsICJKb2huIiwgNTgpOwogICAgcHV0cyhiKTsgLyogRXhwZWN0ZWQ6ICJNYW1hIEpvaG4gaXMgZXF1YWwgNTguIiAqLwogICAgZnJlZShiKTsgLyogSW1wb3J0YW50ISAqLwogICAgcmV0dXJuIDA7Cn0=