From b1ba526d0be4b4ceff13b4d89ebfcaba954d26a3 Mon Sep 17 00:00:00 2001 From: mongo Date: Thu, 1 Jun 2023 15:36:42 -0300 Subject: Avoid malloc roman struct everytime loading is made. Added transpose example file --- examples/sc/transpose.sc | 27 +++++++++++++++++++++++++++ src/file.c | 15 ++++++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 examples/sc/transpose.sc diff --git a/examples/sc/transpose.sc b/examples/sc/transpose.sc new file mode 100644 index 0000000..219050d --- /dev/null +++ b/examples/sc/transpose.sc @@ -0,0 +1,27 @@ +# This data file was generated by the Spreadsheet Calculator Improvised (sc-im) +# You almost certainly shouldn't edit it. + +newsheet "Sheet1" +movetosheet "Sheet1" +offscr_sc_cols 0 +offscr_sc_rows 0 +nb_frozen_rows 0 +nb_frozen_cols 0 +nb_frozen_screenrows 0 +nb_frozen_screencols 0 +let A0 = 9-H0 +let B0 = 4 +let D0 = 9 +let E0 = 8 +let F0 = 7 +let H0 = 8 +let A1 = 2 +let B1 = 5 +let D1 = 6 +let E1 = 5 +let F1 = 4 +let A2 = 3 +let B2 = 6 +label B4 = "algo" +goto B4 +movetosheet "Sheet1" diff --git a/src/file.c b/src/file.c index 8a620a2..85054b6 100644 --- a/src/file.c +++ b/src/file.c @@ -2214,15 +2214,20 @@ void readfile_argv(int argc, char ** argv) { */ void load_file(char * file) { if (file == NULL || file[0] == '\0') return; - struct roman * roman = calloc(1, sizeof(struct roman)); + // Do not calloc a new roman struct everytime. See 783 PR discussion. + // use the one allocated when loading rc file. + struct roman * roman = session->cur_doc; + if (roman == NULL) { + roman = calloc(1, sizeof(struct roman)); + // save roman inside session + INSERT(roman, (session->first_doc), (session->last_doc), next, prev); + session->cur_doc = roman; // important: set cur_doc! + } + roman->name = ! strlen(file) ? NULL : strdup(file); roman->first_sh = NULL; roman->cur_sh = NULL; - // save roman inside session - INSERT(roman, (session->first_doc), (session->last_doc), next, prev); - session->cur_doc = roman; // important: set cur_doc! - // malloc a clean sheet // to make old sc file loading backwards compatible, mark it as is_allocated roman->cur_sh = roman->first_sh = new_sheet(roman, "Sheet1"); -- cgit v1.2.3