|
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_strlcat
|
|
Packit |
7d6a7d |
my_strlcpy
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=implementation
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#if !defined(my_strlcat)
|
|
Packit |
7d6a7d |
#if { NEED my_strlcat }
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
Size_t
|
|
Packit |
7d6a7d |
my_strlcat(char *dst, const char *src, Size_t size)
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
Size_t used, length, copy;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
used = strlen(dst);
|
|
Packit |
7d6a7d |
length = strlen(src);
|
|
Packit |
7d6a7d |
if (size > 0 && used < size - 1) {
|
|
Packit |
7d6a7d |
copy = (length >= size - used) ? size - used - 1 : length;
|
|
Packit |
7d6a7d |
memcpy(dst + used, src, copy);
|
|
Packit |
7d6a7d |
dst[used + copy] = '\0';
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
return used + length;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#if !defined(my_strlcpy)
|
|
Packit |
7d6a7d |
#if { NEED my_strlcpy }
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
Size_t
|
|
Packit |
7d6a7d |
my_strlcpy(char *dst, const char *src, Size_t size)
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
Size_t length, copy;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
length = strlen(src);
|
|
Packit |
7d6a7d |
if (size > 0) {
|
|
Packit |
7d6a7d |
copy = (length >= size) ? size - 1 : length;
|
|
Packit |
7d6a7d |
memcpy(dst, src, copy);
|
|
Packit |
7d6a7d |
dst[copy] = '\0';
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
return length;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=xsinit
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#define NEED_my_strlcat
|
|
Packit |
7d6a7d |
#define NEED_my_strlcpy
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=xsubs
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
void
|
|
Packit |
7d6a7d |
my_strlfunc()
|
|
Packit |
7d6a7d |
PREINIT:
|
|
Packit |
7d6a7d |
char buf[8];
|
|
Packit |
7d6a7d |
int len;
|
|
Packit |
7d6a7d |
PPCODE:
|
|
Packit |
7d6a7d |
len = my_strlcpy(buf, "foo", sizeof(buf));
|
|
Packit |
7d6a7d |
mXPUSHi(len);
|
|
Packit |
7d6a7d |
mXPUSHs(newSVpv(buf, 0));
|
|
Packit |
7d6a7d |
len = my_strlcat(buf, "bar", sizeof(buf));
|
|
Packit |
7d6a7d |
mXPUSHi(len);
|
|
Packit |
7d6a7d |
mXPUSHs(newSVpv(buf, 0));
|
|
Packit |
7d6a7d |
len = my_strlcat(buf, "baz", sizeof(buf));
|
|
Packit |
7d6a7d |
mXPUSHi(len);
|
|
Packit |
7d6a7d |
mXPUSHs(newSVpv(buf, 0));
|
|
Packit |
7d6a7d |
len = my_strlcpy(buf, "1234567890", sizeof(buf));
|
|
Packit |
7d6a7d |
mXPUSHi(len);
|
|
Packit |
7d6a7d |
mXPUSHs(newSVpv(buf, 0));
|
|
Packit |
7d6a7d |
len = my_strlcpy(buf, "1234", sizeof(buf));
|
|
Packit |
7d6a7d |
mXPUSHi(len);
|
|
Packit |
7d6a7d |
mXPUSHs(newSVpv(buf, 0));
|
|
Packit |
7d6a7d |
len = my_strlcat(buf, "567890123456", sizeof(buf));
|
|
Packit |
7d6a7d |
mXPUSHi(len);
|
|
Packit |
7d6a7d |
mXPUSHs(newSVpv(buf, 0));
|
|
Packit |
7d6a7d |
XSRETURN(12);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=tests plan => 13
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my @e = (3, 'foo',
|
|
Packit |
7d6a7d |
6, 'foobar',
|
|
Packit |
7d6a7d |
9, 'foobarb',
|
|
Packit |
7d6a7d |
10, '1234567',
|
|
Packit |
7d6a7d |
4, '1234',
|
|
Packit |
7d6a7d |
16, '1234567',
|
|
Packit |
7d6a7d |
);
|
|
Packit |
7d6a7d |
my @r = Devel::PPPort::my_strlfunc();
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
ok(@e == @r);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for (0 .. $#e) {
|
|
Packit |
7d6a7d |
ok($r[$_], $e[$_]);
|
|
Packit |
7d6a7d |
}
|