Upgrade to CGI.pm-3.33. There are still differences between the
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / parts / inc / snprintf
CommitLineData
f2ab5a41 1################################################################################
2##
d2dacc4f 3## $Revision: 2 $
f2ab5a41 4## $Author: mhx $
d2dacc4f 5## $Date: 2007/01/02 12:32:28 +0100 $
f2ab5a41 6##
7################################################################################
8##
d2dacc4f 9## Version 3.x, Copyright (C) 2004-2007, Marcus Holland-Moritz.
f2ab5a41 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);
40 if (retval >= (int)len)
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);
61 XPUSHs(newSViv(len));
62 XPUSHs(newSVpv(buf, 0));
63 XSRETURN(2);
64
65=tests plan => 2
66
67my($l, $s) = Devel::PPPort::my_snprintf();
68ok($l, 8);
69ok($s, "foobar42");
70