aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/memline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/memline.c')
-rw-r--r--src/nvim/memline.c120
1 files changed, 61 insertions, 59 deletions
diff --git a/src/nvim/memline.c b/src/nvim/memline.c
index 04ee0d7f55..91fbe62c18 100644
--- a/src/nvim/memline.c
+++ b/src/nvim/memline.c
@@ -41,6 +41,7 @@
* mf_get().
*/
+#include <assert.h>
#include <errno.h>
#include <inttypes.h>
#include <string.h>
@@ -296,12 +297,12 @@ int ml_open(buf_T *buf)
/*
* fill block0 struct and write page 0
*/
- hp = mf_new(mfp, FALSE, 1);
+ hp = mf_new(mfp, false, 1);
if (hp->bh_bnum != 0) {
EMSG(_("E298: Didn't get block nr 0?"));
goto error;
}
- b0p = (ZERO_BL *)(hp->bh_data);
+ b0p = hp->bh_data;
b0p->b0_id[0] = BLOCK0_ID0;
b0p->b0_id[1] = BLOCK0_ID1;
@@ -330,7 +331,7 @@ int ml_open(buf_T *buf)
* Only works when there's a swapfile, otherwise it's done when the file
* is created.
*/
- mf_put(mfp, hp, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
if (!buf->b_help && !B_SPELL(buf))
(void)mf_sync(mfp, 0);
@@ -343,13 +344,13 @@ int ml_open(buf_T *buf)
EMSG(_("E298: Didn't get block nr 1?"));
goto error;
}
- pp = (PTR_BL *)(hp->bh_data);
+ pp = hp->bh_data;
pp->pb_count = 1;
pp->pb_pointer[0].pe_bnum = 2;
pp->pb_pointer[0].pe_page_count = 1;
pp->pb_pointer[0].pe_old_lnum = 1;
pp->pb_pointer[0].pe_line_count = 1; /* line count after insertion */
- mf_put(mfp, hp, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
/*
* Allocate first data block and create an empty line 1.
@@ -360,7 +361,7 @@ int ml_open(buf_T *buf)
goto error;
}
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
dp->db_index[0] = --dp->db_txt_start; /* at end of block */
dp->db_free -= 1 + INDEX_SIZE;
dp->db_line_count = 1;
@@ -371,8 +372,8 @@ int ml_open(buf_T *buf)
error:
if (mfp != NULL) {
if (hp)
- mf_put(mfp, hp, FALSE, FALSE);
- mf_close(mfp, TRUE); /* will also free(mfp->mf_fname) */
+ mf_put(mfp, hp, false, false);
+ mf_close(mfp, true); /* will also free(mfp->mf_fname) */
}
buf->b_ml.ml_mfp = NULL;
return FAIL;
@@ -525,7 +526,7 @@ void ml_open_file(buf_T *buf)
break;
}
/* Writing block 0 failed: close the file and try another dir */
- mf_close_file(buf, FALSE);
+ mf_close_file(buf, false);
}
}
@@ -563,7 +564,7 @@ void ml_close(buf_T *buf, int del_file)
{
if (buf->b_ml.ml_mfp == NULL) /* not open */
return;
- mf_close(buf->b_ml.ml_mfp, del_file); /* close the .swp file */
+ mf_close(buf->b_ml.ml_mfp, del_file); /* close the .swp file */
if (buf->b_ml.ml_line_lnum != 0 && (buf->b_ml.ml_flags & ML_LINE_DIRTY))
free(buf->b_ml.ml_line_ptr);
free(buf->b_ml.ml_stack);
@@ -638,9 +639,9 @@ static void ml_upd_block0(buf_T *buf, upd_block0_T what)
ZERO_BL *b0p;
mfp = buf->b_ml.ml_mfp;
- if (mfp == NULL || (hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL)
+ if (mfp == NULL || (hp = mf_get(mfp, 0, 1)) == NULL)
return;
- b0p = (ZERO_BL *)(hp->bh_data);
+ b0p = hp->bh_data;
if (ml_check_b0_id(b0p) == FAIL)
EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
else {
@@ -649,7 +650,7 @@ static void ml_upd_block0(buf_T *buf, upd_block0_T what)
else /* what == UB_SAME_DIR */
set_b0_dir_flag(b0p, buf);
}
- mf_put(mfp, hp, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
}
/*
@@ -866,7 +867,7 @@ void ml_recover(void)
/*
* try to read block 0
*/
- if ((hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL) {
+ if ((hp = mf_get(mfp, 0, 1)) == NULL) {
msg_start();
MSG_PUTS_ATTR(_("Unable to read block 0 from "), attr | MSG_HIST);
msg_outtrans_attr(mfp->mf_fname, attr | MSG_HIST);
@@ -876,7 +877,7 @@ void ml_recover(void)
msg_end();
goto theend;
}
- b0p = (ZERO_BL *)(hp->bh_data);
+ b0p = hp->bh_data;
if (STRNCMP(b0p->b0_version, "VIM 3.0", 7) == 0) {
msg_start();
msg_outtrans_attr(mfp->mf_fname, MSG_HIST);
@@ -924,7 +925,7 @@ void ml_recover(void)
if ((size = lseek(mfp->mf_fd, (off_t)0L, SEEK_END)) <= 0)
mfp->mf_blocknr_max = 0; /* no file or empty file */
else
- mfp->mf_blocknr_max = (blocknr_T)(size / mfp->mf_page_size);
+ mfp->mf_blocknr_max = size / mfp->mf_page_size;
mfp->mf_infile_count = mfp->mf_blocknr_max;
/* need to reallocate the memory used to store the data */
@@ -932,7 +933,7 @@ void ml_recover(void)
memmove(p, hp->bh_data, previous_page_size);
free(hp->bh_data);
hp->bh_data = p;
- b0p = (ZERO_BL *)(hp->bh_data);
+ b0p = hp->bh_data;
}
/*
@@ -980,7 +981,7 @@ void ml_recover(void)
b0_fenc = vim_strnsave(p, (int)(b0p->b0_fname + fnsize - p));
}
- mf_put(mfp, hp, FALSE, FALSE); /* release block 0 */
+ mf_put(mfp, hp, false, false); /* release block 0 */
hp = NULL;
/*
@@ -1025,12 +1026,12 @@ void ml_recover(void)
serious_error = FALSE;
for (; !got_int; line_breakcheck()) {
if (hp != NULL)
- mf_put(mfp, hp, FALSE, FALSE); /* release previous block */
+ mf_put(mfp, hp, false, false); /* release previous block */
/*
* get block
*/
- if ((hp = mf_get(mfp, (blocknr_T)bnum, page_count)) == NULL) {
+ if ((hp = mf_get(mfp, bnum, page_count)) == NULL) {
if (bnum == 1) {
EMSG2(_("E309: Unable to read block 1 from %s"), mfp->mf_fname);
goto theend;
@@ -1039,7 +1040,7 @@ void ml_recover(void)
ml_append(lnum++, (char_u *)_("???MANY LINES MISSING"),
(colnr_T)0, TRUE);
} else { /* there is a block */
- pp = (PTR_BL *)(hp->bh_data);
+ pp = hp->bh_data;
if (pp->pb_id == PTR_ID) { /* it is a pointer block */
/* check line count when using pointer block first time */
if (idx == 0 && line_count != 0) {
@@ -1096,7 +1097,7 @@ void ml_recover(void)
continue;
}
} else { /* not a pointer block */
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
if (dp->db_id != DATA_ID) { /* block id wrong */
if (bnum == 1) {
EMSG2(_("E310: Block 1 ID wrong (%s not a .swp file?)"),
@@ -1236,8 +1237,8 @@ theend:
recoverymode = FALSE;
if (mfp != NULL) {
if (hp != NULL)
- mf_put(mfp, hp, FALSE, FALSE);
- mf_close(mfp, FALSE); /* will also free(mfp->mf_fname) */
+ mf_put(mfp, hp, false, false);
+ mf_close(mfp, false); /* will also free(mfp->mf_fname) */
}
if (buf != NULL) {
free(buf->b_ml.ml_stack);
@@ -1809,7 +1810,7 @@ errorret:
goto errorret;
}
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
ptr = (char_u *)dp +
((dp->db_index[lnum - buf->b_ml.ml_locked_low]) & DB_INDEX_MASK);
@@ -1938,7 +1939,7 @@ ml_append_int (
/* get line count before the insertion */
line_count = buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low;
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
/*
* If
@@ -1964,7 +1965,7 @@ ml_append_int (
line_count = buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low;
CHECK(buf->b_ml.ml_locked_low != lnum + 1, "locked_low != lnum + 1");
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
}
++buf->b_ml.ml_line_count;
@@ -2083,8 +2084,8 @@ ml_append_int (
line_count_left = line_count;
line_count_right = 0;
}
- dp_right = (DATA_BL *)(hp_right->bh_data);
- dp_left = (DATA_BL *)(hp_left->bh_data);
+ dp_right = hp_right->bh_data;
+ dp_left = hp_left->bh_data;
bnum_left = hp_left->bh_bnum;
bnum_right = hp_right->bh_bnum;
page_count_left = hp_left->bh_page_count;
@@ -2166,7 +2167,7 @@ ml_append_int (
buf->b_ml.ml_flags |= ML_LOCKED_DIRTY;
if (!newfile && db_idx >= 0 && in_left)
buf->b_ml.ml_flags |= ML_LOCKED_POS;
- mf_put(mfp, hp_new, TRUE, FALSE);
+ mf_put(mfp, hp_new, true, false);
/*
* flush the old data block
@@ -2186,10 +2187,10 @@ ml_append_int (
pb_idx = ip->ip_index;
if ((hp = mf_get(mfp, ip->ip_bnum, 1)) == NULL)
return FAIL;
- pp = (PTR_BL *)(hp->bh_data); /* must be pointer block */
+ pp = hp->bh_data; /* must be pointer block */
if (pp->pb_id != PTR_ID) {
EMSG(_("E317: pointer block id wrong 3"));
- mf_put(mfp, hp, FALSE, FALSE);
+ mf_put(mfp, hp, false, false);
return FAIL;
}
/*
@@ -2215,7 +2216,7 @@ ml_append_int (
if (lnum_right != 0)
pp->pb_pointer[pb_idx + 1].pe_old_lnum = lnum_right;
- mf_put(mfp, hp, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
buf->b_ml.ml_stack_top = stack_idx + 1; /* truncate stack */
if (lineadd) {
@@ -2243,7 +2244,7 @@ ml_append_int (
hp_new = ml_new_ptr(mfp);
if (hp_new == NULL) /* TODO: try to fix tree */
return FAIL;
- pp_new = (PTR_BL *)(hp_new->bh_data);
+ pp_new = hp_new->bh_data;
if (hp->bh_bnum != 1)
break;
@@ -2260,7 +2261,7 @@ ml_append_int (
pp->pb_pointer[0].pe_line_count = buf->b_ml.ml_line_count;
pp->pb_pointer[0].pe_old_lnum = 1;
pp->pb_pointer[0].pe_page_count = 1;
- mf_put(mfp, hp, TRUE, FALSE); /* release block 1 */
+ mf_put(mfp, hp, true, false); /* release block 1 */
hp = hp_new; /* new block is to be split */
pp = pp_new;
CHECK(stack_idx != 0, _("stack_idx should be 0"));
@@ -2312,8 +2313,8 @@ ml_append_int (
bnum_right = hp_new->bh_bnum;
page_count_left = 1;
page_count_right = 1;
- mf_put(mfp, hp, TRUE, FALSE);
- mf_put(mfp, hp_new, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
+ mf_put(mfp, hp_new, true, false);
}
}
@@ -2426,7 +2427,7 @@ static int ml_delete_int(buf_T *buf, linenr_T lnum, int message)
if ((hp = ml_find_line(buf, lnum, ML_DELETE)) == NULL)
return FAIL;
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
/* compute line count before the delete */
count = (long)(buf->b_ml.ml_locked_high)
- (long)(buf->b_ml.ml_locked_low) + 2;
@@ -2460,10 +2461,10 @@ static int ml_delete_int(buf_T *buf, linenr_T lnum, int message)
idx = ip->ip_index;
if ((hp = mf_get(mfp, ip->ip_bnum, 1)) == NULL)
return FAIL;
- pp = (PTR_BL *)(hp->bh_data); /* must be pointer block */
+ pp = hp->bh_data; /* must be pointer block */
if (pp->pb_id != PTR_ID) {
EMSG(_("E317: pointer block id wrong 4"));
- mf_put(mfp, hp, FALSE, FALSE);
+ mf_put(mfp, hp, false, false);
return FAIL;
}
count = --(pp->pb_count);
@@ -2473,7 +2474,7 @@ static int ml_delete_int(buf_T *buf, linenr_T lnum, int message)
if (count != idx) /* move entries after the deleted one */
memmove(&pp->pb_pointer[idx], &pp->pb_pointer[idx + 1],
(size_t)(count - idx) * sizeof(PTR_EN));
- mf_put(mfp, hp, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
buf->b_ml.ml_stack_top = stack_idx; /* truncate stack */
/* fix line count for rest of blocks in the stack */
@@ -2540,7 +2541,7 @@ void ml_setmarked(linenr_T lnum)
if ((hp = ml_find_line(curbuf, lnum, ML_FIND)) == NULL)
return; /* give error message? */
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
dp->db_index[lnum - curbuf->b_ml.ml_locked_low] |= DB_MARKED;
curbuf->b_ml.ml_flags |= ML_LOCKED_DIRTY;
}
@@ -2571,7 +2572,7 @@ linenr_T ml_firstmarked(void)
if ((hp = ml_find_line(curbuf, lnum, ML_FIND)) == NULL)
return (linenr_T)0; /* give error message? */
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
for (i = lnum - curbuf->b_ml.ml_locked_low;
lnum <= curbuf->b_ml.ml_locked_high; ++i, ++lnum)
@@ -2611,7 +2612,7 @@ void ml_clearmarked(void)
if ((hp = ml_find_line(curbuf, lnum, ML_FIND)) == NULL)
return; /* give error message? */
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
for (i = lnum - curbuf->b_ml.ml_locked_low;
lnum <= curbuf->b_ml.ml_locked_high; ++i, ++lnum)
@@ -2660,7 +2661,7 @@ static void ml_flush_line(buf_T *buf)
if (hp == NULL)
EMSGN(_("E320: Cannot find line %" PRId64), lnum);
else {
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
idx = lnum - buf->b_ml.ml_locked_low;
start = ((dp->db_index[idx]) & DB_INDEX_MASK);
old_line = (char_u *)dp + start;
@@ -2725,8 +2726,9 @@ static void ml_flush_line(buf_T *buf)
*/
static bhdr_T *ml_new_data(memfile_T *mfp, int negative, int page_count)
{
- bhdr_T *hp = mf_new(mfp, negative, page_count);
- DATA_BL *dp = (DATA_BL *)(hp->bh_data);
+ assert(page_count >= 0);
+ bhdr_T *hp = mf_new(mfp, negative, (unsigned)page_count);
+ DATA_BL *dp = hp->bh_data;
dp->db_id = DATA_ID;
dp->db_txt_start = dp->db_txt_end = page_count * mfp->mf_page_size;
dp->db_free = dp->db_txt_start - HEADER_SIZE;
@@ -2740,8 +2742,8 @@ static bhdr_T *ml_new_data(memfile_T *mfp, int negative, int page_count)
*/
static bhdr_T *ml_new_ptr(memfile_T *mfp)
{
- bhdr_T *hp = mf_new(mfp, FALSE, 1);
- PTR_BL *pp = (PTR_BL *)(hp->bh_data);
+ bhdr_T *hp = mf_new(mfp, false, 1);
+ PTR_BL *pp = hp->bh_data;
pp->pb_id = PTR_ID;
pp->pb_count = 0;
pp->pb_count_max = (mfp->mf_page_size - sizeof(PTR_BL)) / sizeof(PTR_EN) + 1;
@@ -2855,7 +2857,7 @@ static bhdr_T *ml_find_line(buf_T *buf, linenr_T lnum, int action)
else if (action == ML_DELETE)
--high;
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
if (dp->db_id == DATA_ID) { /* data block */
buf->b_ml.ml_locked = hp;
buf->b_ml.ml_locked_low = low;
@@ -2920,11 +2922,11 @@ static bhdr_T *ml_find_line(buf_T *buf, linenr_T lnum, int action)
pp->pb_pointer[idx].pe_line_count++;
dirty = TRUE;
}
- mf_put(mfp, hp, dirty, FALSE);
+ mf_put(mfp, hp, dirty, false);
}
error_block:
- mf_put(mfp, hp, FALSE, FALSE);
+ mf_put(mfp, hp, false, false);
error_noblock:
/*
* If action is ML_DELETE or ML_INSERT we have to correct the tree for
@@ -2986,15 +2988,15 @@ static void ml_lineadd(buf_T *buf, int count)
ip = &(buf->b_ml.ml_stack[idx]);
if ((hp = mf_get(mfp, ip->ip_bnum, 1)) == NULL)
break;
- pp = (PTR_BL *)(hp->bh_data); /* must be pointer block */
+ pp = hp->bh_data; /* must be pointer block */
if (pp->pb_id != PTR_ID) {
- mf_put(mfp, hp, FALSE, FALSE);
+ mf_put(mfp, hp, false, false);
EMSG(_("E317: pointer block id wrong 2"));
break;
}
pp->pb_pointer[ip->ip_index].pe_line_count += count;
ip->ip_high += count;
- mf_put(mfp, hp, TRUE, FALSE);
+ mf_put(mfp, hp, true, false);
}
}
@@ -3639,7 +3641,7 @@ void ml_setflags(buf_T *buf)
return;
for (hp = buf->b_ml.ml_mfp->mf_used_last; hp != NULL; hp = hp->bh_prev) {
if (hp->bh_bnum == 0) {
- b0p = (ZERO_BL *)(hp->bh_data);
+ b0p = hp->bh_data;
b0p->b0_dirty = buf->b_changed ? B0_DIRTY : 0;
b0p->b0_flags = (b0p->b0_flags & ~B0_FF_MASK)
| (get_fileformat(buf) + 1);
@@ -3751,7 +3753,7 @@ static void ml_updatechunk(buf_T *buf, linenr_T line, long len, int updtype)
buf->b_ml.ml_usedchunks = -1;
return;
}
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
count = (long)(buf->b_ml.ml_locked_high) -
(long)(buf->b_ml.ml_locked_low) + 1;
idx = curline - buf->b_ml.ml_locked_low;
@@ -3800,7 +3802,7 @@ static void ml_updatechunk(buf_T *buf, linenr_T line, long len, int updtype)
buf->b_ml.ml_usedchunks = -1;
return;
}
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
if (dp->db_line_count == 1)
rest = dp->db_txt_end - dp->db_txt_start;
else
@@ -3911,7 +3913,7 @@ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp)
if (curline > buf->b_ml.ml_line_count
|| (hp = ml_find_line(buf, curline, ML_FIND)) == NULL)
return -1;
- dp = (DATA_BL *)(hp->bh_data);
+ dp = hp->bh_data;
count = (long)(buf->b_ml.ml_locked_high) -
(long)(buf->b_ml.ml_locked_low) + 1;
start_idx = idx = curline - buf->b_ml.ml_locked_low;