From 2fa611b72ba67066496866dd76688e9db5257ac6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 13 Aug 2013 21:01:18 +0300 Subject: [PATCH] Fix the Windows build broken by 2013-08-13T15:29:25Z!dmantipov@yandex.ru. src/window.c (Fwindow_margins): Return nil when there's no marginal area, as per the documented API. src/w32term.c (x_scroll_bar_create): Use ALLOCATE_PSEUDOVECTOR, not Fmake_vector, as scroll bar's struct members are not all Lisp objects now. This avoids crashes in GC. src/w32term.h (struct scroll_bar): Convert fringe_extended_p to a bool, so its address could be taken. --- src/ChangeLog | 12 ++++++++++++ src/w32term.c | 2 +- src/w32term.h | 4 +++- src/window.c | 4 ++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c60b2c19ac..6d2c5722bd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2013-08-13 Eli Zaretskii + + * window.c (Fwindow_margins): Return nil when there's no marginal + area, as per the documented API. + + * w32term.c (x_scroll_bar_create): Use ALLOCATE_PSEUDOVECTOR, not + Fmake_vector, as scroll bar's struct members are not all Lisp + objects now. This avoids crashes in GC. + + * w32term.h (struct scroll_bar): Convert fringe_extended_p to a + bool, so its address could be taken. + 2013-08-13 Lars Magne Ingebrigtsen * image.c (imagemagick_filename_hint): New function to possibly diff --git a/src/w32term.c b/src/w32term.c index 2b30673c75..03a9af12ea 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -3757,7 +3757,7 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height) HWND hwnd; SCROLLINFO si; struct scroll_bar *bar - = XSCROLL_BAR (Fmake_vector (make_number (VECSIZE (struct scroll_bar)), Qnil)); + = ALLOCATE_PSEUDOVECTOR (struct scroll_bar, fringe_extended_p, PVEC_OTHER); Lisp_Object barobj; block_input (); diff --git a/src/w32term.h b/src/w32term.h index 8a1bbd1176..41c5c71832 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -453,7 +453,9 @@ struct scroll_bar { /* 1 if the background of the fringe that is adjacent to a scroll bar is extended to the gap between the fringe and the bar. */ - unsigned fringe_extended_p : 1; + /* Note: this could be a bit field, but we need to take its address + in ALLOCATE_PSEUDOVECTOR (see x_scroll_bar_create). */ + bool fringe_extended_p; }; /* Turning a lisp vector value into a pointer to a struct scroll_bar. */ diff --git a/src/window.c b/src/window.c index b33dc32898..f9084e6c05 100644 --- a/src/window.c +++ b/src/window.c @@ -6171,8 +6171,8 @@ as nil. */) (Lisp_Object window) { struct window *w = decode_live_window (window); - return Fcons (make_number (w->left_margin_cols), - make_number (w->right_margin_cols)); + return Fcons (w->left_margin_cols ? make_number (w->left_margin_cols) : Qnil, + w->right_margin_cols ? make_number (w->right_margin_cols) : Qnil); } -- 2.39.2