summaryrefslogtreecommitdiffstats
path: root/usr.bin/localedef
diff options
context:
space:
mode:
authorbapt <bapt@FreeBSD.org>2015-08-08 22:57:17 +0000
committerbapt <bapt@FreeBSD.org>2015-08-08 22:57:17 +0000
commit5f9f8ced9140c58043ac92174e3fe6dcacffe9cd (patch)
tree3b405f97dabf9c03a1302f3aa324db8ffccaa542 /usr.bin/localedef
parent64b5feb0c7cd556c7535c49e403be61ae25fc9f4 (diff)
downloadFreeBSD-src-5f9f8ced9140c58043ac92174e3fe6dcacffe9cd.zip
FreeBSD-src-5f9f8ced9140c58043ac92174e3fe6dcacffe9cd.tar.gz
Convert localedef(1) from avl to RB trees
Diffstat (limited to 'usr.bin/localedef')
-rw-r--r--usr.bin/localedef/Makefile4
-rw-r--r--usr.bin/localedef/charmap.c37
-rw-r--r--usr.bin/localedef/collate.c164
-rw-r--r--usr.bin/localedef/ctype.c2
4 files changed, 107 insertions, 100 deletions
diff --git a/usr.bin/localedef/Makefile b/usr.bin/localedef/Makefile
index 93c0515..8ce5c4a 100644
--- a/usr.bin/localedef/Makefile
+++ b/usr.bin/localedef/Makefile
@@ -16,15 +16,11 @@ SRCS= charmap.c \
WARNS= 3
${SRCS:M*.c}: parser.h
parser.h: parser.y
-LIBADD= avl
IGNORE_PRAGMA= yes
-CFLAGS+= -DNEED_SOLARIS_BOOLEAN
CFLAGS+= -I. -I${.CURDIR}
CFLAGS+= -I${.CURDIR}/../../lib/libc/locale
CFLAGS+= -I${.CURDIR}/../../lib/libc/stdtime
-CFLAGS+= -I${.CURDIR}/../../sys/cddl/compat/opensolaris
-CFLAGS+= -I${.CURDIR}/../../sys/cddl/contrib/opensolaris/uts/common
.include <bsd.prog.mk>
diff --git a/usr.bin/localedef/charmap.c b/usr.bin/localedef/charmap.c
index 203008b..91a25bc 100644
--- a/usr.bin/localedef/charmap.c
+++ b/usr.bin/localedef/charmap.c
@@ -35,7 +35,7 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
-#include <sys/avl.h>
+#include <sys/tree.h>
#include <stdio.h>
#include <stdlib.h>
@@ -47,16 +47,22 @@ __FBSDID("$FreeBSD$");
#include "localedef.h"
#include "parser.h"
-static avl_tree_t cmap_sym;
-static avl_tree_t cmap_wc;
typedef struct charmap {
const char *name;
wchar_t wc;
- avl_node_t avl_sym;
- avl_node_t avl_wc;
+ RB_ENTRY(charmap) rb_sym;
+ RB_ENTRY(charmap) rb_wc;
} charmap_t;
+static int cmap_compare_sym(const void *n1, const void *n2);
+static int cmap_compare_wc(const void *n1, const void *n2);
+
+static RB_HEAD(cmap_sym, charmap) cmap_sym;
+static RB_HEAD(cmap_wc, charmap) cmap_wc;
+
+RB_GENERATE_STATIC(cmap_sym, charmap, rb_sym, cmap_compare_sym);
+RB_GENERATE_STATIC(cmap_wc, charmap, rb_wc, cmap_compare_wc);
/*
* Array of POSIX specific portable characters.
@@ -208,11 +214,9 @@ cmap_compare_wc(const void *n1, const void *n2)
void
init_charmap(void)
{
- avl_create(&cmap_sym, cmap_compare_sym, sizeof (charmap_t),
- offsetof(charmap_t, avl_sym));
+ RB_INIT(&cmap_sym);
- avl_create(&cmap_wc, cmap_compare_wc, sizeof (charmap_t),
- offsetof(charmap_t, avl_wc));
+ RB_INIT(&cmap_wc);
}
static void
@@ -220,7 +224,6 @@ add_charmap_impl(char *sym, wchar_t wc, int nodups)
{
charmap_t srch;
charmap_t *n = NULL;
- avl_index_t where;
srch.wc = wc;
srch.name = sym;
@@ -229,17 +232,17 @@ add_charmap_impl(char *sym, wchar_t wc, int nodups)
* also possibly insert the wide mapping, although note that there
* can only be one of these per wide character code.
*/
- if ((wc != -1) && ((avl_find(&cmap_wc, &srch, &where)) == NULL)) {
+ if ((wc != -1) && ((RB_FIND(cmap_wc, &cmap_wc, &srch)) == NULL)) {
if ((n = calloc(1, sizeof (*n))) == NULL) {
errf("out of memory");
return;
}
n->wc = wc;
- avl_insert(&cmap_wc, n, where);
+ RB_INSERT(cmap_wc, &cmap_wc, n);
}
if (sym) {
- if (avl_find(&cmap_sym, &srch, &where) != NULL) {
+ if (RB_FIND(cmap_sym, &cmap_sym, &srch) != NULL) {
if (nodups) {
errf("duplicate character definition");
}
@@ -252,7 +255,7 @@ add_charmap_impl(char *sym, wchar_t wc, int nodups)
n->wc = wc;
n->name = sym;
- avl_insert(&cmap_sym, n, where);
+ RB_INSERT(cmap_sym, &cmap_sym, n);
}
}
@@ -269,7 +272,7 @@ add_charmap_undefined(char *sym)
charmap_t *cm = NULL;
srch.name = sym;
- cm = avl_find(&cmap_sym, &srch, NULL);
+ cm = RB_FIND(cmap_sym, &cmap_sym, &srch);
if ((undefok == 0) && ((cm == NULL) || (cm->wc == -1))) {
warn("undefined symbol <%s>", sym);
@@ -345,7 +348,7 @@ lookup_charmap(const char *sym, wchar_t *wc)
charmap_t *n;
srch.name = sym;
- n = avl_find(&cmap_sym, &srch, NULL);
+ n = RB_FIND(cmap_sym, &cmap_sym, &srch);
if (n && n->wc != -1) {
if (wc)
*wc = n->wc;
@@ -360,5 +363,5 @@ check_charmap(wchar_t wc)
charmap_t srch;
srch.wc = wc;
- return (avl_find(&cmap_wc, &srch, NULL) ? 0 : -1);
+ return (RB_FIND(cmap_wc, &cmap_wc, &srch) ? 0 : -1);
}
diff --git a/usr.bin/localedef/collate.c b/usr.bin/localedef/collate.c
index 5a73cba..257a167 100644
--- a/usr.bin/localedef/collate.c
+++ b/usr.bin/localedef/collate.c
@@ -35,7 +35,7 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
-#include <sys/avl.h>
+#include <sys/tree.h>
#include <stdio.h>
#include <stddef.h>
@@ -100,7 +100,7 @@ __FBSDID("$FreeBSD$");
* The second pass walks over all the items in priority order, noting
* that they are used directly, and not just an indirect reference.
* This is done by creating a "weight" structure for the item. The
- * weights are stashed in an AVL tree sorted by relative "priority".
+ * weights are stashed in an RB tree sorted by relative "priority".
*
* The third pass walks over all the weight structures, in priority
* order, and assigns a new monotonically increasing (per sort level)
@@ -139,7 +139,7 @@ typedef enum {
typedef struct weight {
int32_t pri;
int opt;
- avl_node_t avl;
+ RB_ENTRY(weight) entry;
} weight_t;
typedef struct priority {
@@ -158,7 +158,7 @@ typedef struct priority {
struct collsym {
char *name;
int32_t ref;
- avl_node_t avl;
+ RB_ENTRY(collsym) entry;
};
/*
@@ -168,7 +168,7 @@ struct collsym {
typedef struct collundef {
char *name;
int32_t ref[COLL_WEIGHTS_MAX];
- avl_node_t avl;
+ RB_ENTRY(collundef) entry;
} collundef_t;
/*
@@ -181,8 +181,8 @@ struct collelem {
char *symbol;
wchar_t *expand;
int32_t ref[COLL_WEIGHTS_MAX];
- avl_node_t avl_bysymbol;
- avl_node_t avl_byexpand;
+ RB_ENTRY(collelem) rb_bysymbol;
+ RB_ENTRY(collelem) rb_byexpand;
};
/*
@@ -191,7 +191,7 @@ struct collelem {
typedef struct collchar {
wchar_t wc;
int32_t ref[COLL_WEIGHTS_MAX];
- avl_node_t avl;
+ RB_ENTRY(collchar) entry;
} collchar_t;
/*
@@ -200,21 +200,21 @@ typedef struct collchar {
* fully resolved priority for the key, because creation of
* substitutions creates a resolved priority at the same time.
*/
-typedef struct {
+typedef struct subst{
int32_t key;
int32_t ref[COLLATE_STR_LEN];
- avl_node_t avl;
- avl_node_t avl_ref;
+ RB_ENTRY(subst) entry;
+ RB_ENTRY(subst) entry_ref;
} subst_t;
-static avl_tree_t collsyms;
-static avl_tree_t collundefs;
-static avl_tree_t elem_by_symbol;
-static avl_tree_t elem_by_expand;
-static avl_tree_t collchars;
-static avl_tree_t substs[COLL_WEIGHTS_MAX];
-static avl_tree_t substs_ref[COLL_WEIGHTS_MAX];
-static avl_tree_t weights[COLL_WEIGHTS_MAX];
+static RB_HEAD(collsyms, collsym) collsyms;
+static RB_HEAD(collundefs, collundef) collundefs;
+static RB_HEAD(elem_by_symbol, collelem) elem_by_symbol;
+static RB_HEAD(elem_by_expand, collelem) elem_by_expand;
+static RB_HEAD(collchars, collchar) collchars;
+static RB_HEAD(substs, subst) substs[COLL_WEIGHTS_MAX];
+static RB_HEAD(substs_ref, subst) substs_ref[COLL_WEIGHTS_MAX];
+static RB_HEAD(weights, weight) weights[COLL_WEIGHTS_MAX];
static int32_t nweight[COLL_WEIGHTS_MAX];
/*
@@ -359,6 +359,8 @@ weight_compare(const void *n1, const void *n2)
return (k1 < k2 ? -1 : k1 > k2 ? 1 : 0);
}
+RB_GENERATE_STATIC(weights, weight, entry, weight_compare);
+
static int
collsym_compare(const void *n1, const void *n2)
{
@@ -370,6 +372,8 @@ collsym_compare(const void *n1, const void *n2)
return ((rv < 0) ? -1 : (rv > 0) ? 1 : 0);
}
+RB_GENERATE_STATIC(collsyms, collsym, entry, collsym_compare);
+
static int
collundef_compare(const void *n1, const void *n2)
{
@@ -381,6 +385,8 @@ collundef_compare(const void *n1, const void *n2)
return ((rv < 0) ? -1 : (rv > 0) ? 1 : 0);
}
+RB_GENERATE_STATIC(collundefs, collundef, entry, collundef_compare);
+
static int
element_compare_symbol(const void *n1, const void *n2)
{
@@ -392,6 +398,8 @@ element_compare_symbol(const void *n1, const void *n2)
return ((rv < 0) ? -1 : (rv > 0) ? 1 : 0);
}
+RB_GENERATE_STATIC(elem_by_symbol, collelem, rb_bysymbol, element_compare_symbol);
+
static int
element_compare_expand(const void *n1, const void *n2)
{
@@ -403,6 +411,8 @@ element_compare_expand(const void *n1, const void *n2)
return ((rv < 0) ? -1 : (rv > 0) ? 1 : 0);
}
+RB_GENERATE_STATIC(elem_by_expand, collelem, rb_byexpand, element_compare_expand);
+
static int
collchar_compare(const void *n1, const void *n2)
{
@@ -412,6 +422,8 @@ collchar_compare(const void *n1, const void *n2)
return (k1 < k2 ? -1 : k1 > k2 ? 1 : 0);
}
+RB_GENERATE_STATIC(collchars, collchar, entry, collchar_compare);
+
static int
subst_compare(const void *n1, const void *n2)
{
@@ -421,6 +433,8 @@ subst_compare(const void *n1, const void *n2)
return (k1 < k2 ? -1 : k1 > k2 ? 1 : 0);
}
+RB_GENERATE_STATIC(substs, subst, entry, subst_compare);
+
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"
@@ -435,6 +449,8 @@ subst_compare_ref(const void *n1, const void *n2)
return ((rv < 0) ? -1 : (rv > 0) ? 1 : 0);
}
+RB_GENERATE_STATIC(substs_ref, subst, entry_ref, subst_compare_ref);
+
#pragma GCC diagnostic pop
void
@@ -442,27 +458,20 @@ init_collate(void)
{
int i;
- avl_create(&collsyms, collsym_compare, sizeof (collsym_t),
- offsetof(collsym_t, avl));
+ RB_INIT(&collsyms);
- avl_create(&collundefs, collundef_compare, sizeof (collsym_t),
- offsetof(collundef_t, avl));
+ RB_INIT(&collundefs);
- avl_create(&elem_by_symbol, element_compare_symbol, sizeof (collelem_t),
- offsetof(collelem_t, avl_bysymbol));
- avl_create(&elem_by_expand, element_compare_expand, sizeof (collelem_t),
- offsetof(collelem_t, avl_byexpand));
+ RB_INIT(&elem_by_symbol);
- avl_create(&collchars, collchar_compare, sizeof (collchar_t),
- offsetof(collchar_t, avl));
+ RB_INIT(&elem_by_expand);
+
+ RB_INIT(&collchars);
for (i = 0; i < COLL_WEIGHTS_MAX; i++) {
- avl_create(&substs[i], subst_compare, sizeof (subst_t),
- offsetof(subst_t, avl));
- avl_create(&substs_ref[i], subst_compare_ref,
- sizeof (subst_t), offsetof(subst_t, avl_ref));
- avl_create(&weights[i], weight_compare, sizeof (weight_t),
- offsetof(weight_t, avl));
+ RB_INIT(&substs[i]);
+ RB_INIT(&substs_ref[i]);
+ RB_INIT(&weights[i]);
nweight[i] = 1;
}
@@ -485,7 +494,6 @@ void
define_collsym(char *name)
{
collsym_t *sym;
- avl_index_t where;
if ((sym = calloc(sizeof (*sym), 1)) == NULL) {
fprintf(stderr,"out of memory");
@@ -494,7 +502,7 @@ define_collsym(char *name)
sym->name = name;
sym->ref = new_pri();
- if (avl_find(&collsyms, sym, &where) != NULL) {
+ if (RB_FIND(collsyms, &collsyms, sym) != NULL) {
/*
* This should never happen because we are only called
* for undefined symbols.
@@ -502,7 +510,7 @@ define_collsym(char *name)
INTERR;
return;
}
- avl_insert(&collsyms, sym, where);
+ RB_INSERT(collsyms, &collsyms, sym);
}
collsym_t *
@@ -511,7 +519,7 @@ lookup_collsym(char *name)
collsym_t srch;
srch.name = name;
- return (avl_find(&collsyms, &srch, NULL));
+ return (RB_FIND(collsyms, &collsyms, &srch));
}
collelem_t *
@@ -520,7 +528,7 @@ lookup_collelem(char *symbol)
collelem_t srch;
srch.symbol = symbol;
- return (avl_find(&elem_by_symbol, &srch, NULL));
+ return (RB_FIND(elem_by_symbol, &elem_by_symbol, &srch));
}
static collundef_t *
@@ -528,11 +536,10 @@ get_collundef(char *name)
{
collundef_t srch;
collundef_t *ud;
- avl_index_t where;
int i;
srch.name = name;
- if ((ud = avl_find(&collundefs, &srch, &where)) == NULL) {
+ if ((ud = RB_FIND(collundefs, &collundefs, &srch)) == NULL) {
if (((ud = calloc(sizeof (*ud), 1)) == NULL) ||
((ud->name = strdup(name)) == NULL)) {
fprintf(stderr,"out of memory");
@@ -541,7 +548,7 @@ get_collundef(char *name)
for (i = 0; i < NUM_WT; i++) {
ud->ref[i] = new_pri();
}
- avl_insert(&collundefs, ud, where);
+ RB_INSERT(collundefs, &collundefs, ud);
}
add_charmap_undefined(name);
return (ud);
@@ -552,11 +559,10 @@ get_collchar(wchar_t wc, int create)
{
collchar_t srch;
collchar_t *cc;
- avl_index_t where;
int i;
srch.wc = wc;
- cc = avl_find(&collchars, &srch, &where);
+ cc = RB_FIND(collchars, &collchars, &srch);
if ((cc == NULL) && create) {
if ((cc = calloc(sizeof (*cc), 1)) == NULL) {
fprintf(stderr, "out of memory");
@@ -566,7 +572,7 @@ get_collchar(wchar_t wc, int create)
cc->ref[i] = new_pri();
}
cc->wc = wc;
- avl_insert(&collchars, cc, where);
+ RB_INSERT(collchars, &collchars, cc);
}
return (cc);
}
@@ -783,8 +789,6 @@ void
define_collelem(char *name, wchar_t *wcs)
{
collelem_t *e;
- avl_index_t where1;
- avl_index_t where2;
int i;
if (wcslen(wcs) >= COLLATE_STR_LEN) {
@@ -810,13 +814,13 @@ define_collelem(char *name, wchar_t *wcs)
}
/* A character sequence can only reduce to one element. */
- if ((avl_find(&elem_by_symbol, e, &where1) != NULL) ||
- (avl_find(&elem_by_expand, e, &where2) != NULL)) {
+ if ((RB_FIND(elem_by_symbol, &elem_by_symbol, e) != NULL) ||
+ (RB_FIND(elem_by_expand, &elem_by_expand, e) != NULL)) {
fprintf(stderr, "duplicate collating element definition");
return;
}
- avl_insert(&elem_by_symbol, e, where1);
- avl_insert(&elem_by_expand, e, where2);
+ RB_INSERT(elem_by_symbol, &elem_by_symbol, e);
+ RB_INSERT(elem_by_expand, &elem_by_expand, e);
}
void
@@ -915,7 +919,6 @@ add_order_subst(void)
{
subst_t srch;
subst_t *s;
- avl_index_t where;
int i;
(void) memset(&srch, 0, sizeof (srch));
@@ -923,7 +926,7 @@ add_order_subst(void)
srch.ref[i] = subst_weights[i];
subst_weights[i] = 0;
}
- s = avl_find(&substs_ref[curr_weight], &srch, &where);
+ s = RB_FIND(substs_ref, &substs_ref[curr_weight], &srch);
if (s == NULL) {
if ((s = calloc(sizeof (*s), 1)) == NULL) {
@@ -949,13 +952,13 @@ add_order_subst(void)
s->ref[i] = srch.ref[i];
}
- avl_insert(&substs_ref[curr_weight], s, where);
+ RB_INSERT(substs_ref, &substs_ref[curr_weight], s);
- if (avl_find(&substs[curr_weight], s, &where) != NULL) {
+ if (RB_FIND(substs, &substs[curr_weight], s) != NULL) {
INTERR;
return;
}
- avl_insert(&substs[curr_weight], s, where);
+ RB_INSERT(substs, &substs[curr_weight], s);
}
curr_subst = 0;
@@ -1020,7 +1023,6 @@ add_weight(int32_t ref, int pass)
{
weight_t srch;
weight_t *w;
- avl_index_t where;
srch.pri = resolve_pri(ref);
@@ -1032,7 +1034,7 @@ add_weight(int32_t ref, int pass)
if (srch.pri & COLLATE_SUBST_PRIORITY)
return;
- if (avl_find(&weights[pass], &srch, &where) != NULL)
+ if (RB_FIND(weights, &weights[pass], &srch) != NULL)
return;
if ((w = calloc(sizeof (*w), 1)) == NULL) {
@@ -1040,7 +1042,7 @@ add_weight(int32_t ref, int pass)
return;
}
w->pri = srch.pri;
- avl_insert(&weights[pass], w, where);
+ RB_INSERT(weights, &weights[pass], w);
}
void
@@ -1067,7 +1069,7 @@ get_weight(int32_t ref, int pass)
return (pri);
}
srch.pri = pri;
- if ((w = avl_find(&weights[pass], &srch, NULL)) == NULL) {
+ if ((w = RB_FIND(weights, &weights[pass], &srch)) == NULL) {
INTERR;
return (-1);
}
@@ -1088,6 +1090,14 @@ wsncpy(wchar_t *s1, const wchar_t *s2, size_t n)
return (os1);
}
+#define RB_NUMNODES(type, name, head, cnt) do { \
+ type *t; \
+ cnt = 0; \
+ RB_FOREACH(t, name, head) { \
+ cnt++; \
+ } \
+} while (0);
+
void
dump_collate(void)
{
@@ -1112,19 +1122,16 @@ dump_collate(void)
add_weight(pri_ignore, i);
}
for (i = 0; i < NUM_WT; i++) {
- for (sb = avl_first(&substs[i]); sb;
- sb = AVL_NEXT(&substs[i], sb)) {
+ RB_FOREACH(sb, substs, &substs[i]) {
for (j = 0; sb->ref[j]; j++) {
add_weight(sb->ref[j], i);
}
}
}
- for (ce = avl_first(&elem_by_expand);
- ce != NULL;
- ce = AVL_NEXT(&elem_by_expand, ce)) {
+ RB_FOREACH(ce, elem_by_expand, &elem_by_expand) {
add_weights(ce->ref);
}
- for (cc = avl_first(&collchars); cc; cc = AVL_NEXT(&collchars, cc)) {
+ RB_FOREACH(cc, collchars, &collchars) {
add_weights(cc->ref);
}
@@ -1135,8 +1142,7 @@ dump_collate(void)
*/
for (i = 0; i < NUM_WT; i++) {
weight_t *w;
- for (w = avl_first(&weights[i]); w;
- w = AVL_NEXT(&weights[i], w)) {
+ RB_FOREACH(w, weights, &weights[i]) {
w->opt = nweight[i];
nweight[i] += 1;
}
@@ -1190,14 +1196,14 @@ dump_collate(void)
*/
for (i = 0; i < NUM_WT; i++) {
collate_subst_t *st = NULL;
- n = collinfo.subst_count[i] = avl_numnodes(&substs[i]);
+ RB_NUMNODES(subst_t, substs, &substs[i], n);
+ collinfo.subst_count[i] = n;
if ((st = calloc(sizeof (collate_subst_t) * n, 1)) == NULL) {
fprintf(stderr, "out of memory");
return;
}
n = 0;
- for (sb = avl_first(&substs[i]); sb;
- sb = AVL_NEXT(&substs[i], sb)) {
+ RB_FOREACH(sb, substs, &substs[i]) {
if ((st[n].key = resolve_pri(sb->key)) < 0) {
/* by definition these resolve! */
INTERR;
@@ -1219,15 +1225,16 @@ dump_collate(void)
/*
* Chains, i.e. collating elements
*/
- collinfo.chain_count = avl_numnodes(&elem_by_expand);
+ RB_NUMNODES(collelem_t, elem_by_expand, &elem_by_expand,
+ collinfo.chain_count);
chain = calloc(sizeof (collate_chain_t), collinfo.chain_count);
if (chain == NULL) {
fprintf(stderr, "out of memory");
return;
}
- for (n = 0, ce = avl_first(&elem_by_expand);
- ce != NULL;
- ce = AVL_NEXT(&elem_by_expand, ce), n++) {
+ n = 0;
+ RB_FOREACH(ce, elem_by_expand, &elem_by_expand) {
+ n++;
(void) wsncpy(chain[n].str, ce->expand, COLLATE_STR_LEN);
for (i = 0; i < NUM_WT; i++) {
chain[n].pri[i] = get_weight(ce->ref[i], i);
@@ -1239,14 +1246,15 @@ dump_collate(void)
/*
* Large (> UCHAR_MAX) character priorities
*/
- large = calloc(sizeof (collate_large_t) * avl_numnodes(&collchars), 1);
+ RB_NUMNODES(collchar_t, collchars, &collchars, n);
+ large = calloc(sizeof (collate_large_t) * n, 1);
if (large == NULL) {
fprintf(stderr, "out of memory");
return;
}
i = 0;
- for (cc = avl_first(&collchars); cc; cc = AVL_NEXT(&collchars, cc)) {
+ RB_FOREACH(cc, collchars, &collchars) {
int undef = 0;
/* we already gathered those */
if (cc->wc <= UCHAR_MAX)
diff --git a/usr.bin/localedef/ctype.c b/usr.bin/localedef/ctype.c
index 4132a77..3081f80 100644
--- a/usr.bin/localedef/ctype.c
+++ b/usr.bin/localedef/ctype.c
@@ -79,7 +79,7 @@ typedef struct ctype_node {
RB_ENTRY(ctype_node) entry;
} ctype_node_t;
-RB_HEAD(ctypes, ctype_node) ctypes;
+static RB_HEAD(ctypes, ctype_node) ctypes;
RB_GENERATE_STATIC(ctypes, ctype_node, entry, ctype_compare);
static int
OpenPOWER on IntegriCloud