summaryrefslogtreecommitdiff
path: root/vms
diff options
context:
space:
mode:
authorCraig A. Berry <craigberry@mac.com>2007-06-03 22:26:20 +0000
committerCraig A. Berry <craigberry@mac.com>2007-06-03 22:26:20 +0000
commit858aded60ee6734d89d26bf30a53506b3f77e784 (patch)
tree16ebcdad160d8f778ecad76cde0edfed3b302813 /vms
parent86f0d17ae7d22e132374646440ff37525d8d624b (diff)
downloadperl-858aded60ee6734d89d26bf30a53506b3f77e784.tar.gz
cando_by_name again: work harder to identify directories
for fileification, plus a nit missed in #31326. p4raw-id: //depot/perl@31331
Diffstat (limited to 'vms')
-rw-r--r--vms/vms.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/vms/vms.c b/vms/vms.c
index 0476c444c9..ec8ecfdbc2 100644
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -10937,6 +10937,7 @@ Perl_cando_by_name_int
struct itmlst_3 usrprolst[2] = {{sizeof curprv, CHP$_PRIV, &curprv, &retlen},
{0,0,0,0}};
struct dsc$descriptor_s usrprodsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
+ Stat_t st;
static int profile_context = -1;
if (!fname || !*fname) return FALSE;
@@ -10968,12 +10969,16 @@ Perl_cando_by_name_int
strcpy(vmsname,fname);
}
- /* sys$check_access needs a file spec, not a directory spec */
+ /* sys$check_access needs a file spec, not a directory spec.
+ * Don't use flex_stat here, as that depends on thread context
+ * having been initialized, and we may get here during startup.
+ */
retlen = namdsc.dsc$w_length = strlen(vmsname);
if (vmsname[retlen-1] == ']'
|| vmsname[retlen-1] == '>'
- || vmsname[retlen-1] == ':') {
+ || vmsname[retlen-1] == ':'
+ || (!stat(vmsname, (stat_t *)&st) && S_ISDIR(st.st_mode))) {
if (!do_fileify_dirspec(vmsname,fileified,1,NULL)) {
PerlMem_free(fileified);
@@ -10982,6 +10987,9 @@ Perl_cando_by_name_int
}
fname = fileified;
}
+ else {
+ fname = vmsname;
+ }
retlen = namdsc.dsc$w_length = strlen(fname);
namdsc.dsc$a_pointer = (char *)fname;