On Thu, 09 Oct 1997 08:30:55 PDT, "Greg Chapman" wrote:
>I'm using Perl 5.004_02 under WIndows 95 (the latest binary distribution
>available on CPAN). The Win32::GetShortPathName function does not properly
>truncate the returned string when the short file name is shorter than the
>long name. Specifically, the returned string looks like:
><ShortFileName><NULL char><characters from the end of the long name (the
>original buffer)>.
Thanks for that report, and here's a patch.
p5p-msgid:
199710092229.SAA21556@aatma.engin.umich.edu
{
dXSARGS;
SV *shortpath;
+ DWORD len;
if(items != 1)
croak("usage: Win32::GetShortPathName($longPathName)");
shortpath = sv_mortalcopy(ST(0));
SvUPGRADE(shortpath, SVt_PV);
/* src == target is allowed */
- if (GetShortPathName(SvPVX(shortpath), SvPVX(shortpath), SvCUR(shortpath)))
+ do {
+ len = GetShortPathName(SvPVX(shortpath),
+ SvPVX(shortpath),
+ SvLEN(shortpath));
+ } while (len >= SvLEN(shortpath) && sv_grow(shortpath,len+1));
+ if (len) {
+ SvCUR_set(shortpath,len);
ST(0) = shortpath;
+ }
else
ST(0) = &sv_undef;
XSRETURN(1);