Fix large-file macro usage in bits/statvfs.h
[kopensolaris-gnu/glibc.git] / libio / iogetline.c
index 9b49039..022a444 100644 (file)
@@ -1,27 +1,30 @@
-/* Copyright (C) 1993, 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU IO Library.
+/* Copyright (C) 1993,1997,1998,2000,2001,2002,2005
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-   This library is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
+   Lesser General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this library; see the file COPYING.  If not, write to
-   the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
-   MA 02111-1307, USA.
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.
 
-   As a special exception, if you link this library with files
-   compiled with a GNU compiler to produce an executable, this does
-   not cause the resulting executable to be covered by the GNU General
-   Public License.  This exception does not however invalidate any
-   other reasons why the executable file might be covered by the GNU
-   General Public License.  */
+   As a special exception, if you link the code in this file with
+   files compiled with a GNU compiler to produce an executable,
+   that does not cause the resulting executable to be covered by
+   the GNU Lesser General Public License.  This exception does not
+   however invalidate any other reasons why the executable file
+   might be covered by the GNU Lesser General Public License.
+   This exception applies to code released by its copyright holders
+   in files containing the exception.  */
 
 #include "libioP.h"
 #include <string.h>
@@ -36,8 +39,10 @@ _IO_getline (fp, buf, n, delim, extract_delim)
      int delim;
      int extract_delim;
 {
-  return _IO_getline_info (fp, buf, n, delim, extract_delim, (int *) 0);
+  return INTUSE(_IO_getline_info) (fp, buf, n, delim, extract_delim,
+                                  (int *) 0);
 }
+INTDEF(_IO_getline)
 
 /* Algorithm based on that used by Berkeley pre-4.4 fgets implementation.
 
@@ -59,7 +64,9 @@ _IO_getline_info (fp, buf, n, delim, extract_delim, eof)
   char *ptr = buf;
   if (eof != NULL)
     *eof = 0;
-  while (n != 0);
+  if (__builtin_expect (fp->_mode, -1) == 0)
+    _IO_fwide (fp, -1);
+  while (n != 0)
     {
       _IO_ssize_t len = fp->_IO_read_end - fp->_IO_read_ptr;
       if (len <= 0)
@@ -67,7 +74,8 @@ _IO_getline_info (fp, buf, n, delim, extract_delim, eof)
          int c = __uflow (fp);
          if (c == EOF)
            {
-             if (eof) *eof = c;
+             if (eof)
+               *eof = c;
              break;
            }
          if (c == delim)
@@ -75,41 +83,42 @@ _IO_getline_info (fp, buf, n, delim, extract_delim, eof)
              if (extract_delim > 0)
                *ptr++ = c;
              else if (extract_delim < 0)
-               _IO_sputbackc (fp, c);
-             return ptr - buf;
+               INTUSE(_IO_sputbackc) (fp, c);
              if (extract_delim > 0)
                ++len;
+             return ptr - buf;
            }
          *ptr++ = c;
          n--;
        }
-       else
-         {
-           char *t;
-           if ((_IO_size_t) len >= n)
-             len = n;
-           t = (char *) memchr ((void *) fp->_IO_read_ptr, delim, len);
-           if (t != NULL)
-             {
-               _IO_size_t old_len = ptr-buf;
-               len = t - fp->_IO_read_ptr;
-               if (extract_delim >= 0)
-                 {
-                   ++t;
-                   if (extract_delim > 0)
-                     ++len;
-                 }
-               memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
-               fp->_IO_read_ptr = t;
-               return old_len + len;
-             }
-           memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
-           fp->_IO_read_ptr += len;
-           ptr += len;
-           n -= len;
-         }
+      else
+       {
+         char *t;
+         if ((_IO_size_t) len >= n)
+           len = n;
+         t = (char *) memchr ((void *) fp->_IO_read_ptr, delim, len);
+         if (t != NULL)
+           {
+             _IO_size_t old_len = ptr-buf;
+             len = t - fp->_IO_read_ptr;
+             if (extract_delim >= 0)
+               {
+                 ++t;
+                 if (extract_delim > 0)
+                   ++len;
+               }
+             memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
+             fp->_IO_read_ptr = t;
+             return old_len + len;
+           }
+         memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
+         fp->_IO_read_ptr += len;
+         ptr += len;
+         n -= len;
+       }
     }
   return ptr - buf;
 }
+INTDEF(_IO_getline_info)
 
 #endif /* Defined _LIBC || !_G_HAVE_IO_GETLINE_INFO */