From 5f27a7e81135f7a7c0c75ee551fe0c6103048046 Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 31 Jul 2014 10:29:56 +0100 Subject: [PATCH] py: Add mp_obj_str_builder_end_with_len. This allows to create str's with a smaller length than initially asked for. --- py/obj.h | 1 + py/objstr.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/py/obj.h b/py/obj.h index c391611c10..64ed061c8b 100644 --- a/py/obj.h +++ b/py/obj.h @@ -460,6 +460,7 @@ void mp_init_emergency_exception_buf(void); // str mp_obj_t mp_obj_str_builder_start(const mp_obj_type_t *type, uint len, byte **data); mp_obj_t mp_obj_str_builder_end(mp_obj_t o_in); +mp_obj_t mp_obj_str_builder_end_with_len(mp_obj_t o_in, mp_uint_t len); bool mp_obj_str_equal(mp_obj_t s1, mp_obj_t s2); uint mp_obj_str_get_hash(mp_obj_t self_in); uint mp_obj_str_get_len(mp_obj_t self_in); diff --git a/py/objstr.c b/py/objstr.c index 63d394e0a9..321340eea3 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -1744,6 +1744,16 @@ mp_obj_t mp_obj_str_builder_end(mp_obj_t o_in) { return o; } +mp_obj_t mp_obj_str_builder_end_with_len(mp_obj_t o_in, mp_uint_t len) { + mp_obj_str_t *o = o_in; + o->data = m_renew(byte, (byte*)o->data, o->len + 1, len + 1); + o->len = len; + o->hash = qstr_compute_hash(o->data, o->len); + byte *p = (byte*)o->data; + p[o->len] = '\0'; // for now we add null for compatibility with C ASCIIZ strings + return o; +} + mp_obj_t mp_obj_new_str_of_type(const mp_obj_type_t *type, const byte* data, uint len) { mp_obj_str_t *o = m_new_obj(mp_obj_str_t); o->base.type = type;