Lines Matching refs:hp
81 static int mf_write_block(memfile_T *mfp, bhdr_T *hp, off_T offset, unsigned size);
238 bhdr_T *hp, *nextp; in mf_close() local
250 for (hp = mfp->mf_used_first; hp != NULL; hp = nextp) in mf_close()
252 total_mem_used -= hp->bh_page_count * mfp->mf_page_size; in mf_close()
253 nextp = hp->bh_next; in mf_close()
254 mf_free_bhdr(hp); in mf_close()
323 bhdr_T *hp; // new bhdr_T in mf_new() local
331 hp = mf_release(mfp, page_count); in mf_new()
354 if (hp == NULL && (hp = mf_alloc_bhdr(mfp, page_count)) == NULL) in mf_new()
356 hp->bh_bnum = freep->bh_bnum; in mf_new()
360 else if (hp == NULL) // need to allocate memory for this block in mf_new()
364 hp = mf_rem_free(mfp); in mf_new()
365 hp->bh_data = p; in mf_new()
370 hp->bh_bnum = freep->bh_bnum; in mf_new()
376 if (hp == NULL && (hp = mf_alloc_bhdr(mfp, page_count)) == NULL) in mf_new()
380 hp->bh_bnum = mfp->mf_blocknr_min--; in mf_new()
385 hp->bh_bnum = mfp->mf_blocknr_max; in mf_new()
389 hp->bh_flags = BH_LOCKED | BH_DIRTY; // new block is always dirty in mf_new()
391 hp->bh_page_count = page_count; in mf_new()
392 mf_ins_used(mfp, hp); in mf_new()
393 mf_ins_hash(mfp, hp); in mf_new()
399 (void)vim_memset((char *)(hp->bh_data), 0, in mf_new()
402 return hp; in mf_new()
413 bhdr_T *hp; in mf_get() local
421 hp = mf_find_hash(mfp, nr); in mf_get()
422 if (hp == NULL) // not in the hash list in mf_get()
434 hp = mf_release(mfp, page_count); in mf_get()
435 if (hp == NULL && (hp = mf_alloc_bhdr(mfp, page_count)) == NULL) in mf_get()
438 hp->bh_bnum = nr; in mf_get()
439 hp->bh_flags = 0; in mf_get()
440 hp->bh_page_count = page_count; in mf_get()
441 if (mf_read(mfp, hp) == FAIL) // cannot read the block! in mf_get()
443 mf_free_bhdr(hp); in mf_get()
449 mf_rem_used(mfp, hp); // remove from list, insert in front below in mf_get()
450 mf_rem_hash(mfp, hp); in mf_get()
453 hp->bh_flags |= BH_LOCKED; in mf_get()
454 mf_ins_used(mfp, hp); // put in front of used list in mf_get()
455 mf_ins_hash(mfp, hp); // put in front of hash list in mf_get()
457 return hp; in mf_get()
471 bhdr_T *hp, in mf_put() argument
477 flags = hp->bh_flags; in mf_put()
487 hp->bh_flags = flags; in mf_put()
489 mf_trans_add(mfp, hp); // may translate negative in positive nr in mf_put()
496 mf_free(memfile_T *mfp, bhdr_T *hp) in mf_free() argument
498 vim_free(hp->bh_data); // free the memory in mf_free()
499 mf_rem_hash(mfp, hp); // get *hp out of the hash list in mf_free()
500 mf_rem_used(mfp, hp); // get *hp out of the used list in mf_free()
501 if (hp->bh_bnum < 0) in mf_free()
503 vim_free(hp); // don't want negative numbers in free list in mf_free()
507 mf_ins_free(mfp, hp); // put *hp in the free list in mf_free()
527 bhdr_T *hp; in mf_sync() local
547 for (hp = mfp->mf_used_last; hp != NULL; hp = hp->bh_prev) in mf_sync()
548 if (((flags & MFS_ALL) || hp->bh_bnum >= 0) in mf_sync()
549 && (hp->bh_flags & BH_DIRTY) in mf_sync()
550 && (status == OK || (hp->bh_bnum >= 0 in mf_sync()
551 && hp->bh_bnum < mfp->mf_infile_count))) in mf_sync()
553 if ((flags & MFS_ZERO) && hp->bh_bnum != 0) in mf_sync()
555 if (mf_write(mfp, hp) == FAIL) in mf_sync()
577 if (hp == NULL || status == FAIL) in mf_sync()
672 bhdr_T *hp; in mf_set_dirty() local
674 for (hp = mfp->mf_used_last; hp != NULL; hp = hp->bh_prev) in mf_set_dirty()
675 if (hp->bh_bnum > 0) in mf_set_dirty()
676 hp->bh_flags |= BH_DIRTY; in mf_set_dirty()
684 mf_ins_hash(memfile_T *mfp, bhdr_T *hp) in mf_ins_hash() argument
686 mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp); in mf_ins_hash()
693 mf_rem_hash(memfile_T *mfp, bhdr_T *hp) in mf_rem_hash() argument
695 mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp); in mf_rem_hash()
711 mf_ins_used(memfile_T *mfp, bhdr_T *hp) in mf_ins_used() argument
713 hp->bh_next = mfp->mf_used_first; in mf_ins_used()
714 mfp->mf_used_first = hp; in mf_ins_used()
715 hp->bh_prev = NULL; in mf_ins_used()
716 if (hp->bh_next == NULL) // list was empty, adjust last pointer in mf_ins_used()
717 mfp->mf_used_last = hp; in mf_ins_used()
719 hp->bh_next->bh_prev = hp; in mf_ins_used()
720 mfp->mf_used_count += hp->bh_page_count; in mf_ins_used()
721 total_mem_used += hp->bh_page_count * mfp->mf_page_size; in mf_ins_used()
728 mf_rem_used(memfile_T *mfp, bhdr_T *hp) in mf_rem_used() argument
730 if (hp->bh_next == NULL) // last block in used list in mf_rem_used()
731 mfp->mf_used_last = hp->bh_prev; in mf_rem_used()
733 hp->bh_next->bh_prev = hp->bh_prev; in mf_rem_used()
734 if (hp->bh_prev == NULL) // first block in used list in mf_rem_used()
735 mfp->mf_used_first = hp->bh_next; in mf_rem_used()
737 hp->bh_prev->bh_next = hp->bh_next; in mf_rem_used()
738 mfp->mf_used_count -= hp->bh_page_count; in mf_rem_used()
739 total_mem_used -= hp->bh_page_count * mfp->mf_page_size; in mf_rem_used()
754 bhdr_T *hp; in mf_release() local
794 for (hp = mfp->mf_used_last; hp != NULL; hp = hp->bh_prev) in mf_release()
795 if (!(hp->bh_flags & BH_LOCKED)) in mf_release()
797 if (hp == NULL) // not a single one that can be released in mf_release()
804 if ((hp->bh_flags & BH_DIRTY) && mf_write(mfp, hp) == FAIL) in mf_release()
807 mf_rem_used(mfp, hp); in mf_release()
808 mf_rem_hash(mfp, hp); in mf_release()
814 if (hp->bh_page_count != page_count) in mf_release()
816 vim_free(hp->bh_data); in mf_release()
817 if ((hp->bh_data = alloc(mfp->mf_page_size * page_count)) == NULL) in mf_release()
819 vim_free(hp); in mf_release()
822 hp->bh_page_count = page_count; in mf_release()
824 return hp; in mf_release()
838 bhdr_T *hp; in mf_release_all() local
853 for (hp = mfp->mf_used_last; hp != NULL; ) in mf_release_all()
855 if (!(hp->bh_flags & BH_LOCKED) in mf_release_all()
856 && (!(hp->bh_flags & BH_DIRTY) in mf_release_all()
857 || mf_write(mfp, hp) != FAIL)) in mf_release_all()
859 mf_rem_used(mfp, hp); in mf_release_all()
860 mf_rem_hash(mfp, hp); in mf_release_all()
861 mf_free_bhdr(hp); in mf_release_all()
862 hp = mfp->mf_used_last; // re-start, list was changed in mf_release_all()
866 hp = hp->bh_prev; in mf_release_all()
880 bhdr_T *hp; in mf_alloc_bhdr() local
882 if ((hp = ALLOC_ONE(bhdr_T)) != NULL) in mf_alloc_bhdr()
884 if ((hp->bh_data = alloc(mfp->mf_page_size * page_count)) == NULL) in mf_alloc_bhdr()
886 vim_free(hp); // not enough memory in mf_alloc_bhdr()
889 hp->bh_page_count = page_count; in mf_alloc_bhdr()
891 return hp; in mf_alloc_bhdr()
898 mf_free_bhdr(bhdr_T *hp) in mf_free_bhdr() argument
900 vim_free(hp->bh_data); in mf_free_bhdr()
901 vim_free(hp); in mf_free_bhdr()
908 mf_ins_free(memfile_T *mfp, bhdr_T *hp) in mf_ins_free() argument
910 hp->bh_next = mfp->mf_free_first; in mf_ins_free()
911 mfp->mf_free_first = hp; in mf_ins_free()
921 bhdr_T *hp; in mf_rem_free() local
923 hp = mfp->mf_free_first; in mf_rem_free()
924 mfp->mf_free_first = hp->bh_next; in mf_rem_free()
925 return hp; in mf_rem_free()
934 mf_read(memfile_T *mfp, bhdr_T *hp) in mf_read() argument
944 offset = (off_T)page_size * hp->bh_bnum; in mf_read()
945 size = page_size * hp->bh_page_count; in mf_read()
951 if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size) in mf_read()
961 ml_decrypt_data(mfp, hp->bh_data, offset, size); in mf_read()
973 mf_write(memfile_T *mfp, bhdr_T *hp) in mf_write() argument
986 if (hp->bh_bnum < 0) // must assign file block number in mf_write()
987 if (mf_trans_add(mfp, hp) == FAIL) in mf_write()
1002 nr = hp->bh_bnum; in mf_write()
1009 hp2 = hp; in mf_write()
1028 hp2 == NULL ? hp : hp2, offset, size) == OK) in mf_write()
1061 if (nr == hp->bh_bnum) // written the desired block in mf_write()
1075 bhdr_T *hp, in mf_write_block() argument
1079 char_u *data = hp->bh_data; in mf_write_block()
1096 if (data != hp->bh_data) in mf_write_block()
1109 mf_trans_add(memfile_T *mfp, bhdr_T *hp) in mf_trans_add() argument
1116 if (hp->bh_bnum >= 0) // it's already positive in mf_trans_add()
1128 page_count = hp->bh_page_count; in mf_trans_add()
1153 np->nt_old_bnum = hp->bh_bnum; // adjust number in mf_trans_add()
1156 mf_rem_hash(mfp, hp); // remove from old hash list in mf_trans_add()
1157 hp->bh_bnum = new_bnum; in mf_trans_add()
1158 mf_ins_hash(mfp, hp); // insert in new hash list in mf_trans_add()