2017-10-17 2 views
0

Est-il prudent d'appeler XGetErrorText à partir d'un gestionnaire d'erreurs défini par XSetErrorHandler?Appel de XGetErrorText() à partir du gestionnaire d'erreurs X11

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); 

Je demande parce que la page de manuel dit que vous ne devriez pas sur l'affichage appeler toutes les fonctions (directement ou indirectement) qui va générer des requêtes de protocole, mais il ne dit pas si le fait XGetErrorText.

Répondre

0

XGetErrorText ne génère aucun trafic de serveur. Ce n'est pas supposé: le serveur ne connait pas vos paramètres régionaux, par exemple, et ne peut pas fournir de messages localisés. XLib peut, et en effet le fait avec un couple de recherches de base de données Xrm locales.

Le code source de XGetErrorText peut être visualisé par ex. . Nous pouvons voir que XGetErrorText appelle XGetErrorDatabaseText, et cette dernière fonction n'utilise même pas son paramètre dpy.

Chaque extension X fournit sa propre fonction de traduction d'erreur-événement-erreur-chaîne. Cette fonction accepte un paramètre dpy, mais, tout comme XGetErrorDatabaseText n'est pas censé l'utiliser, elle génère également un trafic de serveur. Cette fonction de gestion des erreurs est générée par défaut par la macro XEXT_GENERATE_ERROR_STRINGhere, qui encapsule simplement un autre appel à XGetErrorDatabaseText.

+0

Cela répond à ma question. En effet, c'était le paramètre Display * qui m'a fait réfléchir. Mais à part regarder la source (qui est en soi une bonne chose à faire) je ne saurais pas comment la comprendre. Merci – volker