从 X11 错误处理程序调用 XGetErrorText()

Calling XGetErrorText() from X11 error handler

从 XSetErrorHandler 设置的错误处理程序调用 XGetErrorText 是否安全?

例如

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 是否调用。

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

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

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

的另一个调用