static void my_debug_printf(char *fmt, ...) { char buffer[1024]; va_list args; va_start(args, fmt); erts_vsnprintf(buffer,1024,fmt,args); va_end(args); erts_fprintf(stderr,"%s\r\n",buffer); }
static void error(char* format, ...) { char sbuf[1024]; va_list ap; va_start(ap, format); erts_vsnprintf(sbuf, sizeof(sbuf), format, ap); va_end(ap); fprintf(stderr, "erlc: %s\n", sbuf); exit(1); }
static void print_cmp_test(int n, char *frmt, ...) { int res = -1; static char clib_buf[BUF_SIZE]; static unsigned char the_erts_buf[BUF_SIZE]; char *erts_buf = (char *) &the_erts_buf[FENCE_SIZE]; va_list args; if (outfile) { char *fp, *tp; va_start(args, frmt); if (n < 0) res = vsprintf(erts_buf, frmt, args); else { #ifdef HAVE_VSNPRINTF res = vsnprintf(erts_buf, (size_t) n, frmt, args); #else fail("No vsnprintf()"); #endif } va_end(args); ASSERT(res >= 0); fp = erts_buf; tp = clib_buf; while (*fp) { switch (*fp) { case '\a': *(tp++) = '\\'; *(tp++) = 'a'; break; case '\b': *(tp++) = '\\'; *(tp++) = 'b'; break; case '\f': *(tp++) = '\\'; *(tp++) = 'f'; break; case '\n': *(tp++) = '\\'; *(tp++) = 'n'; break; case '\r': *(tp++) = '\\'; *(tp++) = 'r'; break; case '\t': *(tp++) = '\\'; *(tp++) = 't'; break; case '\v': *(tp++) = '\\'; *(tp++) = 'v'; break; case '\"': *(tp++) = '\\'; *(tp++) = '\"'; break; case '\\': *(tp++) = '\\'; *(tp++) = '\\'; break; default: *(tp++) = *fp; break; } fp++; } *tp = '\0'; res = fprintf(outfile, "\t\"%s\",\n", clib_buf); ASSERT(res >= 0); } else { char *xres; va_start(args, frmt); if (n < 0) res = erts_vsprintf(erts_buf, frmt, args); else { int i; int chk_sz = 2*FENCE_SIZE + n; for (i = 0; i < chk_sz; i++) the_erts_buf[i] = 0xeb; res = erts_vsnprintf(erts_buf, (size_t) n, frmt, args); for (i = 0; i < chk_sz; i++) if ((((char *) &the_erts_buf[i]) < erts_buf || erts_buf + n <= ((char *) &the_erts_buf[i])) && the_erts_buf[i] != 0xeb) { int j; for (j = 0; j < chk_sz; j++) print(j ? ",%x(%d)" : "%x(%d)", (unsigned) the_erts_buf[j], j - FENCE_SIZE); print_eol(); fail("Garbage written out of bounds (%d,%d)", i - FENCE_SIZE, n); } } va_end(args); ASSERT(res >= 0); if (expected_result) { ASSERT(*expected_result); xres = *expected_result; expected_result++; } else { va_start(args, frmt); if (n < 0) res = vsprintf(clib_buf, frmt, args); else { #ifdef HAVE_VSNPRINTF res = vsnprintf(clib_buf, (size_t) n, frmt, args); #else fail("No vsnprintf()"); #endif } va_end(args); ASSERT(res >= 0); xres = clib_buf; } if (strcmp(xres, erts_buf) != 0) { print_line("expected result : \"%s\"", xres); print_line("erts_buf : \"%s\"", erts_buf); fail("\"%s\" != \"%s\" (format=\"%s\")", xres, erts_buf, frmt); } print_line("Checked format \"%s\" with result: \"%s\"", frmt, erts_buf); } }