1 #define PERL_NO_GET_CONTEXT
11 haiku_do_debugger(const char* format,...)
15 va_start(args, format);
16 my_vsnprintf(buffer, sizeof(buffer), format, args);
23 haiku_do_debug_printf(pTHX_ register SV *sv,
24 void (*printfFunc)(const char*,...))
30 if (SvTYPE(sv) == SVt_IV && SvIOK(sv)) {
31 assert(!SvGMAGICAL(sv));
33 (*printfFunc)("%"UVuf, (UV)SvUVX(sv));
35 (*printfFunc)("%"IVdf, (IV)SvIVX(sv));
40 /* Do this first to trigger any overloading. */
41 const char *tmps = SvPV_const(sv, len);
45 /* We don't modify the original scalar. */
46 tmpbuf = bytes_to_utf8((const U8*) tmps, &len);
47 tmps = (char *) tmpbuf;
51 (*printfFunc)("%.*s", (int)len, tmps);
56 XS(haiku_debug_printf)
64 Perl_croak(aTHX_ "usage: Haiku::debug_printf($format,...)");
68 if (SvTAINTED(MARK[1]))
69 TAINT_PROPER("debug_printf");
70 do_sprintf(sv, SP - MARK, MARK + 1);
72 haiku_do_debug_printf(sv, &debug_printf);
79 XS(haiku_ktrace_printf)
87 Perl_croak(aTHX_ "usage: Haiku::debug_printf($format,...)");
91 if (SvTAINTED(MARK[1]))
92 TAINT_PROPER("ktrace_printf");
93 do_sprintf(sv, SP - MARK, MARK + 1);
95 haiku_do_debug_printf(sv, &ktrace_printf);
110 Perl_croak(aTHX_ "usage: Haiku::debugger($format,...)");
114 if (SvTAINTED(MARK[1]))
115 TAINT_PROPER("debugger");
116 do_sprintf(sv, SP - MARK, MARK + 1);
118 haiku_do_debug_printf(sv, &haiku_do_debugger);
125 MODULE = Haiku PACKAGE = Haiku
131 char *file = __FILE__;
133 newXS("Haiku::debug_printf", haiku_debug_printf, file);
134 newXS("Haiku::ktrace_printf", haiku_ktrace_printf, file);
135 newXS("Haiku::debugger", haiku_debugger, file);