Blame parts/inc/snprintf

Packit 7d6a7d
################################################################################
Packit 7d6a7d
##
Packit 7d6a7d
##  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
Packit 7d6a7d
##  Version 2.x, Copyright (C) 2001, Paul Marquess.
Packit 7d6a7d
##  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
Packit 7d6a7d
##
Packit 7d6a7d
##  This program is free software; you can redistribute it and/or
Packit 7d6a7d
##  modify it under the same terms as Perl itself.
Packit 7d6a7d
##
Packit 7d6a7d
################################################################################
Packit 7d6a7d
Packit 7d6a7d
=provides
Packit 7d6a7d
Packit 7d6a7d
my_snprintf
Packit 7d6a7d
Packit 7d6a7d
=implementation
Packit 7d6a7d
Packit 7d6a7d
#if !defined(my_snprintf)
Packit 7d6a7d
#if { NEED my_snprintf }
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
my_snprintf(char *buffer, const Size_t len, const char *format, ...)
Packit 7d6a7d
{
Packit 7d6a7d
    dTHX;
Packit 7d6a7d
    int retval;
Packit 7d6a7d
    va_list ap;
Packit 7d6a7d
    va_start(ap, format);
Packit 7d6a7d
#ifdef HAS_VSNPRINTF
Packit 7d6a7d
    retval = vsnprintf(buffer, len, format, ap);
Packit 7d6a7d
#else
Packit 7d6a7d
    retval = vsprintf(buffer, format, ap);
Packit 7d6a7d
#endif
Packit 7d6a7d
    va_end(ap);
Packit 7d6a7d
    if (retval < 0 || (len > 0 && (Size_t)retval >= len))
Packit 7d6a7d
        Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
Packit 7d6a7d
    return retval;
Packit 7d6a7d
}
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
=xsinit
Packit 7d6a7d
Packit 7d6a7d
#define NEED_my_snprintf
Packit 7d6a7d
Packit 7d6a7d
=xsubs
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
my_snprintf()
Packit 7d6a7d
        PREINIT:
Packit 7d6a7d
                char buf[128];
Packit 7d6a7d
                int len;
Packit 7d6a7d
        PPCODE:
Packit 7d6a7d
                len = my_snprintf(buf, sizeof buf, "foo%s%d", "bar", 42);
Packit 7d6a7d
                mXPUSHi(len);
Packit 7d6a7d
                mXPUSHs(newSVpv(buf, 0));
Packit 7d6a7d
                XSRETURN(2);
Packit 7d6a7d
Packit 7d6a7d
=tests plan => 2
Packit 7d6a7d
Packit 7d6a7d
my($l, $s) = Devel::PPPort::my_snprintf();
Packit 7d6a7d
ok($l, 8);
Packit 7d6a7d
ok($s, "foobar42");