从X11错误处理程序

时间:2017-10-17 15:29:03

标签: x11

从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是否这样做。

1 个答案:

答案 0 :(得分:0)

XGetErrorText不会生成任何服务器流量。它不应该:例如,服务器不知道您的语言环境,并且无法提供本地化消息。 XLib可以,实际上可以使用几个本地Xrm数据库查找。

可以查看XGetErrorText的源代码,例如here。我们可以看到XGetErrorText调用XGetErrorDatabaseText,而后一个函数甚至没有使用其dpy参数。

每个X扩展都提供自己的错误事件到错误字符串转换功能。此函数接受dpy参数,但是,就像XGetErrorDatabaseText不应该使用它一样,也会产生任何服务器流量。默认情况下,此错误处理函数由XEXT_GENERATE_ERROR_STRINGhere生成,它只封装了对XGetErrorDatabaseText的另一个调用。