从XSetErrorHandler设置的错误处理程序调用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 :(得分:0)
XGetErrorText
不会生成任何服务器流量。它不应该:例如,服务器不知道您的语言环境,并且无法提供本地化消息。 XLib
可以,实际上可以使用几个本地Xrm数据库查找。
可以查看XGetErrorText
的源代码,例如here。我们可以看到XGetErrorText
调用XGetErrorDatabaseText
,而后一个函数甚至没有使用其dpy
参数。
每个X扩展都提供自己的错误事件到错误字符串转换功能。此函数接受dpy
参数,但是,就像XGetErrorDatabaseText
不应该使用它一样,也会产生任何服务器流量。默认情况下,此错误处理函数由XEXT_GENERATE_ERROR_STRING
宏here生成,它只封装了对XGetErrorDatabaseText
的另一个调用。