2017-10-17 11 views
0

XSetErrorHandlerで設定されたエラーハンドラからXGetErrorTextを呼び出しても安全ですか?X11エラーハンドラから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がない場合、それは教えてくれない、ディスプレイ上の任意の機能(直接または間接的に)を呼び出すべきではないと言うので、私は聞いていますのよ。

答えて

0

XGetErrorTextは、サーバートラフィックを生成しません。サーバーはあなたのロケールを知らず、ローカライズされたメッセージを提供することもできません。 XLibすることができますし、実際にローカルXrmデータベースのルックアップのカップルで行うことができます。

XGetErrorTextのソースコードは、たとえば次のように表示できます。 hereXGetErrorTextXGetErrorDatabaseTextを呼び出し、この後者の関数がdpyパラメータを使用していないことがわかります。

各X拡張は、独自のエラーイベントからエラー文字列への変換機能を提供します。このファンクションはdpyパラメータを受け入れますが、XGetErrorDatabaseTextと同じように、サーバトラフィックを生成することは想定されていません。このエラー処理関数は、デフォルトでXEXT_GENERATE_ERROR_STRINGマクロhereによって生成され、別の呼び出しをXGetErrorDatabaseTextにカプセル化します。

+0

これは私の質問に答えます。実際、それは私を驚かせたDisplay *パラメータでした。しかし、源(それは自己が原則的に良いことである)を見ることを別にして、私はそれを理解する方法を知らないだろう。 ありがとう – volker

関連する問題