Re: AIX and gcc (moving targets)
[p5sagit/p5-mst-13.2.git] / perlio.c
index ba932f3..b64524a 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -311,6 +311,13 @@ HV *PerlIO_layer_hv;
 AV *PerlIO_layer_av;
 
 void
+PerlIO_cleanup_layers(pTHXo_ void *data)
+{
+ PerlIO_layer_hv = Nullhv;
+ PerlIO_layer_av = Nullav;
+}
+
+void
 PerlIO_cleanup()
 {
  dTHX;
@@ -451,9 +458,9 @@ XS(XS_io_MODIFY_SCALAR_ATTRIBUTES)
  MAGIC *mg;
  int count = 0;
  int i;
- sv_magic(sv, (SV *)av, '~', NULL, 0);
+ sv_magic(sv, (SV *)av, PERL_MAGIC_ext, NULL, 0);
  SvRMAGICAL_off(sv);
- mg = mg_find(sv,'~');
+ mg = mg_find(sv, PERL_MAGIC_ext);
  mg->mg_virtual = &perlio_vtab;
  mg_magical(sv);
  Perl_warn(aTHX_ "attrib %"SVf,sv);
@@ -3596,6 +3603,8 @@ PerlIO_funcs PerlIO_mmap = {
 void
 PerlIO_init(void)
 {
+ dTHX;
+ call_atexit(PerlIO_cleanup_layers, NULL);
  if (!_perlio)
   {
 #ifndef WIN32
@@ -3647,8 +3656,14 @@ char *
 PerlIO_getname(PerlIO *f, char *buf)
 {
  dTHX;
+ char *name = NULL;
+#ifdef VMS
+ FILE *stdio = PerlIOSelf(f,PerlIOStdio)->stdio;
+ if (stdio) name = fgetname(stdio, buf);
+#else
  Perl_croak(aTHX_ "Don't know how to get file name");
- return NULL;
+#endif
+ return name;
 }