X11にはまだアプリケーションリソース文字列にハードコードされた制限がありますか?

X11にはまだアプリケーションリソース文字列にハードコードされた制限がありますか?

xterm(1) のマニュアルページには次のように指定されています。

なぜならXライブラリの総リソース数に対するハードコーディングされた制限(最大400個)、ワイド文字のサポート、およびluitが有効な場合、256色のリソースは省略されます。一貫性のない動作に加えて、一部のリソースしか許可されていないと、正確なカットオフを決定するのが難しく、リソース数が制限を超えるとXライブラリがクラッシュする傾向があります。パレットはまだ同じデフォルト値に初期化され、制御シーケンスを介して変更できます。

この情報は古いようです。 X.Org 1.12(X11R7)のような最新のX実装では、これが問題であるか(またはもはや問題ではない)ことを確認できる人はいますか?この制限がまだ存在する場合、X11ソースコードでこれを見つける必要がある人は誰ですか?

ベストアンサー1

どういう意味ですか?xorg/lib/libXt/Resource.c

#define MAXRESOURCES  400

後で同じファイル:

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

Xorg開発者はアプリケーションがほとんどないため、これを変更する可能性はありません。できるあまりにも多くのリソースを使用してください。

xtermの元の256色スキーム(1999年)各色に別々のリソースを割り当てます。

変更ログパッチ #188 - 2004/5/12 - XFree86 4.4.99.6説明する:

  • 16を超える色は通常、Xリソースではないように256色と88色の初期化を変更します。これは、256の色と色の両方が構成されているときにxtermを損傷するXtのハードコーディングされた制限を解決します(Noah Friedmanによる報告)。

レポートにはこれが記載されていますが、luitそれ以外にUTF-8、ロケールなどの他のリソースもあります。時にはいくつかの調整が必要です。パッチ #191 - 2004/6/6 - XFree86 4.4.99.7

  • OPT_COLOR_RES2パッチ#188で導入された偽のリソーステーブルが空のときにコンパイルされないようにifdefを変更します。これはgccで動作することです(Joel Konkle-Parkerによる報告)。

そしてパッチ #250 - 2009/10/13:

  • 88色モデルのリソースを有効にして、パッチ#188の回避策を改善しました。
  • color16からcolor255までのリソースの制限された可用性は、パッチ#188(Ubuntu#438850)で説明されているように、xtermのマンページに文書化されています。

このプログラムはまだ256の色リソース(UTF-8なし)を使用して構築できますが、今はその頻度が減少します。

健全性チェックと同様に、xtermには次のブロックがあります(デバッグ時にオン)。

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

トレースログの表示

VTInitialize wnew 0xb98a90, 232 / 400 resource

したがって、追加の240(256-16)カラーリソースを使用しないため、即時リソースの枯渇のリスクはありません。

おすすめ記事