2017-10-17 65 views
0

從XSetErrorHandler設置的錯誤處理程序中調用XGetErrorText是否安全?從X11錯誤處理程序中調用XGetErrorText()

E.g.

int errorHandler(Display *dpy, XErrorEvent *err) 
{ 
    char buf[BUFLEN]; 
    XGetErrorText(dpy, err->error_code, buf, BUFLEN); 
    printf("%s\n", buf) 
    return 0; 
} 

XSetErrorHandler(errorHandler); 

我這麼問是因爲該名男子頁說,你不應該調用,將產生的協議要求在顯示屏上的任何功能(直接或間接),但如果不XGetErrorText它沒有告訴。

回答

0

XGetErrorText不會產生任何服務器流量。它不應該:服務器不知道您的區域設置,並且不能提供本地化的消息。 XLib可以,而且的確可以與幾個本地的Xrm數據庫查找。

可以查看例如XGetErrorText的源代碼。 here。我們可以看到XGetErrorText調用XGetErrorDatabaseText,而後一個函數甚至沒有使用它的dpy參數。

每個X擴展都提供了它自己的錯誤事件到錯誤字符串轉換函數。該功能確實接受dpy參數,但是,就像XGetErrorDatabaseText不應該使用它一樣,也會生成任何服務器通信。此錯誤處理函數默認由XEXT_GENERATE_ERROR_STRINGhere生成,它僅封裝對XGetErrorDatabaseText的另一個調用。

+0

這回答我的問題。確實是Display *參數讓我感到驚訝。但除了從源頭上看(其中自我原則上是一件好事),我不知道如何弄清楚。 謝謝 – volker