value = charset_find_value (charset, code->val.str.start, code->val.str.len);
value = charset_find_value (&charset->char_table, code->val.str.start, code->val.str.len);
collate_weight_bsymbol (struct linereader *lr, struct localedef_t *locale,			struct token *code, struct charset_t *charset){  struct locale_collate_t *collate = locale->categories[LC_COLLATE].collate;  unsigned int here_weight;  wchar_t value;  void *tmp;  assert (code->tok == tok_bsymbol);  value = charset_find_value (charset, code->val.str.start, code->val.str.len);  if (value != ILLEGAL_CHAR_VALUE)    {      element_t *runp;      if (find_entry (&collate->result, &value, sizeof (wchar_t),		      (void *)&runp) < 0)	runp = NULL;      while (runp != NULL	     && (runp->name[0] != value || runp->name[1] != L'\0'))	runp = runp->next;      here_weight = runp == NULL ? 0 : runp->this_weight;    }  else if (find_entry (&collate->elements, code->val.str.start,		       code->val.str.len, &tmp) >= 0)    {      element_t *runp = (element_t *) tmp;      here_weight = runp->this_weight;    }  else if (find_entry (&collate->symbols, code->val.str.start,		       code->val.str.len, &tmp) >= 0)    {      here_weight = (unsigned int) tmp;    }  else    {      if (verbose)	lr_error (lr, _("unknown symbol `%.*s': line ignored"),		  (int) code->val.str.len, code->val.str.start);      lr_ignore_rest (lr, 0);      return -1;    }  /* When we currently work on a collation symbol we do not expect any     weight.  */  if (collate->kind == symbol)    {      lr_error (lr, _("\specification of sorting weight for collation symbol does not make sense"));      lr_ignore_rest (lr, 0);      return -1;    }  /* Add to the current collection of weights.  */  if (collate->nweight >= collate->nweight_max)    {      collate->nweight_max *= 2;      collate->weight = (unsigned int *) xrealloc (collate->weight,						   collate->nweight_max);    }  /* If the weight is currently not known, we remember to patch the     resulting tables.  */  if (here_weight == 0)    {      patch_t *newp;      newp = (patch_t *) obstack_alloc (&collate->element_mem,					sizeof (patch_t));      newp->fname = lr->fname;      newp->lineno = lr->lineno;      newp->token = (const char *) obstack_copy0 (&collate->element_mem,						  code->val.str.start,						  code->val.str.len);      newp->where.idx = collate->nweight++;      newp->next = collate->current_patch;      collate->current_patch = newp;    }  else    collate->weight[collate->nweight++] = here_weight;  ++collate->weight_cnt[collate->weight_idx];  return 0;}