From: Nicolas Sceaux Date: Sat, 13 Dec 2008 12:31:41 +0000 (+0100) Subject: Fix bus error when no layout in \score X-Git-Tag: release/2.12.0-1~32 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=57c350f45c7c18577bf81433373c5483e86ca54c;p=lilypond.git Fix bus error when no layout in \score --- diff --git a/lily/include/paper-book.hh b/lily/include/paper-book.hh index 1294dd144c..9087fd7c17 100644 --- a/lily/include/paper-book.hh +++ b/lily/include/paper-book.hh @@ -58,10 +58,10 @@ public: protected: void classic_output_aux (SCM output, int *first_performance_number); - void output_aux (SCM output_channel, - bool is_last, - int *first_page_number, - int *first_performance_number); + int output_aux (SCM output_channel, + bool is_last, + int *first_page_number, + int *first_performance_number); }; DECLARE_UNSMOB (Paper_book, paper_book) diff --git a/lily/paper-book.cc b/lily/paper-book.cc index 5f9d60c576..ea4424c86e 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -108,12 +108,13 @@ Paper_book::add_performance (SCM s) performances_ = scm_cons (s, performances_); } -void +int Paper_book::output_aux (SCM output_channel, bool is_last, int *first_page_number, int *first_performance_number) { + int page_nb = 0; if (scm_is_pair (performances_)) { SCM proc = ly_lily_module_constant ("write-performances-midis"); @@ -131,23 +132,25 @@ Paper_book::output_aux (SCM output_channel, if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p))) { bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p))); - pbookpart->output_aux (output_channel, - is_last_part, - first_page_number, - first_performance_number); + page_nb += pbookpart->output_aux (output_channel, + is_last_part, + first_page_number, + first_performance_number); } } else { if (scores_ == SCM_EOL) - return; + return 0; paper_->set_variable (ly_symbol2scm ("first-page-number"), scm_long2num (*first_page_number)); paper_->set_variable (ly_symbol2scm ("is-last-bookpart"), ly_bool2scm (is_last)); /* Generate all stencils to trigger font loads. */ - *first_page_number += scm_ilength (pages ()); + page_nb = scm_ilength (pages ()); + *first_page_number += page_nb; } + return page_nb; } void @@ -155,11 +158,12 @@ Paper_book::output (SCM output_channel) { int first_page_number = robust_scm2int (paper_->c_variable ("first-page-number"), 1); int first_performance_number = 0; - output_aux (output_channel, - true, - &first_page_number, - &first_performance_number); - + if (!output_aux (output_channel, + true, + &first_page_number, + &first_performance_number)) + return; + SCM scopes = SCM_EOL; if (ly_is_module (header_)) scopes = scm_cons (header_, scopes); @@ -581,7 +585,7 @@ Paper_book::pages () if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p))) pages_ = scm_append_x (scm_list_2 (pages_, pbookpart->pages ())); } - else + else if (scm_is_pair (scores_)) { SCM proc = paper_->c_variable ("page-breaking-wrapper"); pages_ = scm_apply_0 (proc, scm_list_1 (self_scm ()));