api/helpers: implement C string to String helper

Use it in buffers.c
This commit is contained in:
Nicolas Hillegeer 2014-05-17 22:01:57 +02:00 committed by Thiago de Arruda
parent b591447f77
commit 9eb68075d8
3 changed files with 22 additions and 5 deletions

View File

@ -108,8 +108,8 @@ StringArray buffer_get_slice(Buffer buffer,
goto end;
}
rv.items[i].data = xstrdup((char *)ml_get_buf(buf, (linenr_T)lnum, false));
rv.items[i].size = strlen(rv.items[i].data);
const char *bufstr = (char *) ml_get_buf(buf, (linenr_T) lnum, false);
rv.items[i] = cstr_to_string(bufstr);
}
end:
@ -307,9 +307,7 @@ String buffer_get_name(Buffer buffer, Error *err)
return rv;
}
rv.data = xstrdup((char *)buf->b_ffname);
rv.size = strlen(rv.data);
return rv;
return cstr_to_string((char *)buf->b_ffname);
}
void buffer_set_name(Buffer buffer, String name, Error *err)

View File

@ -339,6 +339,18 @@ tabpage_T * find_tab(Tabpage tabpage, Error *err)
return rv;
}
String cstr_to_string(const char *str) {
if (str == NULL) {
return (String) { .data = NULL, .size = 0 };
}
size_t len = strlen(str);
return (String) {
.data = xmemdup(str, len),
.size = len
};
}
static bool object_to_vim(Object obj, typval_T *tv, Error *err)
{
tv->v_type = VAR_UNKNOWN;

View File

@ -86,5 +86,12 @@ win_T * find_window(Window window, Error *err);
/// @return the tabpage pointer
tabpage_T * find_tab(Tabpage tabpage, Error *err);
/// Copies a C string into a String (binary safe string, characters + length)
///
/// @param str the C string to copy
/// @return the resulting String, if the input string was NULL, then an
/// empty String is returned
String cstr_to_string(const char *str);
#endif // NVIM_API_HELPERS_H