diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2021-09-14 17:54:30 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-09-14 17:54:30 +0200 |
commit | 5dfe467432638fac2e0156a2f9cd0d9eb569fb39 (patch) | |
tree | f26436377c3b39cbbd4881d7c18450e61dc0d3ef /src/blob.c | |
parent | f5785cf0592626ec17676e814d3ba58f5123bcda (diff) | |
download | vim-git-5dfe467432638fac2e0156a2f9cd0d9eb569fb39.tar.gz |
patch 8.2.3438: cannot manipulate blobsv8.2.3438
Problem: Cannot manipulate blobs.
Solution: Add blob2list() and list2blob(). (Yegappan Lakshmanan,
closes #8868)
Diffstat (limited to 'src/blob.c')
-rw-r--r-- | src/blob.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/blob.c b/src/blob.c index 2138ac074..04319f8b1 100644 --- a/src/blob.c +++ b/src/blob.c @@ -483,4 +483,65 @@ blob_remove(typval_T *argvars, typval_T *rettv, char_u *arg_errmsg) } } +/* + * blob2list() function + */ + void +f_blob2list(typval_T *argvars, typval_T *rettv) +{ + blob_T *blob; + list_T *l; + int i; + + if (rettv_list_alloc(rettv) == FAIL) + return; + + if (check_for_blob_arg(argvars, 0) == FAIL) + return; + + blob = argvars->vval.v_blob; + l = rettv->vval.v_list; + for (i = 0; i < blob_len(blob); i++) + list_append_number(l, blob_get(blob, i)); +} + +/* + * list2blob() function + */ + void +f_list2blob(typval_T *argvars, typval_T *rettv) +{ + list_T *l; + listitem_T *li; + blob_T *blob; + + if (rettv_blob_alloc(rettv) == FAIL) + return; + blob = rettv->vval.v_blob; + + if (check_for_list_arg(argvars, 0) == FAIL) + return; + + l = argvars->vval.v_list; + if (l == NULL) + return; + + FOR_ALL_LIST_ITEMS(l, li) + { + int error; + varnumber_T n; + + error = FALSE; + n = tv_get_number_chk(&li->li_tv, &error); + if (error == TRUE || n < 0 || n > 255) + { + if (!error) + semsg(_(e_invalid_value_for_blob_nr), n); + ga_clear(&blob->bv_ga); + return; + } + ga_append(&blob->bv_ga, n); + } +} + #endif // defined(FEAT_EVAL) |