… | |
… | |
383 | char mesg[BUFSIZ]; |
383 | char mesg[BUFSIZ]; |
384 | char number[32]; |
384 | char number[32]; |
385 | char *mtype = "XlibMessage"; |
385 | char *mtype = "XlibMessage"; |
386 | XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); |
386 | XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); |
387 | XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); |
387 | XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); |
388 | rxvt_warn ("An X Error occured, trying to continue after report.\n"); |
388 | rxvt_warn ("An X Error occurred, trying to continue after report.\n"); |
389 | rxvt_warn ("%s: %s\n", mesg, buffer); |
389 | rxvt_warn ("%s: %s\n", mesg, buffer); |
390 | XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); |
390 | XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); |
391 | rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->request_code); |
391 | rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->request_code); |
392 | sprintf(number, "%d", event->request_code); |
392 | sprintf(number, "%d", event->request_code); |
393 | XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); |
393 | XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); |
… | |
… | |
482 | rxvt_init () |
482 | rxvt_init () |
483 | { |
483 | { |
484 | assert (("fontMask must not overlap other RS masks", |
484 | assert (("fontMask must not overlap other RS masks", |
485 | 0 == (RS_fontMask & (RS_Sel | RS_baseattrMask | RS_customMask | RS_bgMask | RS_fgMask)))); |
485 | 0 == (RS_fontMask & (RS_Sel | RS_baseattrMask | RS_customMask | RS_bgMask | RS_fgMask)))); |
486 | |
486 | |
|
|
487 | // get rid of stdin/stdout as we don't need them, to free resources |
|
|
488 | dup2 (STDERR_FILENO, STDIN_FILENO); |
|
|
489 | dup2 (STDERR_FILENO, STDOUT_FILENO); |
|
|
490 | |
487 | ptytty::init (); |
491 | ptytty::init (); |
488 | |
492 | |
489 | if (!ev_default_loop (0)) |
493 | if (!ev_default_loop (0)) |
490 | rxvt_fatal ("cannot initialise libev (bad value for LIBEV_METHODS?)\n"); |
494 | rxvt_fatal ("cannot initialise libev (bad value for LIBEV_METHODS?)\n"); |
491 | |
495 | |
… | |
… | |
494 | signal (SIGHUP, SIG_IGN); |
498 | signal (SIGHUP, SIG_IGN); |
495 | signal (SIGPIPE, SIG_IGN); |
499 | signal (SIGPIPE, SIG_IGN); |
496 | |
500 | |
497 | sig_handlers.sw_term.start (SIGTERM); ev_unref (); |
501 | sig_handlers.sw_term.start (SIGTERM); ev_unref (); |
498 | sig_handlers.sw_int.start (SIGINT); ev_unref (); |
502 | sig_handlers.sw_int.start (SIGINT); ev_unref (); |
499 | |
|
|
500 | /* need to trap SIGURG for SVR4 (Unixware) rlogin */ |
|
|
501 | /* signal (SIGURG, SIG_DFL); */ |
|
|
502 | |
503 | |
503 | old_xerror_handler = XSetErrorHandler ((XErrorHandler) rxvt_xerror_handler); |
504 | old_xerror_handler = XSetErrorHandler ((XErrorHandler) rxvt_xerror_handler); |
504 | // TODO: handle this with exceptions and tolerate the memory loss |
505 | // TODO: handle this with exceptions and tolerate the memory loss |
505 | XSetIOErrorHandler (rxvt_xioerror_handler); |
506 | XSetIOErrorHandler (rxvt_xioerror_handler); |
506 | |
507 | |