rem: tokens[n_tokens] = strncpy (tmp, token->buffer, (unsigned) (token_length + 1));
add: tokens[n_tokens] = memcpy (tmp, token->buffer, token_length + 1);
context: 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;  char **tokens;  long *lengths;  int sz;  int n_tokens;  n_tokens = 0;  if (projected_n_tokens > 0)    projected_n_tokens++;	/* add one for trailing NULL pointer */  else    projected_n_tokens = 64;  sz = projected_n_tokens;  tokens = (char **) xmalloc (sz * sizeof (char *));  lengths = (long *) xmalloc (sz * sizeof (long));  init_tokenbuffer (token);  for (;;)    {      char *tmp;      token_length = readtoken (stream, delim, n_delim, token);      if (n_tokens >= sz)	{	  sz *= 2;	  tokens = (char **) xrealloc (tokens, sz * sizeof (char *));	  lengths = (long *) xrealloc (lengths, sz * sizeof (long));	}      if (token_length < 0)	{	  /* don't increment n_tokens for NULL entry */	  tokens[n_tokens] = NULL;	  lengths[n_tokens] = -1;	  break;	}      tmp = (char *) xmalloc ((token_length + 1) * sizeof (char));      lengths[n_tokens] = token_length;      tokens[n_tokens] = strncpy (tmp, token->buffer,				  (unsigned) (token_length + 1));      n_tokens++;    }  free (token->buffer);  *tokens_out = tokens;  if (token_lengths != NULL)    *token_lengths = lengths;  return n_tokens;}