value = charset_find_value (charset, &buf[startidx],
value = charset_find_value (&charset->char_table, &buf[startidx],
get_string (struct linereader *lr, const struct charset_t *charset){  int illegal_string = 0;  char *buf, *cp;  size_t bufact;  size_t bufmax = 56;  int ch;  buf = xmalloc (bufmax);  bufact = 0;  while ((ch = lr_getc (lr)) != '"' && ch != '\n' && ch != EOF)    if (ch != '<' || charset == NULL)      {	if (ch == lr->escape_char)	  {	    ch = lr_getc (lr);	    if (ch == '\n' || ch == EOF)	      break;	  }	ADDC (ch);      }    else      {	/* We have to get the value of the symbol.  */	unsigned int value;	size_t startidx = bufact;	if (!lr->translate_strings)	  ADDC ('<');	while ((ch = lr_getc (lr)) != '>' && ch != '\n' && ch != EOF)	  {	    if (ch == lr->escape_char)	      {		ch = lr_getc (lr);		if (ch == '\n' || ch == EOF)		  break;	      }	    ADDC (ch);	  }	if (ch == '\n' || ch == EOF)	  lr_error (lr, _("unterminated string"));	else	  if (!lr->translate_strings)	    ADDC ('>');	if (lr->translate_strings)	  {	    value = charset_find_value (charset, &buf[startidx],					bufact - startidx);	    if ((wchar_t) value == ILLEGAL_CHAR_VALUE)	      illegal_string = 1;	    bufact = startidx;	    if (bufmax - bufact < 8)	      {		bufmax *= 2;		buf = (char *) xrealloc (buf, bufmax);	      }	    cp = &buf[bufact];	    if (encode_char (value, &cp))	      illegal_string = 1;	    bufact = cp - buf;	  }      }  /* Catch errors with trailing escape character.  */  if (bufact > 0 && buf[bufact - 1] == lr->escape_char      && (bufact == 1 || buf[bufact - 2] != lr->escape_char))    {      lr_error (lr, _("illegal escape sequence at end of string"));      --bufact;    }  else if (ch == '\n' || ch == EOF)    lr_error (lr, _("unterminated string"));  /* Terminate string if necessary.  */  if (lr->translate_strings)    {      cp = &buf[bufact];      if (encode_char (0, &cp))	illegal_string = 1;      bufact = cp - buf;    }  else    ADDC ('\0');  lr->token.tok = tok_string;  if (illegal_string)    {      free (buf);      lr->token.val.str.start = NULL;      lr->token.val.str.len = 0;    }  else    {      buf = xrealloc (buf, bufact + 1);      lr->token.val.str.start = buf;      lr->token.val.str.len = bufact;    }  return &lr->token;}