O X11 ainda tem um limite codificado para as strings de recurso de aplicativo?

1

Os estados da página de manual do xterm (1):

Due to a hardcoded limit in the X libraries on the total number of resources (to 400), the resources for 256-colors are omitted when wide-character support and luit are enabled. Besides inconsistent behavior if only part of the resources were allowed, determining the exact cutoff is difficult, and the X libraries tend to crash if the number of resources exceeds the limit. The color palette is still initialized to the same default values, and can be modified via control sequences.

Eu suspeito que esta informação é datada. Alguém pode confirmar que isso é (ou não é mais) um problema para uma implementação X contemporânea como o X.Org 1.12 (X11R7)? Onde nas fontes do X11 alguém precisaria procurar por esse limite, se ele ainda existe?

    
por Jens 26.12.2014 / 22:39

1 resposta

2

Você está se referindo a xorg / lib / libXt / Resource.c

#define MAXRESOURCES  400

usado posteriormente no mesmo arquivo :

} else if (num_resources >= MAXRESOURCES) {
    XtAppWarningMsg(XtWidgetToApplicationContext(widget),
    "invalidResourceCount","getResources",XtCXtToolkitError,
          "too many resources",
      (String *)NULL, (Cardinal *)NULL);
return NULL;

É improvável que os desenvolvedores do Xorg mudem isso porque poucos aplicativos poderiam usar muitos recursos.

O esquema original para 256 cores no xterm (em 1999 ) atribuiu um recurso separado para cada cor.

O changelog do Patch # 188 - 2004/5/12 - XFree86 4.4.99.6 diz:

  • modify initialization of 256- and 88-colors so that colors beyond 16 are normally not X resources. This works around a hard-coded limit in Xt which breaks xterm when 256-colors and luit are both configured (report by Noah Friedman).

O relatório mencionou luit , mas junto com isso, havia outros recursos para UTF-8, localidade, etc. Algum ajuste é necessário ocasionalmente, por exemplo, Correção # 191 - 2004/6/6 - XFree86 4.4.99.7

  • fix ifdef's for OPT_COLOR_RES2 so that the fake resource table introduced in patch #188 is not compiled if it is empty. This happened to work with gcc (report by Joel Konkle-Parker).

e Patch nº 250 - 2009/10/13 :

  • improve the workaround from patch #188 by enabling resources for the 88-color model.
  • document in xterm manpage the limited availability of resources color16 to color255 as noted in patch #188 (Ubuntu #438850).

O programa ainda pode ser construído com recursos de 256 cores (e sem UTF-8), mas isso é feito com menos frequência agora.

Assim como uma verificação de sanidade, o xterm tem esse fragmento (ativado ao depurar):

TRACE(("VTInitialize wnew %p, %d / %d resources\n",
       (void *) wnew, XtNumber(xterm_resources), MAXRESOURCES));
assert(XtNumber(xterm_resources) < MAXRESOURCES);

e o log de rastreamento mostra

VTInitialize wnew 0xb98a90, 232 / 400 resource

Portanto, não há risco imediato de ficar sem recursos, agora que os recursos extras de 240 (256-16) cores não são usados.

    
por 27.05.2016 / 03:25