void mc_add_keyword (unichar *usz, int rid, const char *grp, rc_uint_type nv, unichar *sv) { mc_keyword *p, *c, *n; size_t len = unichar_len (usz); c = keyword_top; p = NULL; while (c != NULL) { if (c->len > len) break; if (c->len == len) { int e = memcmp (usz, c->usz, len * sizeof (unichar)); if (e < 0) break; if (! e) { if (! strcmp (grp, "keyword") || strcmp (c->group_name, grp) != 0) fatal (_("Duplicate symbol entered into keyword list.")); c->rid = rid; c->nval = nv; c->sval = (!sv ? NULL : unichar_dup (sv)); if (! strcmp (grp, "language")) { const wind_language_t *lag = wind_find_language_by_id ((unsigned) nv); if (lag == NULL) fatal ("Language ident 0x%lx is not resolvable.\n", (long) nv); memcpy (&c->lang_info, lag, sizeof (*lag)); } return; } } c = (p = c)->next; } n = xmalloc (sizeof (mc_keyword)); n->next = c; n->len = len; n->group_name = grp; n->usz = usz; n->rid = rid; n->nval = nv; n->sval = (!sv ? NULL : unichar_dup (sv)); if (! strcmp (grp, "language")) { const wind_language_t *lag = wind_find_language_by_id ((unsigned) nv); if (lag == NULL) fatal ("Language ident 0x%lx is not resolvable.\n", (long) nv); memcpy (&n->lang_info, lag, sizeof (*lag)); } if (! p) keyword_top = n; else p->next = n; }
static int unichar_isascii (const unichar *u, rc_uint_type len) { rc_uint_type i; if ((bfd_signed_vma) len < 0) { if (u) len = (rc_uint_type) unichar_len (u); else len = 0; } for (i = 0; i < len; i++) if ((u[i] & 0xff80) != 0) return 0; return 1; }