Back to index

tetex-bin  3.0
Defines | Functions
line.c File Reference
#include <kpathsea/config.h>
#include <kpathsea/line.h>

Go to the source code of this file.

Defines

#define BLOCK_SIZE   75

Functions

char *read_line P1C (FILE *, f)

Define Documentation

#define BLOCK_SIZE   75

Definition at line 23 of file line.c.


Function Documentation

char* read_line P1C ( FILE ,
f   
)

Definition at line 26 of file line.c.

{
  int c;
  unsigned limit = BLOCK_SIZE;
  unsigned loc = 0;
  char *line = (char*)xmalloc (limit);
  
  while ((c = getc (f)) != EOF && c != '\n' && c != '\r')
    {
      line[loc] = c;
      loc++;
      
      /* By testing after the assignment, we guarantee that we'll always
         have space for the null we append below.  We know we always
         have room for the first char, since we start with BLOCK_SIZE.  */
      if (loc == limit)
        {
          limit += BLOCK_SIZE;
          line = (char*)xrealloc (line, limit);
        }
    }
  
  /* If we read anything, return it.  This can't represent a last
     ``line'' which doesn't end in a newline, but so what.  */
  if (c != EOF)
    {
      /* Terminate the string.  We can't represent nulls in the file,
         either.  Again, it doesn't matter.  */
      line[loc] = 0;
      /* Absorb LF of a CRLF pair. */
      if (c == '\r') {
          c = getc (f);
          if (c != '\n')
              ungetc (c, f);
      }
    }
  else /* At end of file.  */
    {
      free (line);
      line = NULL;
    }

  return line;
}

Here is the call graph for this function: