2017-10-17 41 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