More -Wall silencing from Michael Schwern and Jarkko Hietaniemi.
[p5sagit/p5-mst-13.2.git] / perlio.c
index 13ef151..0b3f1a1 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -120,7 +120,7 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd, int imode, int
       {
        fd = PerlLIO_open3(name,imode,perm);
        if (fd >= 0)
-        return PerlIO_fdopen(fd,mode+1);
+        return PerlIO_fdopen(fd,(char *)mode+1);
       }
      else if (old)
       {
@@ -134,7 +134,7 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd, int imode, int
   }
  else
   {
-   return PerlIO_fdopen(fd,mode);
+   return PerlIO_fdopen(fd,(char *)mode);
   }
  return NULL;
 }
@@ -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;
@@ -401,7 +408,6 @@ perlio_mg_set(pTHX_ SV *sv, MAGIC *mg)
    IO *io = GvIOn((GV *)SvRV(sv));
    PerlIO *ifp = IoIFP(io);
    PerlIO *ofp = IoOFP(io);
-   AV *av = (AV *) mg->mg_obj;
    Perl_warn(aTHX_ "set %"SVf" %p %p %p",sv,io,ifp,ofp);
   }
  return 0;
@@ -415,7 +421,6 @@ perlio_mg_get(pTHX_ SV *sv, MAGIC *mg)
    IO *io = GvIOn((GV *)SvRV(sv));
    PerlIO *ifp = IoIFP(io);
    PerlIO *ofp = IoOFP(io);
-   AV *av = (AV *) mg->mg_obj;
    Perl_warn(aTHX_ "get %"SVf" %p %p %p",sv,io,ifp,ofp);
   }
  return 0;
@@ -451,9 +456,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);
@@ -732,7 +737,6 @@ PerlIORaw_pushed(PerlIO *f, const char *mode, SV *arg)
  /* Pop back to bottom layer */
  if (f && *f)
   {
-   int code = 0;
    PerlIO_flush(f);
    while (!(PerlIOBase(f)->tab->kind & PERLIO_K_RAW))
     {
@@ -807,7 +811,7 @@ PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int mode, const char *names)
   {
    PerlIO *top = f;
    PerlIOl *l;
-   while (l = *top)
+   while ((l = *top))
     {
      if (PerlIOBase(top)->tab == &PerlIO_crlf)
       {
@@ -1009,7 +1013,7 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd, int imode, int
   {
    AV *layera;
    IV n;
-   PerlIO_funcs *tab;
+   PerlIO_funcs *tab = NULL;
    if (f && *f)
     {
      /* This is "reopen" - it is not tested as perl does not use it yet */
@@ -1556,8 +1560,10 @@ IV
 PerlIOBase_pushed(PerlIO *f, const char *mode, SV *arg)
 {
  PerlIOl *l = PerlIOBase(f);
+#if 0
  const char *omode = mode;
  char temp[8];
+#endif
  PerlIO_funcs *tab = PerlIOBase(f)->tab;
  l->flags  &= ~(PERLIO_F_CANREAD|PERLIO_F_CANWRITE|
                 PERLIO_F_TRUNCATE|PERLIO_F_APPEND);
@@ -1646,7 +1652,9 @@ PerlIOBase_read(PerlIO *f, void *vbuf, Size_t count)
    while (count > 0)
     {
      SSize_t avail = PerlIO_get_cnt(f);
-     SSize_t take  = (count < avail) ? count : avail;
+     SSize_t take = 0;
+     if (avail > 0)
+       take = (count < avail) ? count : avail;
      if (take > 0)
       {
        STDCHAR *ptr = PerlIO_get_ptr(f);
@@ -1924,7 +1932,6 @@ Off_t
 PerlIOUnix_tell(PerlIO *f)
 {
  dTHX;
- Off_t posn = PerlLIO_lseek(PerlIOSelf(f,PerlIOUnix)->fd,0,SEEK_CUR);
  return PerlLIO_lseek(PerlIOSelf(f,PerlIOUnix)->fd,0,SEEK_CUR);
 }
 
@@ -2187,13 +2194,13 @@ IV
 PerlIOStdio_close(PerlIO *f)
 {
  dTHX;
-#ifdef HAS_SOCKS5_INIT
+#ifdef SOCKS5_VERSION_NAME
  int optval;
  Sock_size_t optlen = sizeof(int);
 #endif
  FILE *stdio = PerlIOSelf(f,PerlIOStdio)->stdio;
  return(
-#ifdef HAS_SOCKS5_INIT
+#ifdef SOCKS5_VERSION_NAME
    (getsockopt(PerlIO_fileno(f), SOL_SOCKET, SO_TYPE, (void *)&optval, &optlen) < 0) ?
        PerlSIO_fclose(stdio) :
        close(PerlIO_fileno(f))
@@ -2482,7 +2489,7 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, AV *layers, IV n, const char *mode, int
    f = (*tab->Open)(aTHX_ tab, layers, n-2, mode,fd,imode,perm,NULL,narg,args);
    if (f)
     {
-     PerlIOBuf *b = PerlIOSelf(PerlIO_push(aTHX_ f,self,mode,PerlIOArg),PerlIOBuf);
+     PerlIO_push(aTHX_ f,self,mode,PerlIOArg);
      fd = PerlIO_fileno(f);
 #if O_BINARY != O_TEXT
      /* do something about failing setmode()? --jhi */
@@ -3303,7 +3310,6 @@ PerlIOMmap_map(PerlIO *f)
 {
  dTHX;
  PerlIOMmap *m = PerlIOSelf(f,PerlIOMmap);
- PerlIOBuf  *b = &m->base;
  IV flags = PerlIOBase(f)->flags;
  IV code  = 0;
  if (m->len)
@@ -3594,6 +3600,8 @@ PerlIO_funcs PerlIO_mmap = {
 void
 PerlIO_init(void)
 {
+ dTHX;
+ call_atexit(PerlIO_cleanup_layers, NULL);
  if (!_perlio)
   {
 #ifndef WIN32
@@ -3645,8 +3653,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;
 }