Date: Tue, 2 Sep 2008 09:16:46 GMT From: Konrad Jankowski <konrad@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 149054 for review Message-ID: <200809020916.m829GkTm054646@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=149054 Change 149054 by konrad@vspredator on 2008/09/02 09:15:58 Throw out all the endianness dance. I was making using mmap impossible. Also, minor changes to the struct __collate_st_info. Affected files ... .. //depot/projects/soc2008/konrad_collation/colldef.apple/collate.h#8 edit .. //depot/projects/soc2008/konrad_collation/colldef.apple/parse.y#10 edit Differences ... ==== //depot/projects/soc2008/konrad_collation/colldef.apple/collate.h#8 (text+ko) ==== @@ -63,36 +63,31 @@ #define IGNORE_EQUIV_CLASS 1 +struct weight_map_struct +{ + unsigned int v:4; +}; + +#define COLL_WEIGHTS_REAL (COLL_WEIGHTS_MAX * 4) +struct __collate_st_char_pri { + struct weight_map_struct map[COLL_WEIGHTS_MAX]; + __int32_t pri[COLL_WEIGHTS_REAL]; +}; + struct __collate_st_info { __uint8_t directive[COLL_WEIGHTS_MAX]; __uint8_t flags; -#if _BYTE_ORDER == _LITTLE_ENDIAN - unsigned int directive_count:4; unsigned int chain_max_len:4; -#else - unsigned int chain_max_len:4; unsigned int directive_count:4; -#endif - __int32_t undef_pri[COLL_WEIGHTS_MAX]; + struct __collate_st_char_pri undef_pri; __int32_t subst_count[COLL_WEIGHTS_MAX]; __int32_t chain_count; __int32_t large_pri_count; }; -struct weight_map_struct -{ - unsigned int v:4; -}; - -#define COLL_WEIGHTS_REAL (COLL_WEIGHTS_MAX * 4) -struct __collate_st_char_pri { - struct weight_map_struct map[COLL_WEIGHTS_MAX]; - __int32_t pri[COLL_WEIGHTS_REAL]; -}; struct __collate_st_chain_pri { - struct weight_map_struct map[COLL_WEIGHTS_MAX]; + struct __collate_st_char_pri pri; wchar_t str[STR_LEN]; - __int32_t pri[COLL_WEIGHTS_MAX]; }; struct __collate_st_large_char_pri { __int32_t val; @@ -124,15 +119,12 @@ wchar_t *__collate_wcsdup(const wchar_t *); wchar_t *__collate_substitute(const wchar_t *, int); int __collate_load_tables(const char *); -void __collate_lookup_l(const wchar_t *, int *, int *, int *); -void __collate_lookup_which(const wchar_t *, int *, int *, int); void __collate_xfrm(const wchar_t *, wchar_t **); int __collate_range_cmp(wchar_t, wchar_t); size_t __collate_collating_symbol(wchar_t *, size_t, const char *, size_t, mbstate_t *); int __collate_equiv_class(const char *, size_t, mbstate_t *); size_t __collate_equiv_match(int, wchar_t *, size_t, wchar_t, const char *, size_t, mbstate_t *, size_t *); -#else /* !__LIBC__ */ -void __collate_lookup(const unsigned char *, int *, int *, int *); +struct __collate_st_char_pri *__collate_lookup(const wchar_t *, int *); #endif /* __LIBC__ */ #ifdef COLLATE_DEBUG void __collate_print_tables(void); ==== //depot/projects/soc2008/konrad_collation/colldef.apple/parse.y#10 (text+ko) ==== @@ -119,7 +119,8 @@ #ifdef COLLATE_DEBUG int debug; #endif -struct __collate_st_info info = {{DIRECTIVE_FORWARD, DIRECTIVE_FORWARD}, 0, 0, 0, {PRI_UNDEFINED, PRI_UNDEFINED}, {PRI_UNDEFINED}, 0, 0}; +struct __collate_st_info info = {{DIRECTIVE_FORWARD, DIRECTIVE_FORWARD}, 0, + 0, 0, {{{0}, {1}, {2}, {3}}, {PRI_UNDEFINED, PRI_UNDEFINED}}, {PRI_UNDEFINED}, 0, 0}; int directive_count = COLL_WEIGHTS_MAX; @@ -151,7 +152,8 @@ struct __collate_st_chain_pri *t, *v; int flags, i, len; - if ((__collate_chain_pri_table = (struct __collate_st_chain_pri *)malloc(nchain * sizeof(struct __collate_st_chain_pri))) == NULL) + if ((__collate_chain_pri_table = (struct __collate_st_chain_pri *) + malloc(nchain * sizeof(struct __collate_st_chain_pri))) == NULL) err(1, "chain malloc"); flags = R_FIRST; t = __collate_chain_pri_table; @@ -166,7 +168,8 @@ } if (chaindb->seq(chaindb, &key, &val, flags) == 0) err(1, "More in chaindb after retrieving %d", nchain); - qsort(__collate_chain_pri_table, nchain, sizeof(struct __collate_st_chain_pri), chainpricompar); + qsort(__collate_chain_pri_table, nchain, sizeof(struct __collate_st_chain_pri), + chainpricompar); } for(z = 0; z < directive_count; z++) { if (nsubst[z] > 0) { @@ -176,7 +179,8 @@ int flags, i, j; int32_t cval; - if ((__collate_substitute_table[z] = (struct __collate_st_subst *)calloc(nsubst[z], sizeof(struct __collate_st_subst))) == NULL) + if ((__collate_substitute_table[z] = (struct __collate_st_subst *) + calloc(nsubst[z], sizeof(struct __collate_st_subst))) == NULL) err(1, "__collate_substitute_table[%d] calloc", z); flags = R_FIRST; t = __collate_substitute_table[z]; @@ -188,7 +192,7 @@ * need it for sorting */ t->val = cval; for(wp = (wchar_t *)val.data, tp = t->str, j = STR_LEN; *wp && j-- > 0;) - *tp++ = htonl(*wp++); + *tp++ = *wp++; t++; flags = R_NEXT; } @@ -217,7 +221,7 @@ * need it for sorting */ t->val = cval; for(z = 0; z < COLL_WEIGHTS_REAL; z++) - t->pri.pri[z] = htonl(p->pri[z]); + t->pri.pri[z] = p->pri[z]; for (z = 0; z < directive_count; z++) t->pri.map[z].v = p->map[z].v; t++; @@ -228,11 +232,11 @@ qsort(__collate_large_char_pri_table, nlargemap, sizeof(struct __collate_st_large_char_pri), charpricompar); } - if (info.undef_pri[0] == PRI_UNDEFINED) { + if (info.undef_pri.pri[0] == PRI_UNDEFINED) { int i; - info.undef_pri[0] = prim_pri; + info.undef_pri.pri[0] = prim_pri; for(i = 1; i < directive_count; i++) - info.undef_pri[i] = -prim_pri; + info.undef_pri.pri[i] = -prim_pri; } if (localedef) { @@ -249,14 +253,18 @@ struct __collate_st_char_pri *p = haspri(v->u.wc); if (!p || p->pri[0] == PRI_UNDEFINED) - warnx("<%s> was not defined", showwcs((const wchar_t *)key.data, key.size / sizeof(wchar_t))); + warnx("<%s> was not defined", + showwcs((const wchar_t *)key.data, + key.size / sizeof(wchar_t))); break; } case SYMBOL_CHAIN: { struct __collate_st_chain_pri *p = getchain(v->u.str, EXISTS); - if (p->pri[0] == PRI_UNDEFINED) - warnx("<%s> was not defined", showwcs((const wchar_t *)key.data, key.size / sizeof(wchar_t))); + if (p->pri.pri[0] == PRI_UNDEFINED) + warnx("<%s> was not defined", + showwcs((const wchar_t *)key.data, + key.size / sizeof(wchar_t))); break; } } @@ -268,12 +276,17 @@ for (ch = 1; ch < UCHAR_MAX + 1; ch++) { for(z = 0; z < directive_count; z++) if (__collate_char_pri_table[ch].pri[z] == PRI_UNDEFINED) - __collate_char_pri_table[ch].pri[z] = (info.undef_pri[z] >= 0) ? info.undef_pri[z] : (ch - info.undef_pri[z]); + __collate_char_pri_table[ch].pri[z] = + (info.undef_pri.pri[z] >= 0) ? info.undef_pri.pri[z] : + (ch - info.undef_pri.pri[z]); } for (ch = 0; ch < nlargemap; ch++) { for(z = 0; z < directive_count; z++) if (__collate_large_char_pri_table[ch].pri.pri[z] == PRI_UNDEFINED) - __collate_large_char_pri_table[ch].pri.pri[z] = (info.undef_pri[z] >= 0) ? info.undef_pri[z] : (__collate_large_char_pri_table[ch].val - info.undef_pri[z]); + __collate_large_char_pri_table[ch].pri.pri[z] = + (info.undef_pri.pri[z] >= 0) ? info.undef_pri.pri[z] : + (__collate_large_char_pri_table[ch].val - + info.undef_pri.pri[z]); } } else { int ch, substed, ordered; @@ -324,29 +337,10 @@ err(EX_IOERR, "IO error writting collate version to destination file %s", out_file); -#if _BYTE_ORDER == _LITTLE_ENDIAN - for(z = 0; z < directive_count; z++) { - info.undef_pri[z] = htonl(info.undef_pri[z]); - info.subst_count[z] = htonl(info.subst_count[z]); - } - info.chain_count = htonl(info.chain_count); - info.large_pri_count = htonl(info.large_pri_count); -#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ if (fwrite(&info, sizeof(info), 1, fp) != 1) err(EX_IOERR, "IO error writting collate info to destination file %s", out_file); -#if _BYTE_ORDER == _LITTLE_ENDIAN - { - int i, z; - struct __collate_st_char_pri *p = __collate_char_pri_table; - - for(i = UCHAR_MAX + 1; i-- > 0; p++) { - for(z = 0; z < COLL_WEIGHTS_REAL; z++) - p->pri[z] = htonl(p->pri[z]); - } - } -#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ if (fwrite(__collate_char_pri_table, sizeof(__collate_char_pri_table), 1, fp) != 1) err(EX_IOERR, @@ -354,34 +348,14 @@ out_file); for(z = 0; z < directive_count; z++) { if (nsubst[z] > 0) { -#if _BYTE_ORDER == _LITTLE_ENDIAN - struct __collate_st_subst *t = __collate_substitute_table[z]; - int i; - - for(i = nsubst[z]; i > 0; i--) { - t->val = htonl(t->val); - t++; - } -#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ - if ((int)fwrite(__collate_substitute_table[z], sizeof(struct __collate_st_subst), nsubst[z], fp) != nsubst[z]) + if ((int)fwrite(__collate_substitute_table[z], + sizeof(struct __collate_st_subst), nsubst[z], fp) != nsubst[z]) err(EX_IOERR, "IO error writting large substprim table %d to destination file %s", z, out_file); } } if (nchain > 0) { -#if _BYTE_ORDER == _LITTLE_ENDIAN - int i, j, z; - struct __collate_st_chain_pri *p = __collate_chain_pri_table; - wchar_t *w; - - for(i = nchain; i-- > 0; p++) { - for(j = STR_LEN, w = p->str; *w && j-- > 0; w++) - *w = htonl(*w); - for(z = 0; z < directive_count; z++) - p->pri[z] = htonl(p->pri[z]); - } -#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ if (fwrite(__collate_chain_pri_table, sizeof(*__collate_chain_pri_table), nchain, fp) != (size_t)nchain) @@ -391,14 +365,6 @@ } if (nlargemap > 0) { -#if _BYTE_ORDER == _LITTLE_ENDIAN - struct __collate_st_large_char_pri *t = __collate_large_char_pri_table; - int i; - for(i = 0; i < nlargemap; i++) { - t->val = htonl(t->val); - t++; - } -#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ if ((int)fwrite(__collate_large_char_pri_table, sizeof(struct __collate_st_large_char_pri), nlargemap, fp) != nlargemap) err(EX_IOERR, "IO error writting large pri tables to destination file %s", @@ -759,24 +725,24 @@ case SYMBOL_CHAIN: case SYMBOL_IGNORE: case SYMBOL_SYMBOL: - if (p->pri[i] != PRI_UNDEFINED) + if (p->pri.pri[i] != PRI_UNDEFINED) yyerror("Chain %s previously defined", showwcs(s->u.str, STR_LEN)); - p->pri[i] = weight_table[i].val; + p->pri.pri[i] = weight_table[i].val; break; case SYMBOL_STRING : if (wcsncmp(s->u.str, weight_table[i].u.str, STR_LEN) != 0) yyerror("Chain/string mismatch"); - if (p->pri[i] != PRI_UNDEFINED) + if (p->pri.pri[i] != PRI_UNDEFINED) yyerror("Chain %s previously defined", showwcs(s->u.str, STR_LEN)); /* negative value mean don't substitute * the chain, but it is in an * equivalence class */ - p->pri[i] = -weight_table[i].val; + p->pri.pri[i] = -weight_table[i].val; } } - memcpy(p->map, weight_map, sizeof(p->map)); + memcpy(p->pri.map, weight_map, sizeof(p->pri.map)); break; } } @@ -839,12 +805,12 @@ case SYMBOL_CHAIN: case SYMBOL_IGNORE: case SYMBOL_SYMBOL: - info.undef_pri[i] = weight_table[i].val; + info.undef_pri.pri[i] = weight_table[i].val; break; case SYMBOL_ELLIPSIS : /* Negative values mean that the priority is * relative to the lexical value */ - info.undef_pri[i] = -sym_undefined.val; + info.undef_pri.pri[i] = -sym_undefined.val; prim_pri = UNDEFINED_PRI; break; case SYMBOL_STRING : @@ -984,7 +950,7 @@ } | chain { struct __collate_st_chain_pri *c = getchain(curr_chain, NOTEXISTS); - c->pri[0] = c->pri[1] = prim_pri; + c->pri.pri[0] = c->pri.pri[1] = prim_pri; sec_pri = ++prim_pri; } | CHAR RANGE CHAR { @@ -1017,10 +983,10 @@ } ; mixed_sub_list : mixed_sub_item - | mixed_sub_list ',' mixed_sub_item + | mixed_sub_list ',' mixed_sub_item ; sec_order_list : sec_sub_item - | sec_order_list ',' sec_sub_item + | sec_order_list ',' sec_sub_item ; mixed_sub_item : CHAR { struct __collate_st_char_pri *p = getpri($1); @@ -1047,8 +1013,8 @@ } | chain { struct __collate_st_chain_pri *c = getchain(curr_chain, NOTEXISTS); - c->pri[0] = prim_pri; - c->pri[1] = sec_pri; + c->pri.pri[0] = prim_pri; + c->pri.pri[1] = sec_pri; } sec_sub_item : CHAR { struct __collate_st_char_pri *p = getpri($1); @@ -1075,8 +1041,8 @@ } | chain { struct __collate_st_chain_pri *c = getchain(curr_chain, NOTEXISTS); - c->pri[0] = prim_pri; - c->pri[1] = sec_pri++; + c->pri.pri[0] = prim_pri; + c->pri.pri[1] = sec_pri++; } ; %% @@ -1222,7 +1188,7 @@ malloc(sizeof(struct __collate_st_chain_pri))) == NULL) err(1, "getchain: malloc"); for(z = 0; z < COLL_WEIGHTS_MAX; z++) - pn->pri[z] = PRI_UNDEFINED; + pn->pri.pri[z] = PRI_UNDEFINED; bzero(pn->str, sizeof(pn->str)); wcsncpy(pn->str, wcs, STR_LEN); val.data = &pn; @@ -1498,7 +1464,7 @@ } static void -collate_print_tables(void) +collate_print_tables(/*struct __locale_st_collate *collate_data*/) { int i, z, pos; @@ -1506,7 +1472,7 @@ info.directive[0], info.directive[1], info.flags, info.chain_max_len, info.directive_count, - info.undef_pri[0], info.undef_pri[1], + info.undef_pri.pri[0], info.undef_pri.pri[1], info.subst_count[0], info.subst_count[1], info.chain_count, info.large_pri_count); for(z = 0; z < info.directive_count; z++) { @@ -1529,7 +1495,7 @@ for (i = info.chain_count; i-- > 0; p2++) { printf("\t\"%s\" :", showwcs(p2->str, STR_LEN)); for(z = 0; z < info.directive_count; z++) - printf(" %d", p2->pri[z]); + printf(" %d", p2->pri.pri[z]); putchar('\n'); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809020916.m829GkTm054646>