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