在 2012年3月6日 下午12:16,Jiang Xin <worldhello.net@xxxxxxxxx> 写道: > > /* > * Make list of items easy for l10n translation. > * > * 1. Input list of items one by one through the 2nd argument, > * but leave the 1st argument as NULL. > * > * 2. Append the output joint string to strbuf from the 1st argument. > * > * According to the number of items input. The joint string maybe: > * > * a > * a and b > * a, b and c > * a, b, c and d > * > */ -#define MAX_L10N_LIST_ITEMS_COUNT 128 +#define MAX_L10N_LIST_ITEMS_COUNT 8 > void append_l10n_list_items(struct strbuf *ret, const char *item) > { > static const char **itemlist = NULL; > static int count = 0; > int i = 0; > > if (itemlist == NULL) > itemlist = xmalloc(MAX_L10N_LIST_ITEMS_COUNT * sizeof(char*)); + else if (count >= MAX_L10N_LIST_ITEMS_COUNT) + itemlist = xrealloc(itemlist, (count + MAX_L10N_LIST_ITEMS_COUNT) * sizeof(char*)); - if(item != NULL && count < MAX_L10N_LIST_ITEMS_COUNT ) + if (item != NULL) > itemlist[count++] = item; > > if (ret != NULL) { > if (count == 1) { > strbuf_addstr(ret, itemlist[0]); > } > else if (count == 2) { > strbuf_addf(ret, _("%s and %s"), itemlist[0], itemlist[1]); > } > else if (count > 2) { > strbuf_addf(ret, _("%s, "), itemlist[0]); > for (i=1; i<count-2; i++) { - strbuf_addstr(ret, itemlist[i]); - strbuf_addstr(ret, _(", ")); + strbuf_addf(ret, _("%s, %s"), itemlist[i], ""); > } > strbuf_addf(ret, _("%s and %s"), itemlist[count-2], > itemlist[count-1]); > } > free(itemlist); > itemlist = NULL; > count = 0; > } > } > > > ... > strbuf_addstr(&extra, " (")) > if (a) > append_l10n_list_items(NULL, _("msg a")); > if (b) > append_l10n_list_items(NULL, _("msg b")); > if (c) > append_l10n_list_items(NULL, _("msg c")); > > append_l10n_list_items(&extra, NULL); > ... -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html