Lines Matching refs:buf
240 static void ml_set_b0_crypt(buf_T *buf, ZERO_BL *b0p);
242 static void ml_upd_block0(buf_T *buf, upd_block0_T what);
243 static void set_b0_fname(ZERO_BL *, buf_T *buf);
244 static void set_b0_dir_flag(ZERO_BL *b0p, buf_T *buf);
245 static void add_b0_fenc(ZERO_BL *b0p, buf_T *buf);
265 static void ml_updatechunk(buf_T *buf, long line, long len, int updtype);
274 ml_open(buf_T *buf) in ml_open() argument
285 buf->b_ml.ml_stack_size = 0; // no stack yet in ml_open()
286 buf->b_ml.ml_stack = NULL; // no stack yet in ml_open()
287 buf->b_ml.ml_stack_top = 0; // nothing in the stack in ml_open()
288 buf->b_ml.ml_locked = NULL; // no cached block in ml_open()
289 buf->b_ml.ml_line_lnum = 0; // no cached line in ml_open()
291 buf->b_ml.ml_chunksize = NULL; in ml_open()
292 buf->b_ml.ml_usedchunks = 0; in ml_open()
296 buf->b_p_swf = FALSE; in ml_open()
301 if (p_uc && buf->b_p_swf) in ml_open()
302 buf->b_may_swap = TRUE; in ml_open()
304 buf->b_may_swap = FALSE; in ml_open()
313 buf->b_ml.ml_mfp = mfp; in ml_open()
315 mfp->mf_buffer = buf; in ml_open()
317 buf->b_ml.ml_flags = ML_EMPTY; in ml_open()
318 buf->b_ml.ml_line_count = 1; in ml_open()
346 if (!buf->b_spell) in ml_open()
349 b0p->b0_dirty = buf->b_changed ? B0_DIRTY : 0; in ml_open()
350 b0p->b0_flags = get_fileformat(buf) + 1; in ml_open()
351 set_b0_fname(b0p, buf); in ml_open()
358 ml_set_b0_crypt(buf, b0p); in ml_open()
370 if (!buf->b_help && !B_SPELL(buf)) in ml_open()
417 buf->b_ml.ml_mfp = NULL; in ml_open()
426 ml_set_mfp_crypt(buf_T *buf) in ml_set_mfp_crypt() argument
428 if (*buf->b_p_key != NUL) in ml_set_mfp_crypt()
430 int method_nr = crypt_get_method_nr(buf); in ml_set_mfp_crypt()
435 sha2_seed(buf->b_ml.ml_mfp->mf_seed, MF_SEED_LEN, NULL, 0); in ml_set_mfp_crypt()
439 randombytes_buf(buf->b_ml.ml_mfp->mf_seed, MF_SEED_LEN); in ml_set_mfp_crypt()
448 ml_set_b0_crypt(buf_T *buf, ZERO_BL *b0p) in ml_set_b0_crypt() argument
450 if (*buf->b_p_key == NUL) in ml_set_b0_crypt()
454 int method_nr = crypt_get_method_nr(buf); in ml_set_b0_crypt()
461 mch_memmove(buf->b_ml.ml_mfp->mf_seed, &b0p->b0_seed, MF_SEED_LEN); in ml_set_b0_crypt()
476 buf_T *buf, in ml_set_crypt_key() argument
480 memfile_T *mfp = buf->b_ml.ml_mfp; in ml_set_crypt_key()
497 if (crypt_get_method_nr(buf) == CRYPT_M_SOD && *buf->b_p_key != NUL) in ml_set_crypt_key()
500 mf_close_file(buf, TRUE); in ml_set_crypt_key()
501 buf->b_p_swf = FALSE; in ml_set_crypt_key()
507 char_u *new_key = buf->b_p_key; in ml_set_crypt_key()
508 char_u *new_buf_cm = buf->b_p_cm; in ml_set_crypt_key()
510 buf->b_p_key = old_key; in ml_set_crypt_key()
511 buf->b_p_cm = old_cm; in ml_set_crypt_key()
512 ml_preserve(buf, FALSE); in ml_set_crypt_key()
513 buf->b_p_key = new_key; in ml_set_crypt_key()
514 buf->b_p_cm = new_buf_cm; in ml_set_crypt_key()
525 ml_upd_block0(buf, UB_CRYPT); in ml_set_crypt_key()
535 ml_flush_line(buf); // flush buffered line in ml_set_crypt_key()
536 (void)ml_find_line(buf, (linenr_T)0, ML_FLUSH); // flush locked block in ml_set_crypt_key()
543 buf->b_ml.ml_stack_top = 0; in ml_set_crypt_key()
544 VIM_CLEAR(buf->b_ml.ml_stack); in ml_set_crypt_key()
545 buf->b_ml.ml_stack_size = 0; // no stack yet in ml_set_crypt_key()
582 if ((top = ml_add_stack(buf)) < 0) in ml_set_crypt_key()
587 ip = &(buf->b_ml.ml_stack[top]); in ml_set_crypt_key()
611 if (buf->b_ml.ml_stack_top == 0) // finished in ml_set_crypt_key()
615 ip = &(buf->b_ml.ml_stack[--(buf->b_ml.ml_stack_top)]); in ml_set_crypt_key()
636 ml_setname(buf_T *buf) in ml_setname() argument
646 mfp = buf->b_ml.ml_mfp; in ml_setname()
654 ml_open_file(buf); // create a swap file in ml_setname()
666 fname = findswapname(buf, &dirp, mfp->mf_fname); in ml_setname()
710 ml_upd_block0(buf, UB_SAME_DIR); in ml_setname()
745 buf_T *buf; in ml_open_files() local
747 FOR_ALL_BUFFERS(buf) in ml_open_files()
748 if (!buf->b_p_ro || buf->b_changed) in ml_open_files()
749 ml_open_file(buf); in ml_open_files()
758 ml_open_file(buf_T *buf) in ml_open_file() argument
764 mfp = buf->b_ml.ml_mfp; in ml_open_file()
765 if (mfp == NULL || mfp->mf_fd >= 0 || !buf->b_p_swf in ml_open_file()
771 if (buf->b_spell) in ml_open_file()
776 buf->b_may_swap = FALSE; in ml_open_file()
792 fname = findswapname(buf, &dirp, NULL); // allocates fname in ml_open_file()
806 ml_upd_block0(buf, UB_SAME_DIR); in ml_open_file()
818 mf_close_file(buf, FALSE); in ml_open_file()
827 buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname); in ml_open_file()
832 buf->b_may_swap = FALSE; in ml_open_file()
855 ml_close(buf_T *buf, int del_file) in ml_close() argument
857 if (buf->b_ml.ml_mfp == NULL) // not open in ml_close()
859 mf_close(buf->b_ml.ml_mfp, del_file); // close the .swp file in ml_close()
860 if (buf->b_ml.ml_line_lnum != 0 && (buf->b_ml.ml_flags & ML_LINE_DIRTY)) in ml_close()
861 vim_free(buf->b_ml.ml_line_ptr); in ml_close()
862 vim_free(buf->b_ml.ml_stack); in ml_close()
864 VIM_CLEAR(buf->b_ml.ml_chunksize); in ml_close()
866 buf->b_ml.ml_mfp = NULL; in ml_close()
870 buf->b_flags &= ~BF_RECOVERED; in ml_close()
882 buf_T *buf; in ml_close_all() local
884 FOR_ALL_BUFFERS(buf) in ml_close_all()
885 ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0 in ml_close_all()
902 buf_T *buf; in ml_close_notmod() local
904 FOR_ALL_BUFFERS(buf) in ml_close_notmod()
905 if (!bufIsChanged(buf)) in ml_close_notmod()
906 ml_close(buf, TRUE); // close all not-modified buffers in ml_close_notmod()
914 ml_timestamp(buf_T *buf) in ml_timestamp() argument
916 ml_upd_block0(buf, UB_FNAME); in ml_timestamp()
940 ml_upd_block0(buf_T *buf, upd_block0_T what) in ml_upd_block0() argument
946 mfp = buf->b_ml.ml_mfp; in ml_upd_block0()
955 ml_set_mfp_crypt(buf); in ml_upd_block0()
966 set_b0_fname(b0p, buf); in ml_upd_block0()
969 ml_set_b0_crypt(buf, b0p); in ml_upd_block0()
972 set_b0_dir_flag(b0p, buf); in ml_upd_block0()
983 set_b0_fname(ZERO_BL *b0p, buf_T *buf) in set_b0_fname() argument
987 if (buf->b_ffname == NULL) in set_b0_fname()
995 vim_strncpy(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE_CRYPT - 1); in set_b0_fname()
1010 home_replace(NULL, buf->b_ffname, b0p->b0_fname, in set_b0_fname()
1018 vim_strncpy(b0p->b0_fname, buf->b_ffname, in set_b0_fname()
1027 if (mch_stat((char *)buf->b_ffname, &st) >= 0) in set_b0_fname()
1033 buf_store_time(buf, &st, buf->b_ffname); in set_b0_fname()
1034 buf->b_mtime_read = buf->b_mtime; in set_b0_fname()
1035 buf->b_mtime_read_ns = buf->b_mtime_ns; in set_b0_fname()
1043 buf->b_mtime = 0; in set_b0_fname()
1044 buf->b_mtime_ns = 0; in set_b0_fname()
1045 buf->b_mtime_read = 0; in set_b0_fname()
1046 buf->b_mtime_read_ns = 0; in set_b0_fname()
1047 buf->b_orig_size = 0; in set_b0_fname()
1048 buf->b_orig_mode = 0; in set_b0_fname()
1063 set_b0_dir_flag(ZERO_BL *b0p, buf_T *buf) in set_b0_dir_flag() argument
1065 if (same_directory(buf->b_ml.ml_mfp->mf_fname, buf->b_ffname)) in set_b0_dir_flag()
1077 buf_T *buf) in add_b0_fenc() argument
1086 if (*buf->b_p_key != NUL) in add_b0_fenc()
1090 n = (int)STRLEN(buf->b_p_fenc); in add_b0_fenc()
1096 (char *)buf->b_p_fenc, (size_t)n); in add_b0_fenc()
1142 buf_T *buf = NULL; in ml_recover() local
1241 buf = ALLOC_ONE(buf_T); in ml_recover()
1242 if (buf == NULL) in ml_recover()
1248 buf->b_ml.ml_stack_size = 0; // no stack yet in ml_recover()
1249 buf->b_ml.ml_stack = NULL; // no stack yet in ml_recover()
1250 buf->b_ml.ml_stack_top = 0; // nothing in the stack in ml_recover()
1251 buf->b_ml.ml_line_lnum = 0; // no cached line in ml_recover()
1252 buf->b_ml.ml_locked = NULL; // no locked block in ml_recover()
1253 buf->b_ml.ml_flags = 0; in ml_recover()
1255 buf->b_p_key = empty_option; in ml_recover()
1256 buf->b_p_cm = empty_option; in ml_recover()
1272 buf->b_ml.ml_mfp = mfp; in ml_recover()
1274 mfp->mf_buffer = buf; in ml_recover()
1341 crypt_set_cm_option(buf, b0_cm < 0 ? 0 : b0_cm); in ml_recover()
1466 buf->b_p_key = crypt_get_key(FALSE, FALSE); in ml_recover()
1467 if (buf->b_p_key == NULL) in ml_recover()
1468 buf->b_p_key = curbuf->b_p_key; in ml_recover()
1469 else if (*buf->b_p_key == NUL) in ml_recover()
1471 vim_free(buf->b_p_key); in ml_recover()
1472 buf->b_p_key = curbuf->b_p_key; in ml_recover()
1474 if (buf->b_p_key == NULL) in ml_recover()
1475 buf->b_p_key = empty_option; in ml_recover()
1495 buf->b_ml.ml_stack_top = 0; in ml_recover()
1496 buf->b_ml.ml_stack = NULL; in ml_recover()
1497 buf->b_ml.ml_stack_size = 0; // no stack yet in ml_recover()
1580 if ((top = ml_add_stack(buf)) < 0) // new entry in stack in ml_recover()
1585 ip = &(buf->b_ml.ml_stack[top]); in ml_recover()
1666 if (buf->b_ml.ml_stack_top == 0) // finished in ml_recover()
1672 ip = &(buf->b_ml.ml_stack[--(buf->b_ml.ml_stack_top)]); in ml_recover()
1758 if (*buf->b_p_key != NUL && STRCMP(curbuf->b_p_key, buf->b_p_key) != 0) in ml_recover()
1761 set_option_value((char_u *)"key", 0L, buf->b_p_key, OPT_LOCAL); in ml_recover()
1775 if (buf != NULL) in ml_recover()
1778 if (buf->b_p_key != curbuf->b_p_key) in ml_recover()
1779 free_string_option(buf->b_p_key); in ml_recover()
1780 free_string_option(buf->b_p_cm); in ml_recover()
1782 vim_free(buf->b_ml.ml_stack); in ml_recover()
1783 vim_free(buf); in ml_recover()
2424 buf_T *buf; in ml_sync_all() local
2427 FOR_ALL_BUFFERS(buf) in ml_sync_all()
2429 if (buf->b_ml.ml_mfp == NULL in ml_sync_all()
2430 || buf->b_ml.ml_mfp->mf_fname == NULL in ml_sync_all()
2431 || buf->b_ml.ml_mfp->mf_fd < 0) in ml_sync_all()
2434 ml_flush_line(buf); // flush buffered line in ml_sync_all()
2436 (void)ml_find_line(buf, (linenr_T)0, ML_FLUSH); in ml_sync_all()
2437 if (bufIsChanged(buf) && check_file && mf_need_trans(buf->b_ml.ml_mfp) in ml_sync_all()
2438 && buf->b_ffname != NULL) in ml_sync_all()
2444 if (mch_stat((char *)buf->b_ffname, &st) == -1 in ml_sync_all()
2445 || st.st_mtime != buf->b_mtime_read in ml_sync_all()
2447 || st.ST_MTIM_NSEC != buf->b_mtime_read_ns in ml_sync_all()
2449 || st.st_size != buf->b_orig_size) in ml_sync_all()
2451 ml_preserve(buf, FALSE); in ml_sync_all()
2456 if (buf->b_ml.ml_mfp->mf_dirty) in ml_sync_all()
2458 (void)mf_sync(buf->b_ml.ml_mfp, (check_char ? MFS_STOP : 0) in ml_sync_all()
2459 | (bufIsChanged(buf) ? MFS_FLUSH : 0)); in ml_sync_all()
2477 ml_preserve(buf_T *buf, int message) in ml_preserve() argument
2481 memfile_T *mfp = buf->b_ml.ml_mfp; in ml_preserve()
2496 ml_flush_line(buf); // flush buffered line in ml_preserve()
2497 (void)ml_find_line(buf, (linenr_T)0, ML_FLUSH); // flush locked block in ml_preserve()
2501 buf->b_ml.ml_stack_top = 0; in ml_preserve()
2518 while (mf_need_trans(mfp) && lnum <= buf->b_ml.ml_line_count) in ml_preserve()
2520 hp = ml_find_line(buf, lnum, ML_FIND); in ml_preserve()
2526 CHECK(buf->b_ml.ml_locked_low != lnum, "low != lnum"); in ml_preserve()
2527 lnum = buf->b_ml.ml_locked_high + 1; in ml_preserve()
2529 (void)ml_find_line(buf, (linenr_T)0, ML_FLUSH); // flush locked block in ml_preserve()
2533 buf->b_ml.ml_stack_top = 0; // stack is invalid now in ml_preserve()
2602 buf_T *buf, in ml_get_buf() argument
2610 if (lnum > buf->b_ml.ml_line_count) // invalid line number in ml_get_buf()
2622 buf->b_ml.ml_line_len = 4; in ml_get_buf()
2628 if (buf->b_ml.ml_mfp == NULL) // there are no lines in ml_get_buf()
2630 buf->b_ml.ml_line_len = 1; in ml_get_buf()
2640 if (buf->b_ml.ml_line_lnum != lnum || mf_dont_release) in ml_get_buf()
2646 ml_flush_line(buf); in ml_get_buf()
2653 if ((hp = ml_find_line(buf, lnum, ML_FIND)) == NULL) in ml_get_buf()
2660 get_trans_bufname(buf); in ml_get_buf()
2663 lnum, buf->b_fnum, NameBuff); in ml_get_buf()
2671 idx = lnum - buf->b_ml.ml_locked_low; in ml_get_buf()
2681 buf->b_ml.ml_line_ptr = (char_u *)dp + start; in ml_get_buf()
2682 buf->b_ml.ml_line_len = len; in ml_get_buf()
2683 buf->b_ml.ml_line_lnum = lnum; in ml_get_buf()
2684 buf->b_ml.ml_flags &= ~ML_LINE_DIRTY; in ml_get_buf()
2687 buf->b_ml.ml_flags |= (ML_LOCKED_DIRTY | ML_LOCKED_POS); in ml_get_buf()
2689 return buf->b_ml.ml_line_ptr; in ml_get_buf()
2708 buf_T *buf, in add_text_props_for_append() argument
2742 count = get_text_props(buf, lnum, &props, FALSE); in add_text_props_for_append()
2769 buf_T *buf, in ml_append_int() argument
2795 if (lnum > buf->b_ml.ml_line_count || buf->b_ml.ml_mfp == NULL) in ml_append_int()
2808 add_text_props_for_append(buf, lnum, &line, &len, &tofree); in ml_append_int()
2813 mfp = buf->b_ml.ml_mfp; in ml_append_int()
2821 if ((hp = ml_find_line(buf, lnum == 0 ? (linenr_T)1 : lnum, in ml_append_int()
2825 buf->b_ml.ml_flags &= ~ML_EMPTY; in ml_append_int()
2830 db_idx = lnum - buf->b_ml.ml_locked_low; in ml_append_int()
2832 line_count = buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low; in ml_append_int()
2844 && lnum < buf->b_ml.ml_line_count) in ml_append_int()
2851 --(buf->b_ml.ml_locked_lineadd); in ml_append_int()
2852 --(buf->b_ml.ml_locked_high); in ml_append_int()
2853 if ((hp = ml_find_line(buf, lnum + 1, ML_INSERT)) == NULL) in ml_append_int()
2858 line_count = buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low; in ml_append_int()
2859 CHECK(buf->b_ml.ml_locked_low != lnum + 1, "locked_low != lnum + 1"); in ml_append_int()
2864 ++buf->b_ml.ml_line_count; in ml_append_int()
2911 buf->b_ml.ml_flags |= ML_LOCKED_DIRTY; in ml_append_int()
2913 buf->b_ml.ml_flags |= ML_LOCKED_POS; in ml_append_int()
2985 --(buf->b_ml.ml_locked_lineadd); in ml_append_int()
2986 --(buf->b_ml.ml_locked_high); in ml_append_int()
3089 buf->b_ml.ml_flags |= ML_LOCKED_DIRTY; in ml_append_int()
3091 buf->b_ml.ml_flags |= ML_LOCKED_POS; in ml_append_int()
3099 lineadd = buf->b_ml.ml_locked_lineadd; in ml_append_int()
3100 buf->b_ml.ml_locked_lineadd = 0; in ml_append_int()
3101 ml_find_line(buf, (linenr_T)0, ML_FLUSH); // flush data block in ml_append_int()
3106 for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; in ml_append_int()
3109 ip = &(buf->b_ml.ml_stack[stack_idx]); in ml_append_int()
3145 buf->b_ml.ml_stack_top = stack_idx + 1; // truncate stack in ml_append_int()
3149 --(buf->b_ml.ml_stack_top); in ml_append_int()
3151 ml_lineadd(buf, lineadd); in ml_append_int()
3153 buf->b_ml.ml_stack[buf->b_ml.ml_stack_top].ip_high += in ml_append_int()
3155 ++(buf->b_ml.ml_stack_top); in ml_append_int()
3190 pp->pb_pointer[0].pe_line_count = buf->b_ml.ml_line_count; in ml_append_int()
3259 buf->b_ml.ml_stack_top = 0; // invalidate stack in ml_append_int()
3270 ml_updatechunk(buf, lnum + 1, (long)len, ML_CHNK_ADDLINE); in ml_append_int()
3277 netbeans_inserted(buf, lnum+1, (colnr_T)0, line, (int)STRLEN(line)); in ml_append_int()
3278 netbeans_inserted(buf, lnum+1, (colnr_T)STRLEN(line), in ml_append_int()
3283 if (buf->b_write_to_channel) in ml_append_int()
3284 channel_write_new_lines(buf); in ml_append_int()
3300 buf_T *buf, in ml_append_flush() argument
3306 if (lnum > buf->b_ml.ml_line_count) in ml_append_flush()
3309 if (buf->b_ml.ml_line_lnum != 0) in ml_append_flush()
3311 ml_flush_line(buf); in ml_append_flush()
3316 may_invoke_listeners(buf, lnum + 1, lnum + 1, 1); in ml_append_flush()
3317 if (buf->b_ml.ml_line_lnum != 0) in ml_append_flush()
3318 ml_flush_line(buf); in ml_append_flush()
3321 return ml_append_int(buf, lnum, line, len, flags); in ml_append_flush()
3367 buf_T *buf, in ml_append_buf() argument
3373 if (buf->b_ml.ml_mfp == NULL) in ml_append_buf()
3375 return ml_append_flush(buf, lnum, line, len, newfile ? ML_APPEND_NEW : 0); in ml_append_buf()
3505 buf_T *buf, in adjust_text_props_for_delete() argument
3536 if ((hp = ml_find_line(buf, lnum, ML_FIND)) == NULL) in adjust_text_props_for_delete()
3540 idx = lnum - buf->b_ml.ml_locked_low; in adjust_text_props_for_delete()
3589 buf->b_ml.ml_flags |= (ML_LOCKED_DIRTY | ML_LOCKED_POS); in adjust_text_props_for_delete()
3603 ml_delete_int(buf_T *buf, linenr_T lnum, int flags) in ml_delete_int() argument
3629 if (buf->b_ml.ml_line_count == 1) // file becomes empty in ml_delete_int()
3640 buf->b_ml.ml_flags |= ML_EMPTY; in ml_delete_int()
3650 mfp = buf->b_ml.ml_mfp; in ml_delete_int()
3654 if ((hp = ml_find_line(buf, lnum, ML_DELETE)) == NULL) in ml_delete_int()
3659 count = (long)(buf->b_ml.ml_locked_high) in ml_delete_int()
3660 - (long)(buf->b_ml.ml_locked_low) + 2; in ml_delete_int()
3661 idx = lnum - buf->b_ml.ml_locked_low; in ml_delete_int()
3663 --buf->b_ml.ml_line_count; in ml_delete_int()
3673 netbeans_removed(buf, lnum, 0, (long)line_size); in ml_delete_int()
3678 if (buf->b_has_textprop && !(flags & (ML_DEL_UNDO | ML_DEL_NOPROP))) in ml_delete_int()
3702 buf->b_ml.ml_locked = NULL; in ml_delete_int()
3704 for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; in ml_delete_int()
3707 buf->b_ml.ml_stack_top = 0; // stack is invalid when failing in ml_delete_int()
3708 ip = &(buf->b_ml.ml_stack[stack_idx]); in ml_delete_int()
3729 buf->b_ml.ml_stack_top = stack_idx; // truncate stack in ml_delete_int()
3731 if (buf->b_ml.ml_locked_lineadd != 0) in ml_delete_int()
3733 ml_lineadd(buf, buf->b_ml.ml_locked_lineadd); in ml_delete_int()
3734 buf->b_ml.ml_stack[buf->b_ml.ml_stack_top].ip_high += in ml_delete_int()
3735 buf->b_ml.ml_locked_lineadd; in ml_delete_int()
3737 ++(buf->b_ml.ml_stack_top); in ml_delete_int()
3767 buf->b_ml.ml_flags |= (ML_LOCKED_DIRTY | ML_LOCKED_POS); in ml_delete_int()
3771 ml_updatechunk(buf, lnum, line_size in ml_delete_int()
3785 adjust_text_props_for_delete(buf, lnum - 1, textprop_save, in ml_delete_int()
3787 if (lnum <= buf->b_ml.ml_line_count) in ml_delete_int()
3788 adjust_text_props_for_delete(buf, lnum, textprop_save, in ml_delete_int()
3948 ml_flush_line(buf_T *buf) in ml_flush_line() argument
3964 if (buf->b_ml.ml_line_lnum == 0 || buf->b_ml.ml_mfp == NULL) in ml_flush_line()
3967 if (buf->b_ml.ml_flags & ML_LINE_DIRTY) in ml_flush_line()
3975 lnum = buf->b_ml.ml_line_lnum; in ml_flush_line()
3976 new_line = buf->b_ml.ml_line_ptr; in ml_flush_line()
3978 hp = ml_find_line(buf, lnum, ML_FIND); in ml_flush_line()
3984 idx = lnum - buf->b_ml.ml_locked_low; in ml_flush_line()
3991 new_len = buf->b_ml.ml_line_len; in ml_flush_line()
4003 count = buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low + 1; in ml_flush_line()
4021 if (buf->b_has_textprop) in ml_flush_line()
4027 buf->b_ml.ml_flags |= (ML_LOCKED_DIRTY | ML_LOCKED_POS); in ml_flush_line()
4030 if (buf->b_has_textprop) in ml_flush_line()
4037 ml_updatechunk(buf, lnum, (long)extra, ML_CHNK_UPDLINE); in ml_flush_line()
4050 (void)ml_append_int(buf, lnum, new_line, new_len, in ml_flush_line()
4056 (void)ml_delete_int(buf, lnum, ML_DEL_NOPROP); in ml_flush_line()
4064 buf->b_ml.ml_line_lnum = 0; in ml_flush_line()
4125 ml_find_line(buf_T *buf, linenr_T lnum, int action) in ml_find_line() argument
4140 mfp = buf->b_ml.ml_mfp; in ml_find_line()
4149 if (buf->b_ml.ml_locked) in ml_find_line()
4152 && buf->b_ml.ml_locked_low <= lnum in ml_find_line()
4153 && buf->b_ml.ml_locked_high >= lnum in ml_find_line()
4159 ++(buf->b_ml.ml_locked_lineadd); in ml_find_line()
4160 ++(buf->b_ml.ml_locked_high); in ml_find_line()
4164 --(buf->b_ml.ml_locked_lineadd); in ml_find_line()
4165 --(buf->b_ml.ml_locked_high); in ml_find_line()
4167 return (buf->b_ml.ml_locked); in ml_find_line()
4170 mf_put(mfp, buf->b_ml.ml_locked, buf->b_ml.ml_flags & ML_LOCKED_DIRTY, in ml_find_line()
4171 buf->b_ml.ml_flags & ML_LOCKED_POS); in ml_find_line()
4172 buf->b_ml.ml_locked = NULL; in ml_find_line()
4178 if (buf->b_ml.ml_locked_lineadd != 0) in ml_find_line()
4179 ml_lineadd(buf, buf->b_ml.ml_locked_lineadd); in ml_find_line()
4188 high = buf->b_ml.ml_line_count; in ml_find_line()
4192 for (top = buf->b_ml.ml_stack_top - 1; top >= 0; --top) in ml_find_line()
4194 ip = &(buf->b_ml.ml_stack[top]); in ml_find_line()
4200 buf->b_ml.ml_stack_top = top; // truncate stack at prev entry in ml_find_line()
4205 buf->b_ml.ml_stack_top = 0; // not found, start at the root in ml_find_line()
4208 buf->b_ml.ml_stack_top = 0; // start at the root in ml_find_line()
4229 buf->b_ml.ml_locked = hp; in ml_find_line()
4230 buf->b_ml.ml_locked_low = low; in ml_find_line()
4231 buf->b_ml.ml_locked_high = high; in ml_find_line()
4232 buf->b_ml.ml_locked_lineadd = 0; in ml_find_line()
4233 buf->b_ml.ml_flags &= ~(ML_LOCKED_DIRTY | ML_LOCKED_POS); in ml_find_line()
4244 if ((top = ml_add_stack(buf)) < 0) // add new entry to stack in ml_find_line()
4246 ip = &(buf->b_ml.ml_stack[top]); in ml_find_line()
4284 if (lnum > buf->b_ml.ml_line_count) in ml_find_line()
4286 lnum - buf->b_ml.ml_line_count); in ml_find_line()
4314 ml_lineadd(buf, 1); in ml_find_line()
4316 ml_lineadd(buf, -1); in ml_find_line()
4317 buf->b_ml.ml_stack_top = 0; in ml_find_line()
4327 ml_add_stack(buf_T *buf) in ml_add_stack() argument
4332 top = buf->b_ml.ml_stack_top; in ml_add_stack()
4335 if (top == buf->b_ml.ml_stack_size) in ml_add_stack()
4339 newstack = ALLOC_MULT(infoptr_T, buf->b_ml.ml_stack_size + STACK_INCR); in ml_add_stack()
4343 mch_memmove(newstack, buf->b_ml.ml_stack, in ml_add_stack()
4345 vim_free(buf->b_ml.ml_stack); in ml_add_stack()
4346 buf->b_ml.ml_stack = newstack; in ml_add_stack()
4347 buf->b_ml.ml_stack_size += STACK_INCR; in ml_add_stack()
4350 buf->b_ml.ml_stack_top++; in ml_add_stack()
4365 ml_lineadd(buf_T *buf, int count) in ml_lineadd() argument
4370 memfile_T *mfp = buf->b_ml.ml_mfp; in ml_lineadd()
4373 for (idx = buf->b_ml.ml_stack_top - 1; idx >= 0; --idx) in ml_lineadd()
4375 ip = &(buf->b_ml.ml_stack[idx]); in ml_lineadd()
4400 resolve_symlink(char_u *fname, char_u *buf) in resolve_symlink() argument
4421 ret = readlink((char *)tmp, (char *)buf, MAXPATHL - 1); in resolve_symlink()
4439 buf[ret] = NUL; in resolve_symlink()
4447 if (mch_isFullName(buf)) in resolve_symlink()
4448 STRCPY(tmp, buf); in resolve_symlink()
4454 if (STRLEN(tail) + STRLEN(buf) >= MAXPATHL) in resolve_symlink()
4456 STRCPY(tail, buf); in resolve_symlink()
4465 return vim_FullName(tmp, buf, MAXPATHL, TRUE); in resolve_symlink()
4477 buf_T *buf, in makeswapname() argument
4508 (buf->b_p_sn || buf->b_shortname), in makeswapname()
4589 buf_T *buf, // buffer being edited in attention_message() argument
4602 msg_outtrans(buf->b_fname); in attention_message()
4604 if (mch_stat((char *)buf->b_fname, &st) == -1) in attention_message()
4620 msg_outtrans(buf->b_fname); in attention_message()
4642 do_swapexists(buf_T *buf, char_u *fname) in do_swapexists() argument
4650 apply_autocmds(EVENT_SWAPEXISTS, buf->b_fname, NULL, FALSE, NULL); in do_swapexists()
4682 buf_T *buf, in findswapname() argument
4693 char_u *buf_fname = buf->b_fname; in findswapname()
4707 buf_fname = buf->b_fname; in findswapname()
4722 if (!(buf->b_p_sn || buf->b_shortname) && buf_fname != NULL in findswapname()
4743 fname = makeswapname(buf_fname, buf->b_ffname, buf, dir_name); in findswapname()
4761 && !(buf->b_p_sn || buf->b_shortname)) in findswapname()
4837 buf->b_shortname = TRUE; in findswapname()
4839 fname = makeswapname(buf_fname, buf->b_ffname, in findswapname()
4840 buf, dir_name); in findswapname()
4900 if (!(buf->b_p_sn || buf->b_shortname)) // not tried yet in findswapname()
4907 buf->b_shortname = TRUE; in findswapname()
4909 fname = makeswapname(buf_fname, buf->b_ffname, in findswapname()
4910 buf, dir_name); in findswapname()
4921 && !buf->b_help in findswapname()
4922 && !(buf->b_flags & (BF_DUMMY | BF_NO_SEA))) in findswapname()
4944 if (fnamecmp(gettail(buf->b_ffname), in findswapname()
4946 || !same_directory(fname, buf->b_ffname)) in findswapname()
4953 if (fnamecmp_ino(buf->b_ffname, NameBuff, in findswapname()
4967 if (fnamecmp_ino(buf->b_ffname, NameBuff, in findswapname()
4971 if (fnamecmp(NameBuff, buf->b_ffname) != 0) in findswapname()
5008 if (mch_stat((char *)buf->b_fname, &st) == 0 in findswapname()
5024 && has_autocmd(EVENT_SWAPEXISTS, buf_fname, buf)) in findswapname()
5025 choice = do_swapexists(buf, fname); in findswapname()
5039 attention_message(buf, fname); in findswapname()
5093 buf->b_p_ro = TRUE; in findswapname()
5162 if (buf_fname != buf->b_fname) in findswapname()
5316 ml_setflags(buf_T *buf) in ml_setflags() argument
5321 if (!buf->b_ml.ml_mfp) in ml_setflags()
5323 for (hp = buf->b_ml.ml_mfp->mf_used_last; hp != NULL; hp = hp->bh_prev) in ml_setflags()
5328 b0p->b0_dirty = buf->b_changed ? B0_DIRTY : 0; in ml_setflags()
5330 | (get_fileformat(buf) + 1); in ml_setflags()
5331 add_b0_fenc(b0p, buf); in ml_setflags()
5333 mf_sync(buf->b_ml.ml_mfp, MFS_ZERO); in ml_setflags()
5431 buf_T *buf = mfp->mf_buffer; in ml_crypt_prepare() local
5446 method_nr = crypt_get_method_nr(buf); in ml_crypt_prepare()
5447 key = buf->b_p_key; in ml_crypt_prepare()
5485 buf_T *buf, in ml_updatechunk() argument
5503 if (buf->b_ml.ml_usedchunks == -1 || len == 0) in ml_updatechunk()
5505 if (buf->b_ml.ml_chunksize == NULL) in ml_updatechunk()
5507 buf->b_ml.ml_chunksize = ALLOC_MULT(chunksize_T, 100); in ml_updatechunk()
5508 if (buf->b_ml.ml_chunksize == NULL) in ml_updatechunk()
5510 buf->b_ml.ml_usedchunks = -1; in ml_updatechunk()
5513 buf->b_ml.ml_numchunks = 100; in ml_updatechunk()
5514 buf->b_ml.ml_usedchunks = 1; in ml_updatechunk()
5515 buf->b_ml.ml_chunksize[0].mlcs_numlines = 1; in ml_updatechunk()
5516 buf->b_ml.ml_chunksize[0].mlcs_totalsize = 1; in ml_updatechunk()
5519 if (updtype == ML_CHNK_UPDLINE && buf->b_ml.ml_line_count == 1) in ml_updatechunk()
5524 buf->b_ml.ml_usedchunks = 1; in ml_updatechunk()
5525 buf->b_ml.ml_chunksize[0].mlcs_numlines = 1; in ml_updatechunk()
5526 buf->b_ml.ml_chunksize[0].mlcs_totalsize = (long)buf->b_ml.ml_line_len; in ml_updatechunk()
5534 if (buf != ml_upd_lastbuf || line != ml_upd_lastline + 1 in ml_updatechunk()
5538 curix < buf->b_ml.ml_usedchunks - 1 in ml_updatechunk()
5539 && line >= curline + buf->b_ml.ml_chunksize[curix].mlcs_numlines; in ml_updatechunk()
5541 curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines; in ml_updatechunk()
5543 else if (curix < buf->b_ml.ml_usedchunks - 1 in ml_updatechunk()
5544 && line >= curline + buf->b_ml.ml_chunksize[curix].mlcs_numlines) in ml_updatechunk()
5547 curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines; in ml_updatechunk()
5550 curchnk = buf->b_ml.ml_chunksize + curix; in ml_updatechunk()
5560 if (buf->b_ml.ml_usedchunks + 1 >= buf->b_ml.ml_numchunks) in ml_updatechunk()
5562 chunksize_T *t_chunksize = buf->b_ml.ml_chunksize; in ml_updatechunk()
5564 buf->b_ml.ml_numchunks = buf->b_ml.ml_numchunks * 3 / 2; in ml_updatechunk()
5565 buf->b_ml.ml_chunksize = vim_realloc(buf->b_ml.ml_chunksize, in ml_updatechunk()
5566 sizeof(chunksize_T) * buf->b_ml.ml_numchunks); in ml_updatechunk()
5567 if (buf->b_ml.ml_chunksize == NULL) in ml_updatechunk()
5571 buf->b_ml.ml_usedchunks = -1; in ml_updatechunk()
5576 if (buf->b_ml.ml_chunksize[curix].mlcs_numlines >= MLCS_MAXL) in ml_updatechunk()
5584 mch_memmove(buf->b_ml.ml_chunksize + curix + 1, in ml_updatechunk()
5585 buf->b_ml.ml_chunksize + curix, in ml_updatechunk()
5586 (buf->b_ml.ml_usedchunks - curix) * in ml_updatechunk()
5591 while (curline < buf->b_ml.ml_line_count in ml_updatechunk()
5594 if ((hp = ml_find_line(buf, curline, ML_FIND)) == NULL) in ml_updatechunk()
5596 buf->b_ml.ml_usedchunks = -1; in ml_updatechunk()
5600 count = (long)(buf->b_ml.ml_locked_high) - in ml_updatechunk()
5601 (long)(buf->b_ml.ml_locked_low) + 1; in ml_updatechunk()
5602 idx = curline - buf->b_ml.ml_locked_low; in ml_updatechunk()
5603 curline = buf->b_ml.ml_locked_high + 1; in ml_updatechunk()
5618 if (buf->b_has_textprop) in ml_updatechunk()
5638 buf->b_ml.ml_chunksize[curix].mlcs_numlines = linecnt; in ml_updatechunk()
5639 buf->b_ml.ml_chunksize[curix + 1].mlcs_numlines -= linecnt; in ml_updatechunk()
5640 buf->b_ml.ml_chunksize[curix].mlcs_totalsize = size; in ml_updatechunk()
5641 buf->b_ml.ml_chunksize[curix + 1].mlcs_totalsize -= size; in ml_updatechunk()
5642 buf->b_ml.ml_usedchunks++; in ml_updatechunk()
5646 else if (buf->b_ml.ml_chunksize[curix].mlcs_numlines >= MLCS_MINL in ml_updatechunk()
5647 && curix == buf->b_ml.ml_usedchunks - 1 in ml_updatechunk()
5648 && buf->b_ml.ml_line_count - line <= 1) in ml_updatechunk()
5654 curchnk = buf->b_ml.ml_chunksize + curix + 1; in ml_updatechunk()
5655 buf->b_ml.ml_usedchunks++; in ml_updatechunk()
5656 if (line == buf->b_ml.ml_line_count) in ml_updatechunk()
5667 hp = ml_find_line(buf, buf->b_ml.ml_line_count, ML_FIND); in ml_updatechunk()
5670 buf->b_ml.ml_usedchunks = -1; in ml_updatechunk()
5691 if (curix < (buf->b_ml.ml_usedchunks - 1) in ml_updatechunk()
5696 curchnk = buf->b_ml.ml_chunksize + curix; in ml_updatechunk()
5700 buf->b_ml.ml_usedchunks--; in ml_updatechunk()
5701 mch_memmove(buf->b_ml.ml_chunksize, buf->b_ml.ml_chunksize + 1, in ml_updatechunk()
5702 buf->b_ml.ml_usedchunks * sizeof(chunksize_T)); in ml_updatechunk()
5715 buf->b_ml.ml_usedchunks--; in ml_updatechunk()
5716 if (curix < buf->b_ml.ml_usedchunks) in ml_updatechunk()
5718 mch_memmove(buf->b_ml.ml_chunksize + curix, in ml_updatechunk()
5719 buf->b_ml.ml_chunksize + curix + 1, in ml_updatechunk()
5720 (buf->b_ml.ml_usedchunks - curix) * in ml_updatechunk()
5725 ml_upd_lastbuf = buf; in ml_updatechunk()
5738 ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp) in ml_find_line_or_offset() argument
5751 int ffdos = (get_fileformat(buf) == EOL_DOS); in ml_find_line_or_offset()
5757 if (buf->b_ml.ml_usedchunks == -1 in ml_find_line_or_offset()
5758 || buf->b_ml.ml_chunksize == NULL in ml_find_line_or_offset()
5774 while (curix < buf->b_ml.ml_usedchunks - 1 in ml_find_line_or_offset()
5776 && lnum >= curline + buf->b_ml.ml_chunksize[curix].mlcs_numlines) in ml_find_line_or_offset()
5778 && offset > size + buf->b_ml.ml_chunksize[curix].mlcs_totalsize in ml_find_line_or_offset()
5779 + ffdos * buf->b_ml.ml_chunksize[curix].mlcs_numlines))) in ml_find_line_or_offset()
5781 curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines; in ml_find_line_or_offset()
5782 size += buf->b_ml.ml_chunksize[curix].mlcs_totalsize; in ml_find_line_or_offset()
5784 size += buf->b_ml.ml_chunksize[curix].mlcs_numlines; in ml_find_line_or_offset()
5794 if (curline > buf->b_ml.ml_line_count in ml_find_line_or_offset()
5795 || (hp = ml_find_line(buf, curline, ML_FIND)) == NULL) in ml_find_line_or_offset()
5798 count = (long)(buf->b_ml.ml_locked_high) - in ml_find_line_or_offset()
5799 (long)(buf->b_ml.ml_locked_low) + 1; in ml_find_line_or_offset()
5800 start_idx = idx = curline - buf->b_ml.ml_locked_low; in ml_find_line_or_offset()
5821 if (buf->b_has_textprop) in ml_find_line_or_offset()
5854 if (buf->b_has_textprop && lnum != 0) in ml_find_line_or_offset()
5889 if (curline > buf->b_ml.ml_line_count) in ml_find_line_or_offset()
5893 curline = buf->b_ml.ml_locked_high + 1; in ml_find_line_or_offset()
5904 if ((!buf->b_p_fixeol || buf->b_p_bin) && !buf->b_p_eol in ml_find_line_or_offset()
5905 && lnum > buf->b_ml.ml_line_count) in ml_find_line_or_offset()