Diff for /src/lib/libc/stdio/freopen.c between versions 1.6 and 1.7

version 1.6, 2005/07/23 20:23:06 version 1.7, 2005/11/20 11:07:30
Line 64  freopen(const char *file, const char *mo Line 64  freopen(const char *file, const char *mo
         int dflags, flags, isopen, oflags, sverrno, wantfd;          int dflags, flags, isopen, oflags, sverrno, wantfd;
   
         if ((flags = __sflags(mode, &oflags)) == 0) {          if ((flags = __sflags(mode, &oflags)) == 0) {
                (void) fclose(fp);                fclose(fp);
                 return (NULL);                  return (NULL);
         }          }
   
Line 143  freopen(const char *file, const char *mo Line 143  freopen(const char *file, const char *mo
         } else {          } else {
                 /* flush the stream; ANSI doesn't require this. */                  /* flush the stream; ANSI doesn't require this. */
                 if (fp->pub._flags & __SWR)                  if (fp->pub._flags & __SWR)
                        (void) __sflush(fp);                        __sflush(fp);
                 /* if close is NULL, closing is a no-op, hence pointless */                  /* if close is NULL, closing is a no-op, hence pointless */
                 isopen = fp->_close != NULL;                  isopen = fp->_close != NULL;
                 if ((wantfd = fp->pub._fileno) < 0 && isopen) {                  if ((wantfd = fp->pub._fileno) < 0 && isopen) {
                        (void) (*fp->_close)(fp->_cookie);                        (*fp->_close)(fp->_cookie);
                         isopen = 0;                          isopen = 0;
                 }                  }
         }          }
Line 157  freopen(const char *file, const char *mo Line 157  freopen(const char *file, const char *mo
         if (f < 0 && isopen) {          if (f < 0 && isopen) {
                 /* If out of fd's close the old one and try again. */                  /* If out of fd's close the old one and try again. */
                 if (errno == ENFILE || errno == EMFILE) {                  if (errno == ENFILE || errno == EMFILE) {
                        (void) (*fp->_close)(fp->_cookie);                        (*fp->_close)(fp->_cookie);
                         isopen = 0;                          isopen = 0;
                         f = _open(file, oflags, DEFFILEMODE);                          f = _open(file, oflags, DEFFILEMODE);
                 }                  }
Line 171  finish: Line 171  finish:
          * of any setbuffer calls, but stdio has always done this before.           * of any setbuffer calls, but stdio has always done this before.
          */           */
         if (isopen)          if (isopen)
                (void) (*fp->_close)(fp->_cookie);                (*fp->_close)(fp->_cookie);
         if (fp->pub._flags & __SMBF)          if (fp->pub._flags & __SMBF)
                 free((char *)fp->_bf._base);                  free((char *)fp->_bf._base);
         fp->pub._w = 0;          fp->pub._w = 0;
Line 201  finish: Line 201  finish:
          */           */
         if (wantfd >= 0 && f != wantfd) {          if (wantfd >= 0 && f != wantfd) {
                 if (_dup2(f, wantfd) >= 0) {                  if (_dup2(f, wantfd) >= 0) {
                        (void)_close(f);                        _close(f);
                         f = wantfd;                          f = wantfd;
                 }                  }
         }          }

Removed from v.1.6  
changed lines
  Added in v.1.7