/* readtokens.c -- Functions for reading tokens from an input stream.
- Copyright (C) 1990-1991 Jim Meyering.
+ Copyright (C) 1990-1991, 1999, 2001, 2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Written by Jim Meyering. */
*/
#ifdef HAVE_CONFIG_H
-#include <config.h>
+# include <config.h>
#endif
#include <stdio.h>
#ifdef STDC_HEADERS
-#include <stdlib.h>
+# include <stdlib.h>
#endif
#if defined (STDC_HEADERS) || defined(HAVE_STRING_H)
-#include <string.h>
+# include <string.h>
/* An ANSI string.h and pre-ANSI memory.h might conflict. */
-#if !defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
-#include <memory.h>
-#endif /* not STDC_HEADERS and HAVE_MEMORY_H */
+# if !defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
+# include <memory.h>
+# endif /* not STDC_HEADERS and HAVE_MEMORY_H */
#else /* not STDC_HEADERS and not HAVE_STRING_H */
-#include <strings.h>
+# include <strings.h>
/* memory.h and strings.h conflict on some systems. */
#endif /* not STDC_HEADERS and not HAVE_STRING_H */
#include "readtokens.h"
+#include "unlocked-io.h"
#include "xalloc.h"
#define STREQ(a,b) ((a) == (b) || ((a) && (b) && *(a) == *(b) \
/* Initialize a tokenbuffer. */
void
-init_tokenbuffer (token_buffer *tokenbuffer)
+init_tokenbuffer (tokenbuffer)
+ token_buffer *tokenbuffer;
{
tokenbuffer->size = INITIAL_TOKEN_LENGTH;
- tokenbuffer->buffer = ((char *) xmalloc (INITIAL_TOKEN_LENGTH));
+ tokenbuffer->buffer = xmalloc (INITIAL_TOKEN_LENGTH);
}
/* Read a token from `stream' into `tokenbuffer'.
and on files that aren't newline-terminated. */
long
-readtoken (FILE *stream, const char *delim, int n_delim,
+readtoken (FILE *stream,
+ const char *delim,
+ int n_delim,
token_buffer *tokenbuffer)
{
char *p;
if (!same_delimiters)
{
const char *t;
+ unsigned int j;
saved_delim = delim;
- for (i = 0; i < sizeof (isdelim); i++)
- isdelim[i] = 0;
+ for (j = 0; j < sizeof (isdelim); j++)
+ isdelim[j] = 0;
for (t = delim; *t; t++)
- isdelim[(unsigned int) *t] = 1;
+ isdelim[(unsigned char) *t] = 1;
}
p = tokenbuffer->buffer;
%%% realloc() of `tokens' just before returning? */
int
-readtokens (FILE *stream, int projected_n_tokens,
- const char *delim, int n_delim,
- char ***tokens_out, long **token_lengths)
+readtokens (FILE *stream,
+ int projected_n_tokens,
+ const char *delim,
+ int n_delim,
+ char ***tokens_out,
+ long **token_lengths)
{
token_buffer tb, *token = &tb;
int token_length;
else
projected_n_tokens = 64;
sz = projected_n_tokens;
- tokens = (char **) xmalloc (sz * sizeof (char *));
- lengths = (long *) xmalloc (sz * sizeof (long));
+ tokens = xmalloc (sz * sizeof (char *));
+ lengths = xmalloc (sz * sizeof (long));
init_tokenbuffer (token);
for (;;)
if (n_tokens >= sz)
{
sz *= 2;
- tokens = (char **) xrealloc (tokens, sz * sizeof (char *));
- lengths = (long *) xrealloc (lengths, sz * sizeof (long));
+ tokens = xrealloc (tokens, sz * sizeof (char *));
+ lengths = xrealloc (lengths, sz * sizeof (long));
}
if (token_length < 0)
lengths[n_tokens] = -1;
break;
}
- tmp = (char *) xmalloc ((token_length + 1) * sizeof (char));
+ tmp = xmalloc ((token_length + 1) * sizeof (char));
lengths[n_tokens] = token_length;
tokens[n_tokens] = strncpy (tmp, token->buffer,
(unsigned) (token_length + 1));