diff options
| author | Damien George <damien.p.george@gmail.com> | 2015-01-28 23:43:01 +0000 |
|---|---|---|
| committer | Damien George <damien.p.george@gmail.com> | 2015-01-28 23:43:01 +0000 |
| commit | 0d3cb6726ddc1bab9fdd11a0aaa259fb436da4b2 (patch) | |
| tree | 7285c3f452efdfce8c0ecb302bbd0e2efcca0c15 /stmhal/pyexec.c | |
| parent | 57aebe171459fd599f8d430c1ea1660ed307360c (diff) | |
py: Change vstr so that it doesn't null terminate buffer by default.
This cleans up vstr so that it's a pure "variable buffer", and the user
can decide whether they need to add a terminating null byte. In most
places where vstr is used, the vstr did not need to be null terminated
and so this patch saves code size, a tiny bit of RAM, and makes vstr
usage more efficient. When null termination is needed it must be
done explicitly using vstr_null_terminate.
Diffstat (limited to 'stmhal/pyexec.c')
| -rw-r--r-- | stmhal/pyexec.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/stmhal/pyexec.c b/stmhal/pyexec.c index 1563dc8e4..930c1c019 100644 --- a/stmhal/pyexec.c +++ b/stmhal/pyexec.c @@ -248,11 +248,12 @@ int pyexec_friendly_repl_process_char(int c) { return 0; } + vstr_null_terminate(&repl.line); if (!mp_repl_continue_with_input(vstr_str(&repl.line))) { goto exec; } - vstr_add_char(&repl.line, '\n'); + vstr_add_byte(&repl.line, '\n'); repl.cont_line = true; stdout_tx_str("... "); readline_note_newline(); @@ -274,8 +275,9 @@ int pyexec_friendly_repl_process_char(int c) { return 0; } + vstr_null_terminate(&repl.line); if (mp_repl_continue_with_input(vstr_str(&repl.line))) { - vstr_add_char(&repl.line, '\n'); + vstr_add_byte(&repl.line, '\n'); stdout_tx_str("... "); readline_note_newline(); return 0; @@ -362,8 +364,12 @@ friendly_repl_reset: continue; } - while (mp_repl_continue_with_input(vstr_str(&line))) { - vstr_add_char(&line, '\n'); + for (;;) { + vstr_null_terminate(&line); + if (!mp_repl_continue_with_input(vstr_str(&line))) { + break; + } + vstr_add_byte(&line, '\n'); ret = readline(&line, "... "); if (ret == CHAR_CTRL_C) { // cancel everything |
