X11
X11 是否仍然對應用程序資源字元串有硬編碼限制?
xterm(1) 手冊頁指出:
由於X 庫中對資源總數的硬編碼限制(最多 400 個),當啟用寬字元支持和 luit 時,會省略 256 色的資源。如果只允許部分資源,除了不一致的行為之外,確定確切的截止是困難的,如果資源數量超過限制,X 庫往往會崩潰。調色板仍然初始化為相同的預設值,並且可以通過控制序列進行修改。
我懷疑這些資訊已經過時了。任何人都可以確認這是(或不再是)像 X.Org 1.12 (X11R7) 這樣的當代 X 實現的問題嗎?如果它仍然存在,那麼有人需要在 X11 來源中的什麼地方尋找這個限制?
#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的更新日誌說:
- 修改 256 色和 88 色的初始化,使 16 色以外的顏色通常不是 X 資源。這可以解決 Xt 中的硬編碼限制,當 256 色和 luit 都配置時會破壞 xterm(Noah Friedman 報告)。
報告提到
luit
,但除此之外,還有其他資源用於 UTF-8、語言環境等。有時需要進行一些調整,例如Patch #191 - 2004/6/6 - XFree86 4.4.99.7
- 修復 ifdef 的 for
OPT_COLOR_RES2
以便在更新檔 #188 中引入的假資源表為空時不會被編譯。這恰好適用於 gcc(Joel Konkle-Parker 的報告)。
- 通過啟用 88 色模型的資源來改進更新檔 #188 的解決方法。
- 在 xterm 手冊頁中記錄了資源 color16 到 color255 的有限可用性,如更新檔 #188 (Ubuntu #438850) 中所述。
該程序仍然可以使用 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) 種顏色資源沒有被使用。