fixed gc protection
This commit is contained in:
parent
992c2aa830
commit
427d755fae
|
@ -133,8 +133,9 @@ s48_value scx_Display_Flush(s48_value display) {
|
|||
}
|
||||
|
||||
s48_value scx_Display_Sync(s48_value display, s48_value discard) {
|
||||
S48_DECLARE_GC_PROTECT_2(display, discard);
|
||||
XSync(scx_extract_display(display), S48_EXTRACT_BOOLEAN(discard));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_No_Op(s48_value display) {
|
||||
|
@ -144,10 +145,11 @@ s48_value scx_No_Op(s48_value display) {
|
|||
|
||||
s48_value scx_Display_Select_Input(s48_value display, s48_value window,
|
||||
s48_value event_mask) {
|
||||
S48_DECLARE_GC_PROTECT_3(display, window, event_mask);
|
||||
XSelectInput(scx_extract_display(display),
|
||||
scx_extract_window(window),
|
||||
scx_extract_event_mask(event_mask));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
void scx_init_display(void) {
|
||||
|
|
|
@ -42,6 +42,7 @@ s48_value scx_enter_x_error(XErrorEvent* xe) {
|
|||
}
|
||||
|
||||
void scx_extract_x_error(s48_value e, XErrorEvent* xe) {
|
||||
S48_DECLARE_GC_PROTECT_1(e);
|
||||
s48_check_record_type(e, scx_x_error_binding);
|
||||
xe->type = 1;
|
||||
xe->display = scx_extract_display(S48_RECORD_REF(e, 0));
|
||||
|
@ -50,6 +51,7 @@ void scx_extract_x_error(s48_value e, XErrorEvent* xe) {
|
|||
xe->request_code = s48_extract_integer(S48_RECORD_REF(e, 3));
|
||||
xe->minor_code = s48_extract_integer(S48_RECORD_REF(e, 4));
|
||||
xe->resourceid = s48_extract_integer(S48_RECORD_REF(e, 5));
|
||||
S48_GC_UNPROTECT();
|
||||
}
|
||||
|
||||
/* Default error handlers of the Xlib */
|
||||
|
@ -62,12 +64,15 @@ static int error_handler_wrapper(Display* dpy, XErrorEvent* e) {
|
|||
char handled = 0;
|
||||
if ((internal_x_error_handler_binding != S48_FALSE) &&
|
||||
(S48_SHARED_BINDING_REF(internal_x_error_handler_binding) != S48_FALSE)){
|
||||
s48_value v =
|
||||
s48_value v = S48_FALSE, display = S48_FALSE, err = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT_3(v, display, err);
|
||||
display = scx_enter_display(dpy);
|
||||
err = scx_enter_x_error(e);
|
||||
v =
|
||||
s48_call_scheme(S48_SHARED_BINDING_REF(internal_x_error_handler_binding),
|
||||
2,
|
||||
scx_enter_display(dpy),
|
||||
scx_enter_x_error(e));
|
||||
2, display, err);
|
||||
handled = (v != S48_FALSE);
|
||||
S48_GC_UNPROTECT();
|
||||
}
|
||||
if (!handled)
|
||||
_XDefaultError(dpy, e);
|
||||
|
@ -76,22 +81,24 @@ static int error_handler_wrapper(Display* dpy, XErrorEvent* e) {
|
|||
|
||||
s48_value scx_Get_Error_Text(s48_value display, s48_value code) {
|
||||
char buf[1024];
|
||||
S48_DECLARE_GC_PROTECT_2(display, code);
|
||||
XGetErrorText(scx_extract_display(display), scx_extract_error_code(code),
|
||||
buf, 1024);
|
||||
buf[1023] = 0;
|
||||
return s48_enter_string(buf);
|
||||
S48_GC_RETURN(s48_enter_string(buf));
|
||||
}
|
||||
|
||||
s48_value scx_Get_Error_Database_Text(s48_value display, s48_value name,
|
||||
s48_value message, s48_value def) {
|
||||
char buf[1024];
|
||||
S48_DECLARE_GC_PROTECT_4(display, name, message, def);
|
||||
XGetErrorDatabaseText(scx_extract_display(display),
|
||||
s48_extract_string(name),
|
||||
s48_extract_string(message),
|
||||
s48_extract_string(def),
|
||||
buf, 1024);
|
||||
buf[1023] = 0;
|
||||
return s48_enter_string(buf);
|
||||
S48_GC_RETURN(s48_enter_string(buf));
|
||||
}
|
||||
|
||||
s48_value internal_x_fatal_error_handler_binding = S48_FALSE;
|
||||
|
|
|
@ -32,6 +32,15 @@
|
|||
S48_DECLARE_GC_PROTECT(4); S48_GC_PROTECT_4(v0, v1, v2, v3)
|
||||
#define S48_DECLARE_GC_PROTECT_5(v0, v1, v2, v3, v4) \
|
||||
S48_DECLARE_GC_PROTECT(5); S48_GC_PROTECT_5(v0, v1, v2, v3, v4)
|
||||
#define S48_DECLARE_GC_PROTECT_6(v0, v1, v2, v3, v4, v5) \
|
||||
S48_DECLARE_GC_PROTECT(6); S48_GC_PROTECT_6(v0, v1, v2, v3, v4, v5)
|
||||
#define S48_DECLARE_GC_PROTECT_7(v0, v1, v2, v3, v4, v5, v6) \
|
||||
S48_DECLARE_GC_PROTECT(7); S48_GC_PROTECT_7(v0, v1, v2, v3, v4, v5, v6)
|
||||
#define S48_DECLARE_GC_PROTECT_8(v0, v1, v2, v3, v4, v5, v6, v7) \
|
||||
S48_DECLARE_GC_PROTECT(8); S48_GC_PROTECT_8(v0, v1, v2, v3, v4, v5, v6, v7)
|
||||
#define S48_DECLARE_GC_PROTECT_9(v0, v1, v2, v3, v4, v5, v6, v7, v8) \
|
||||
S48_DECLARE_GC_PROTECT(9); \
|
||||
S48_GC_PROTECT_9(v0, v1, v2, v3, v4, v5, v6, v7, v8)
|
||||
|
||||
#define S48_GC_RETURN(v) do { S48_GC_UNPROTECT(); return(v); } while(0)
|
||||
|
||||
|
|
Loading…
Reference in New Issue