diff options
author | Craig A. Berry <craigberry@mac.com> | 2004-07-08 18:19:05 -0500 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2004-07-14 23:36:17 +0000 |
commit | 7892d5b6d6d616d3c0405e1ad2dc296a6a48f358 (patch) | |
tree | 348786a1ac62076318d22e139e419bfd06c00fc9 | |
parent | d6e8a19203a9e1ef15ec2b593c075d7c70ec05da (diff) | |
download | perl-7892d5b6d6d616d3c0405e1ad2dc296a6a48f358.tar.gz |
Integrate:
[ 23071]
Subject: [PATCH] prime_env_iter and zero-length values on VMS
From: "Craig A. Berry" <craigberry@mac.com>
Message-ID: <40EE1CB9.8030407@mac.com>
p4raw-link: @23071 on //depot/perl: ff79d39dc75833c4d7014282008680632389529f
p4raw-id: //depot/maint-5.8/perl@23110
p4raw-integrated: from //depot/perl@23087 'merge in' vms/vms.c
(@22544..)
-rw-r--r-- | vms/vms.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -695,7 +695,21 @@ prime_env_iter(void) continue; } PERL_HASH(hash,key,keylen); - sv = newSVpvn(cp2,cp1 - cp2 + 1); + + if (cp1 == cp2 && *cp2 == '.') { + /* A single dot usually means an unprintable character, such as a null + * to indicate a zero-length value. Get the actual value to make sure. + */ + char lnm[LNM$C_NAMLENGTH+1]; + char eqv[LNM$C_NAMLENGTH+1]; + strncpy(lnm, key, keylen); + int trnlen = vmstrnenv(lnm, eqv, 0, fildev, 0); + sv = newSVpvn(eqv, strlen(eqv)); + } + else { + sv = newSVpvn(cp2,cp1 - cp2 + 1); + } + SvTAINTED_on(sv); hv_store(envhv,key,keylen,sv,hash); hv_store(seenhv,key,keylen,&PL_sv_yes,hash); |