This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
parts/inc/uv: Comments only
[perl5.git] / dist / Devel-PPPort / parts / inc / snprintf
CommitLineData
f2ab5a41
MHM
1################################################################################
2##
b2049988 3## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
f2ab5a41
MHM
4## Version 2.x, Copyright (C) 2001, Paul Marquess.
5## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
6##
7## This program is free software; you can redistribute it and/or
8## modify it under the same terms as Perl itself.
9##
10################################################################################
11
12=provides
13
14my_snprintf
15
16=implementation
17
18#if !defined(my_snprintf)
19#if { NEED my_snprintf }
20
21int
22my_snprintf(char *buffer, const Size_t len, const char *format, ...)
23{
24 dTHX;
25 int retval;
26 va_list ap;
27 va_start(ap, format);
28#ifdef HAS_VSNPRINTF
29 retval = vsnprintf(buffer, len, format, ap);
30#else
31 retval = vsprintf(buffer, format, ap);
32#endif
33 va_end(ap);
c01be2ce 34 if (retval < 0 || (len > 0 && (Size_t)retval >= len))
b2049988 35 Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
f2ab5a41
MHM
36 return retval;
37}
38
39#endif
40#endif
41
42=xsinit
43
44#define NEED_my_snprintf
45
46=xsubs
47
48void
49my_snprintf()
b2049988
MHM
50 PREINIT:
51 char buf[128];
52 int len;
53 PPCODE:
54 len = my_snprintf(buf, sizeof buf, "foo%s%d", "bar", 42);
55 mXPUSHi(len);
56 mXPUSHs(newSVpv(buf, 0));
57 XSRETURN(2);
f2ab5a41
MHM
58
59=tests plan => 2
60
61my($l, $s) = Devel::PPPort::my_snprintf();
62ok($l, 8);
63ok($s, "foobar42");