DefErrMsg.c File Reference

#include <stdio.h>
#include <X11/Xlibint.h>
#include <X11/Xproto.h>
#include <X11/Xmu/Error.h>
#include <X11/Xmu/SysUtil.h>

Include dependency graph for DefErrMsg.c:

Go to the source code of this file.

Defines

#define NEED_EVENTS

Functions

int XmuPrintDefaultErrorMessage (Display *dpy, XErrorEvent *event, FILE *fp)
int XmuSimpleErrorHandler (Display *dpy, XErrorEvent *errorp)


Define Documentation

#define NEED_EVENTS

Definition at line 31 of file DefErrMsg.c.


Function Documentation

int XmuPrintDefaultErrorMessage ( Display *  dpy,
XErrorEvent *  event,
FILE *  fp 
)

Definition at line 42 of file DefErrMsg.c.

References buffer, NULL, number, void(), and XmuSnprintf().

Referenced by xerror(), and XmuSimpleErrorHandler().

00043 {
00044     char buffer[BUFSIZ];
00045     char mesg[BUFSIZ];
00046     char number[32];
00047     char *mtype = "XlibMessage";
00048     register _XExtension *ext = (_XExtension *)NULL;
00049     _XExtension *bext = (_XExtension *)NULL;
00050     XGetErrorText(dpy, event->error_code, buffer, BUFSIZ);
00051     XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ);
00052     (void) fprintf(fp, "%s:  %s\n  ", mesg, buffer);
00053     XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", 
00054         mesg, BUFSIZ);
00055     (void) fprintf(fp, mesg, event->request_code);
00056     if (event->request_code < 128) {
00057         XmuSnprintf(number, sizeof(number), "%d", event->request_code);
00058         XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ);
00059     } else {
00060         /* XXX this is non-portable */
00061         for (ext = dpy->ext_procs;
00062              ext && (ext->codes.major_opcode != event->request_code);
00063              ext = ext->next)
00064           ;
00065         if (ext)
00066           XmuSnprintf(buffer, sizeof(buffer), "%s", ext->name);
00067         else
00068             buffer[0] = '\0';
00069     }
00070     (void) fprintf(fp, " (%s)", buffer);
00071     fputs("\n  ", fp);
00072     if (event->request_code >= 128) {
00073         XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d",
00074                               mesg, BUFSIZ);
00075         (void) fprintf(fp, mesg, event->minor_code);
00076         if (ext) {
00077             XmuSnprintf(mesg, sizeof(mesg),
00078                         "%s.%d", ext->name, event->minor_code);
00079             XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ);
00080             (void) fprintf(fp, " (%s)", buffer);
00081         }
00082         fputs("\n  ", fp);
00083     }
00084     if (event->error_code >= 128) {
00085         /* kludge, try to find the extension that caused it */
00086         buffer[0] = '\0';
00087         for (ext = dpy->ext_procs; ext; ext = ext->next) {
00088             if (ext->error_string) 
00089                 (*ext->error_string)(dpy, event->error_code, &ext->codes,
00090                                      buffer, BUFSIZ);
00091             if (buffer[0]) {
00092                 bext = ext;
00093                 break;
00094             }
00095             if (ext->codes.first_error &&
00096                 ext->codes.first_error < event->error_code &&
00097                 (!bext || ext->codes.first_error > bext->codes.first_error))
00098                 bext = ext;
00099         }    
00100         if (bext)
00101             XmuSnprintf(buffer, sizeof(buffer), "%s.%d", bext->name,
00102                         event->error_code - bext->codes.first_error);
00103         else
00104             strcpy(buffer, "Value");
00105         XGetErrorDatabaseText(dpy, mtype, buffer, "", mesg, BUFSIZ);
00106         if (mesg[0]) {
00107             fputs("  ", fp);
00108             (void) fprintf(fp, mesg, event->resourceid);
00109             fputs("\n", fp);
00110         }
00111         /* let extensions try to print the values */
00112         for (ext = dpy->ext_procs; ext; ext = ext->next) {
00113             if (ext->error_values)
00114                 (*ext->error_values)(dpy, event, fp);
00115         }
00116     } else if ((event->error_code == BadWindow) ||
00117                (event->error_code == BadPixmap) ||
00118                (event->error_code == BadCursor) ||
00119                (event->error_code == BadFont) ||
00120                (event->error_code == BadDrawable) ||
00121                (event->error_code == BadColor) ||
00122                (event->error_code == BadGC) ||
00123                (event->error_code == BadIDChoice) ||
00124                (event->error_code == BadValue) ||
00125                (event->error_code == BadAtom)) {
00126         if (event->error_code == BadValue)
00127             XGetErrorDatabaseText(dpy, mtype, "Value", "Value 0x%x",
00128                                   mesg, BUFSIZ);
00129         else if (event->error_code == BadAtom)
00130             XGetErrorDatabaseText(dpy, mtype, "AtomID", "AtomID 0x%x",
00131                                   mesg, BUFSIZ);
00132         else
00133             XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x",
00134                                   mesg, BUFSIZ);
00135         (void) fprintf(fp, mesg, event->resourceid);
00136         fputs("\n  ", fp);
00137     }
00138     XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", 
00139         mesg, BUFSIZ);
00140     (void) fprintf(fp, mesg, event->serial);
00141     fputs("\n  ", fp);
00142     XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d",
00143         mesg, BUFSIZ);
00144     (void) fprintf(fp, mesg, NextRequest(dpy)-1);
00145     fputs("\n", fp);
00146     if (event->error_code == BadImplementation) return 0;
00147     return 1;
00148 }

Here is the call graph for this function:

Here is the caller graph for this function:

int XmuSimpleErrorHandler ( Display *  dpy,
XErrorEvent *  errorp 
)

Definition at line 157 of file DefErrMsg.c.

References XmuPrintDefaultErrorMessage().

00158 {
00159     switch (errorp->request_code) {
00160       case X_QueryTree:
00161       case X_GetWindowAttributes:
00162         if (errorp->error_code == BadWindow) return 0;
00163         break;
00164       case X_GetGeometry:
00165         if (errorp->error_code == BadDrawable) return 0;
00166         break;
00167     }
00168     /* got a "real" X error */
00169     return XmuPrintDefaultErrorMessage (dpy, errorp, stderr);
00170 }       

Here is the call graph for this function:


Generated on Sun Mar 4 16:03:43 2007 for Scilab [trunk] by  doxygen 1.5.1