Craig A. Berry wrote:

On Jan 27, 2009, at 8:43 AM, John Malmberg wrote:

It turns out that with a simple optimization, the int_flex_stat() and int_flex_lstat() will not be used.

This is also a side effect of dealing with that the CRTL sees "foo bar" and "foobar" as the same file in the default mode, and Perl sees them as different files.

+#if defined(PERL_IMPLICIT_CONTEXT)
+        /* If the context is null, this will access violate */
+        /* and stat() has so many issues we will may need to use this */
+        /* routine in places where we do not have a thread context */
+ /* In those cases we usually do not care about the time stamps */
+        if (aTHX != NULL) {
+#endif
+        time((time_t *)&statbufp->st_mtime);
+#if defined(PERL_IMPLICIT_CONTEXT)
+        } else {
+            statbufp->st_mtime = 0;
+        }
+#endif


A better way to fix this is in Perl_my_time with something like:

--- vms/vms.c;-0        2009-01-28 18:32:55 -0600
+++ vms/vms.c   2009-01-28 18:58:30 -0600
@@ -11995,9 +11995,17 @@ time_t Perl_my_time(pTHX_ time_t *timep)
   when = time(NULL);
 # ifdef VMSISH_TIME
 # ifdef RTL_USES_UTC
-  if (VMSISH_TIME) when = _toloc(when);
+  if (
+#  if defined(PERL_IMPLICIT_CONTEXT)
+      my_perl &&
+#  endif
+      VMSISH_TIME) when = _toloc(when);
 # else
-  if (!VMSISH_TIME) when = _toutc(when);
+  if (
+#  if defined(PERL_IMPLICIT_CONTEXT)
+      my_perl &&
+#  endif
+      !VMSISH_TIME) when = _toutc(when);
 # endif
 # endif
   if (timep != NULL) *timep = when;

The place where it's checking Perl context is when it's looking at the vmsish bits of $^H.

I can do that. I did not see any other places where the time wrapper is called with a null thread context, so it seems simpler to just avoid calling it when simulating stat() for NLAO:

-John
wb8...@gmail.com
Personal Opinion Only

Reply via email to