diff options
Diffstat (limited to 'source/ap/vim/patches/7.3.143')
-rw-r--r-- | source/ap/vim/patches/7.3.143 | 1520 |
1 files changed, 0 insertions, 1520 deletions
diff --git a/source/ap/vim/patches/7.3.143 b/source/ap/vim/patches/7.3.143 deleted file mode 100644 index 82585b0e..00000000 --- a/source/ap/vim/patches/7.3.143 +++ /dev/null @@ -1,1520 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 7.3.143 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.3.143 -Problem: Memfile is not tested sufficiently. Looking up blocks in a - memfile is slow when there are many blocks. -Solution: Add high level test and unittest. Adjust the number of hash - buckets to the number of blocks. (Ivan Krasilnikov) -Files: Filelist, src/Makefile, src/main.c, src/memfile.c, - src/memfile_test.c src/structs.h src/testdir/Make_amiga.mak, - src/testdir/Make_dos.mak, src/testdir/Make_ming.mak, - src/testdir/Make_os2.mak, src/testdir/Make_vms.mak, - src/testdir/Makefile, src/testdir/test77.in, src/testdir/test77.ok - - -*** ../vim-7.3.142/Filelist 2010-08-15 21:57:20.000000000 +0200 ---- Filelist 2011-03-22 17:39:22.000000000 +0100 -*************** -*** 39,44 **** ---- 39,45 ---- - src/mark.c \ - src/mbyte.c \ - src/memfile.c \ -+ src/memfile_test.c \ - src/memline.c \ - src/menu.c \ - src/message.c \ -*************** -*** 686,691 **** ---- 687,694 ---- - runtime/tutor/tutor.utf-8 \ - runtime/tutor/tutor.?? \ - runtime/tutor/tutor.??.* \ -+ runtime/tutor/tutor.bar \ -+ runtime/tutor/tutor.bar.* \ - runtime/spell/README.txt \ - runtime/spell/??/*.diff \ - runtime/spell/??/main.aap \ -*** ../vim-7.3.142/src/Makefile 2011-02-15 15:27:00.000000000 +0100 ---- src/Makefile 2011-03-22 18:07:25.000000000 +0100 -*************** -*** 561,567 **** - #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes - - # Use this with GCC to check for mistakes, unused arguments, etc. -! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 -DU_DEBUG - #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG - #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers - #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter ---- 561,567 ---- - #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes - - # Use this with GCC to check for mistakes, unused arguments, etc. -! #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 - #CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG - #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers - #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter -*************** -*** 594,601 **** - - # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. - # Might not work with GUI or Perl. -! # For unknown reasons adding "-lc" fixes a linking problem with GCC. That's -! # probably a bug in the "-pg" implementation. - # Need to recompile everything after changing this: "make clean" "make". - #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING - #PROFILE_LIBS = -pg ---- 594,602 ---- - - # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. - # Might not work with GUI or Perl. -! # For unknown reasons adding "-lc" fixes a linking problem with some versions -! # of GCC. That's probably a bug in the "-pg" implementation. -! # After running Vim see the profile result with: gmon vim gmon.out | vim - - # Need to recompile everything after changing this: "make clean" "make". - #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING - #PROFILE_LIBS = -pg -*************** -*** 606,613 **** - # Configuration is in the .ccmalloc or ~/.ccmalloc file. - # Doesn't work very well, since memory linked to from global variables - # (in libraries) is also marked as leaked memory. -! #PROFILE_CFLAGS = -DEXITFREE -! #PROFILE_LIBS = -lccmalloc - - ##################################################### - ### Specific systems, check if yours is listed! ### {{{ ---- 607,614 ---- - # Configuration is in the .ccmalloc or ~/.ccmalloc file. - # Doesn't work very well, since memory linked to from global variables - # (in libraries) is also marked as leaked memory. -! #LEAK_CFLAGS = -DEXITFREE -! #LEAK_LIBS = -lccmalloc - - ##################################################### - ### Specific systems, check if yours is listed! ### {{{ -*************** -*** 1329,1335 **** - PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS) - POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS) - -! ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS) - - # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together - # with "-E". ---- 1330,1336 ---- - PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS) - POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS) - -! ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(LEAK_CFLAGS) $(POST_DEFS) - - # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together - # with "-E". -*************** -*** 1358,1364 **** - $(PYTHON3_LIBS) \ - $(TCL_LIBS) \ - $(RUBY_LIBS) \ -! $(PROFILE_LIBS) - - # abbreviations - DEST_BIN = $(DESTDIR)$(BINDIR) ---- 1359,1366 ---- - $(PYTHON3_LIBS) \ - $(TCL_LIBS) \ - $(RUBY_LIBS) \ -! $(PROFILE_LIBS) \ -! $(LEAK_LIBS) - - # abbreviations - DEST_BIN = $(DESTDIR)$(BINDIR) -*************** -*** 1480,1487 **** - if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \ - gui_beval.c workshop.c wsdebug.c integration.c netbeans.c - - # All sources, also the ones that are not configured -! ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC) - - # Which files to check with lint. Select one of these three lines. ALL_SRC - # checks more, but may not work well for checking a GUI that wasn't configured. ---- 1482,1496 ---- - if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \ - gui_beval.c workshop.c wsdebug.c integration.c netbeans.c - -+ # Unittest files -+ MEMFILE_TEST_SRC = memfile_test.c -+ MEMFILE_TEST_TARGET = memfile_test$(EXEEXT) -+ -+ UNITTEST_SRC = $(MEMFILE_TEST_SRC) -+ UNITTEST_TARGETS = $(MEMFILE_TEST_TARGET) -+ - # All sources, also the ones that are not configured -! ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC) - - # Which files to check with lint. Select one of these three lines. ALL_SRC - # checks more, but may not work well for checking a GUI that wasn't configured. -*************** -*** 1492,1498 **** - #LINT_SRC = $(ALL_SRC) - #LINT_SRC = $(BASIC_SRC) - -! OBJ = \ - objects/buffer.o \ - objects/blowfish.o \ - objects/charset.o \ ---- 1501,1507 ---- - #LINT_SRC = $(ALL_SRC) - #LINT_SRC = $(BASIC_SRC) - -! OBJ_COMMON = \ - objects/buffer.o \ - objects/blowfish.o \ - objects/charset.o \ -*************** -*** 1513,1522 **** - $(HANGULIN_OBJ) \ - objects/if_cscope.o \ - objects/if_xcmdsrv.o \ -- objects/main.o \ - objects/mark.o \ -! objects/memfile.o \ -! objects/memline.o \ - objects/menu.o \ - objects/message.o \ - objects/misc1.o \ ---- 1522,1529 ---- - $(HANGULIN_OBJ) \ - objects/if_cscope.o \ - objects/if_xcmdsrv.o \ - objects/mark.o \ -! objects/memline.o \ - objects/menu.o \ - objects/message.o \ - objects/misc1.o \ -*************** -*** 1541,1546 **** ---- 1548,1554 ---- - objects/term.o \ - objects/ui.o \ - objects/undo.o \ -+ objects/version.o \ - objects/window.o \ - $(GUI_OBJ) \ - $(LUA_OBJ) \ -*************** -*** 1555,1560 **** ---- 1563,1575 ---- - $(NETBEANS_OBJ) \ - $(WSDEBUG_OBJ) - -+ OBJ = $(OBJ_COMMON) \ -+ objects/main.o \ -+ objects/memfile.o \ -+ -+ MEMFILE_TEST_OBJ = $(OBJ_COMMON) \ -+ objects/memfile_test.o -+ - PRO_AUTO = \ - blowfish.pro \ - buffer.pro \ -*************** -*** 1700,1706 **** - $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h - $(CCC) version.c -o objects/version.o - @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \ -! -o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \ - MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \ - sh $(srcdir)/link.sh - ---- 1715,1721 ---- - $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h - $(CCC) version.c -o objects/version.o - @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \ -! -o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \ - MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \ - sh $(srcdir)/link.sh - -*************** -*** 1825,1830 **** ---- 1840,1854 ---- - ln -s $(VIMTARGET) vim; \ - fi - cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) -+ $(MAKE) -f Makefile unittest -+ -+ unittesttargets: -+ $(MAKE) -f Makefile $(UNITTEST_TARGETS) -+ -+ unittest unittests: $(UNITTEST_TARGETS) -+ @for t in $(UNITTEST_TARGETS); do \ -+ ./$$t || exit 1; echo $$t passed; \ -+ done - - testclean: - cd testdir; $(MAKE) -f Makefile clean -*************** -*** 1832,1837 **** ---- 1856,1872 ---- - cd $(PODIR); $(MAKE) checkclean; \ - fi - -+ # Unittests -+ # It's build just like Vim to satisfy all dependencies. -+ $(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ) -+ $(CCC) version.c -o objects/version.o -+ @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \ -+ -o $(MEMFILE_TEST_TARGET) $(MEMFILE_TEST_OBJ) $(ALL_LIBS)" \ -+ MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \ -+ sh $(srcdir)/link.sh -+ -+ # install targets -+ - install: $(GUI_INSTALL) - - install_normal: installvim installtools $(INSTALL_LANGS) install-icons -*************** -*** 2265,2270 **** ---- 2300,2306 ---- - -rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o - -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c - -rm -f conftest* *~ auto/link.sed -+ -rm -f $(UNITTEST_TARGETS) - -rm -f runtime pixmaps - -rm -rf $(APPDIR) - -rm -rf mzscheme_base.c -*************** -*** 2559,2564 **** ---- 2595,2603 ---- - objects/memfile.o: memfile.c - $(CCC) -o $@ memfile.c - -+ objects/memfile_test.o: memfile_test.c -+ $(CCC) -o $@ memfile_test.c -+ - objects/memline.o: memline.c - $(CCC) -o $@ memline.c - -*************** -*** 2877,2883 **** - objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \ - ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ - gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ -! arabic.h if_mzsch.h os_unixx.h - objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ ---- 2916,2922 ---- - objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \ - ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ - gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ -! arabic.h os_unixx.h - objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ -*************** -*** 3016,3021 **** ---- 3055,3064 ---- - objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \ - keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \ - proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h arabic.h -+ objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \ -+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \ -+ structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h \ -+ proto.h globals.h farsi.h arabic.h farsi.c arabic.c memfile.c - objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ -*************** -*** 3027,3033 **** - objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ -! globals.h farsi.h arabic.h if_mzsch.h mzscheme_base.c - objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ ---- 3070,3076 ---- - objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ -! globals.h farsi.h arabic.h if_mzsch.h - objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \ - regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \ -*************** -*** 3048,3054 **** - ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ - gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ - arabic.h -! objects/if_ruby.o: if_ruby.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \ - ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ - gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ - arabic.h version.h ---- 3091,3097 ---- - ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ - gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ - arabic.h -! objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \ - ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \ - gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \ - arabic.h version.h -*** ../vim-7.3.142/src/main.c 2011-02-15 16:29:54.000000000 +0100 ---- src/main.c 2011-03-18 13:19:48.000000000 +0100 -*************** -*** 92,128 **** - #define EDIT_TAG 3 /* tag name argument given, use tagname */ - #define EDIT_QF 4 /* start in quickfix mode */ - -! #if defined(UNIX) || defined(VMS) - static int file_owned __ARGS((char *fname)); - #endif - static void mainerr __ARGS((int, char_u *)); - static void main_msg __ARGS((char *s)); - static void usage __ARGS((void)); - static int get_number_arg __ARGS((char_u *p, int *idx, int def)); -! #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) - static void init_locale __ARGS((void)); -! #endif - static void parse_command_name __ARGS((mparm_T *parmp)); - static void early_arg_scan __ARGS((mparm_T *parmp)); - static void command_line_scan __ARGS((mparm_T *parmp)); - static void check_tty __ARGS((mparm_T *parmp)); - static void read_stdin __ARGS((void)); - static void create_windows __ARGS((mparm_T *parmp)); -! #ifdef FEAT_WINDOWS - static void edit_buffers __ARGS((mparm_T *parmp)); -! #endif - static void exe_pre_commands __ARGS((mparm_T *parmp)); - static void exe_commands __ARGS((mparm_T *parmp)); - static void source_startup_scripts __ARGS((mparm_T *parmp)); - static void main_start_gui __ARGS((void)); -! #if defined(HAS_SWAP_EXISTS_ACTION) - static void check_swap_exists_action __ARGS((void)); -! #endif -! #ifdef FEAT_CLIENTSERVER - static void exec_on_server __ARGS((mparm_T *parmp)); - static void prepare_server __ARGS((mparm_T *parmp)); - static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr)); - static char_u *serverMakeName __ARGS((char_u *arg, char *cmd)); - #endif - - ---- 92,130 ---- - #define EDIT_TAG 3 /* tag name argument given, use tagname */ - #define EDIT_QF 4 /* start in quickfix mode */ - -! #if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN) - static int file_owned __ARGS((char *fname)); - #endif - static void mainerr __ARGS((int, char_u *)); -+ #ifndef NO_VIM_MAIN - static void main_msg __ARGS((char *s)); - static void usage __ARGS((void)); - static int get_number_arg __ARGS((char_u *p, int *idx, int def)); -! # if defined(HAVE_LOCALE_H) || defined(X_LOCALE) - static void init_locale __ARGS((void)); -! # endif - static void parse_command_name __ARGS((mparm_T *parmp)); - static void early_arg_scan __ARGS((mparm_T *parmp)); - static void command_line_scan __ARGS((mparm_T *parmp)); - static void check_tty __ARGS((mparm_T *parmp)); - static void read_stdin __ARGS((void)); - static void create_windows __ARGS((mparm_T *parmp)); -! # ifdef FEAT_WINDOWS - static void edit_buffers __ARGS((mparm_T *parmp)); -! # endif - static void exe_pre_commands __ARGS((mparm_T *parmp)); - static void exe_commands __ARGS((mparm_T *parmp)); - static void source_startup_scripts __ARGS((mparm_T *parmp)); - static void main_start_gui __ARGS((void)); -! # if defined(HAS_SWAP_EXISTS_ACTION) - static void check_swap_exists_action __ARGS((void)); -! # endif -! # if defined(FEAT_CLIENTSERVER) || defined(PROTO) - static void exec_on_server __ARGS((mparm_T *parmp)); - static void prepare_server __ARGS((mparm_T *parmp)); - static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr)); - static char_u *serverMakeName __ARGS((char_u *arg, char *cmd)); -+ # endif - #endif - - -*************** -*** 145,151 **** - #define ME_INVALID_ARG 5 - }; - -! #ifndef PROTO /* don't want a prototype for main() */ - int - # ifdef VIMDLL - _export ---- 147,154 ---- - #define ME_INVALID_ARG 5 - }; - -! #ifndef NO_VIM_MAIN /* skip this for unittests */ -! #ifndef PROTO /* don't want a prototype for main() */ - int - # ifdef VIMDLL - _export -*************** -*** 966,971 **** ---- 969,975 ---- - return 0; - } - #endif /* PROTO */ -+ #endif /* NO_VIM_MAIN */ - - /* - * Main loop: Execute Normal mode commands until exiting Vim. -*************** -*** 1430,1435 **** ---- 1434,1440 ---- - mch_exit(exitval); - } - -+ #ifndef NO_VIM_MAIN - /* - * Get a (optional) count for a Vim argument. - */ -*************** -*** 2994,2999 **** ---- 2999,3006 ---- - #endif - } - -+ #endif /* NO_VIM_MAIN */ -+ - /* - * Get an environment variable, and execute it as Ex commands. - * Returns FAIL if the environment variable was not executed, OK otherwise. -*************** -*** 3033,3039 **** - return FAIL; - } - -! #if defined(UNIX) || defined(VMS) - /* - * Return TRUE if we are certain the user owns the file "fname". - * Used for ".vimrc" and ".exrc". ---- 3040,3046 ---- - return FAIL; - } - -! #if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN) - /* - * Return TRUE if we are certain the user owns the file "fname". - * Used for ".vimrc" and ".exrc". -*************** -*** 3091,3096 **** ---- 3098,3104 ---- - mainerr(ME_ARG_MISSING, str); - } - -+ #ifndef NO_VIM_MAIN - /* - * print a message with three spaces prepended and '\n' appended. - */ -*************** -*** 3311,3316 **** ---- 3319,3326 ---- - } - #endif - -+ #endif -+ - #if defined(STARTUPTIME) || defined(PROTO) - static void time_diff __ARGS((struct timeval *then, struct timeval *now)); - -*************** -*** 3420,3426 **** - - #endif - -! #if defined(FEAT_CLIENTSERVER) || defined(PROTO) - - /* - * Common code for the X command server and the Win32 command server. ---- 3430,3436 ---- - - #endif - -! #if (defined(FEAT_CLIENTSERVER) && !defined(NO_VIM_MAIN)) || defined(PROTO) - - /* - * Common code for the X command server and the Win32 command server. -*************** -*** 3888,3893 **** ---- 3898,3929 ---- - } - - /* -+ * Make our basic server name: use the specified "arg" if given, otherwise use -+ * the tail of the command "cmd" we were started with. -+ * Return the name in allocated memory. This doesn't include a serial number. -+ */ -+ static char_u * -+ serverMakeName(arg, cmd) -+ char_u *arg; -+ char *cmd; -+ { -+ char_u *p; -+ -+ if (arg != NULL && *arg != NUL) -+ p = vim_strsave_up(arg); -+ else -+ { -+ p = vim_strsave_up(gettail((char_u *)cmd)); -+ /* Remove .exe or .bat from the name. */ -+ if (p != NULL && vim_strchr(p, '.') != NULL) -+ *vim_strchr(p, '.') = NUL; -+ } -+ return p; -+ } -+ #endif /* FEAT_CLIENTSERVER */ -+ -+ #if defined(FEAT_CLIENTSERVER) || defined(PROTO) -+ /* - * Replace termcodes such as <CR> and insert as key presses if there is room. - */ - void -*************** -*** 3998,4029 **** - # endif - return res; - } -! -! -! /* -! * Make our basic server name: use the specified "arg" if given, otherwise use -! * the tail of the command "cmd" we were started with. -! * Return the name in allocated memory. This doesn't include a serial number. -! */ -! static char_u * -! serverMakeName(arg, cmd) -! char_u *arg; -! char *cmd; -! { -! char_u *p; -! -! if (arg != NULL && *arg != NUL) -! p = vim_strsave_up(arg); -! else -! { -! p = vim_strsave_up(gettail((char_u *)cmd)); -! /* Remove .exe or .bat from the name. */ -! if (p != NULL && vim_strchr(p, '.') != NULL) -! *vim_strchr(p, '.') = NUL; -! } -! return p; -! } -! #endif /* FEAT_CLIENTSERVER */ - - /* - * When FEAT_FKMAP is defined, also compile the Farsi source code. ---- 4034,4040 ---- - # endif - return res; - } -! #endif - - /* - * When FEAT_FKMAP is defined, also compile the Farsi source code. -*** ../vim-7.3.142/src/memfile.c 2010-12-17 18:06:00.000000000 +0100 ---- src/memfile.c 2011-03-03 18:47:39.000000000 +0100 -*************** -*** 84,89 **** ---- 84,96 ---- - static int mf_write_block __ARGS((memfile_T *mfp, bhdr_T *hp, off_t offset, unsigned size)); - static int mf_trans_add __ARGS((memfile_T *, bhdr_T *)); - static void mf_do_open __ARGS((memfile_T *, char_u *, int)); -+ static void mf_hash_init __ARGS((mf_hashtab_T *)); -+ static void mf_hash_free __ARGS((mf_hashtab_T *)); -+ static void mf_hash_free_all __ARGS((mf_hashtab_T *)); -+ static mf_hashitem_T *mf_hash_find __ARGS((mf_hashtab_T *, blocknr_T)); -+ static void mf_hash_add_item __ARGS((mf_hashtab_T *, mf_hashitem_T *)); -+ static void mf_hash_rem_item __ARGS((mf_hashtab_T *, mf_hashitem_T *)); -+ static int mf_hash_grow __ARGS((mf_hashtab_T *)); - - /* - * The functions for using a memfile: -*************** -*** 119,125 **** - int flags; - { - memfile_T *mfp; -- int i; - off_t size; - #if defined(STATFS) && defined(UNIX) && !defined(__QNX__) - # define USE_FSTATFS ---- 126,131 ---- -*************** -*** 152,162 **** - mfp->mf_used_last = NULL; - mfp->mf_dirty = FALSE; - mfp->mf_used_count = 0; -! for (i = 0; i < MEMHASHSIZE; ++i) -! { -! mfp->mf_hash[i] = NULL; /* hash lists are empty */ -! mfp->mf_trans[i] = NULL; /* trans lists are empty */ -! } - mfp->mf_page_size = MEMFILE_PAGE_SIZE; - #ifdef FEAT_CRYPT - mfp->mf_old_key = NULL; ---- 158,165 ---- - mfp->mf_used_last = NULL; - mfp->mf_dirty = FALSE; - mfp->mf_used_count = 0; -! mf_hash_init(&mfp->mf_hash); -! mf_hash_init(&mfp->mf_trans); - mfp->mf_page_size = MEMFILE_PAGE_SIZE; - #ifdef FEAT_CRYPT - mfp->mf_old_key = NULL; -*************** -*** 242,249 **** - int del_file; - { - bhdr_T *hp, *nextp; -- NR_TRANS *tp, *tpnext; -- int i; - - if (mfp == NULL) /* safety check */ - return; ---- 245,250 ---- -*************** -*** 263,274 **** - } - while (mfp->mf_free_first != NULL) /* free entries in free list */ - vim_free(mf_rem_free(mfp)); -! for (i = 0; i < MEMHASHSIZE; ++i) /* free entries in trans lists */ -! for (tp = mfp->mf_trans[i]; tp != NULL; tp = tpnext) -! { -! tpnext = tp->nt_next; -! vim_free(tp); -! } - vim_free(mfp->mf_fname); - vim_free(mfp->mf_ffname); - vim_free(mfp); ---- 264,271 ---- - } - while (mfp->mf_free_first != NULL) /* free entries in free list */ - vim_free(mf_rem_free(mfp)); -! mf_hash_free(&mfp->mf_hash); -! mf_hash_free_all(&mfp->mf_trans); /* free hashtable and its items */ - vim_free(mfp->mf_fname); - vim_free(mfp->mf_ffname); - vim_free(mfp); -*************** -*** 743,758 **** - memfile_T *mfp; - bhdr_T *hp; - { -! bhdr_T *hhp; -! int hash; -! -! hash = MEMHASH(hp->bh_bnum); -! hhp = mfp->mf_hash[hash]; -! hp->bh_hash_next = hhp; -! hp->bh_hash_prev = NULL; -! if (hhp != NULL) -! hhp->bh_hash_prev = hp; -! mfp->mf_hash[hash] = hp; - } - - /* ---- 740,746 ---- - memfile_T *mfp; - bhdr_T *hp; - { -! mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp); - } - - /* -*************** -*** 763,775 **** - memfile_T *mfp; - bhdr_T *hp; - { -! if (hp->bh_hash_prev == NULL) -! mfp->mf_hash[MEMHASH(hp->bh_bnum)] = hp->bh_hash_next; -! else -! hp->bh_hash_prev->bh_hash_next = hp->bh_hash_next; -! -! if (hp->bh_hash_next) -! hp->bh_hash_next->bh_hash_prev = hp->bh_hash_prev; - } - - /* ---- 751,757 ---- - memfile_T *mfp; - bhdr_T *hp; - { -! mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp); - } - - /* -*************** -*** 780,791 **** - memfile_T *mfp; - blocknr_T nr; - { -! bhdr_T *hp; -! -! for (hp = mfp->mf_hash[MEMHASH(nr)]; hp != NULL; hp = hp->bh_hash_next) -! if (hp->bh_bnum == nr) -! break; -! return hp; - } - - /* ---- 762,768 ---- - memfile_T *mfp; - blocknr_T nr; - { -! return (bhdr_T *)mf_hash_find(&mfp->mf_hash, nr); - } - - /* -*************** -*** 1187,1193 **** - { - bhdr_T *freep; - blocknr_T new_bnum; -- int hash; - NR_TRANS *np; - int page_count; - ---- 1164,1169 ---- -*************** -*** 1235,1246 **** - hp->bh_bnum = new_bnum; - mf_ins_hash(mfp, hp); /* insert in new hash list */ - -! hash = MEMHASH(np->nt_old_bnum); /* insert in trans list */ -! np->nt_next = mfp->mf_trans[hash]; -! mfp->mf_trans[hash] = np; -! if (np->nt_next != NULL) -! np->nt_next->nt_prev = np; -! np->nt_prev = NULL; - - return OK; - } ---- 1211,1218 ---- - hp->bh_bnum = new_bnum; - mf_ins_hash(mfp, hp); /* insert in new hash list */ - -! /* Insert "np" into "mf_trans" hashtable with key "np->nt_old_bnum" */ -! mf_hash_add_item(&mfp->mf_trans, (mf_hashitem_T *)np); - - return OK; - } -*************** -*** 1255,1279 **** - memfile_T *mfp; - blocknr_T old_nr; - { -- int hash; - NR_TRANS *np; - blocknr_T new_bnum; - -! hash = MEMHASH(old_nr); -! for (np = mfp->mf_trans[hash]; np != NULL; np = np->nt_next) -! if (np->nt_old_bnum == old_nr) -! break; - if (np == NULL) /* not found */ - return old_nr; - - mfp->mf_neg_count--; - new_bnum = np->nt_new_bnum; -! if (np->nt_prev != NULL) /* remove entry from the trans list */ -! np->nt_prev->nt_next = np->nt_next; -! else -! mfp->mf_trans[hash] = np->nt_next; -! if (np->nt_next != NULL) -! np->nt_next->nt_prev = np->nt_prev; - vim_free(np); - - return new_bnum; ---- 1227,1246 ---- - memfile_T *mfp; - blocknr_T old_nr; - { - NR_TRANS *np; - blocknr_T new_bnum; - -! np = (NR_TRANS *)mf_hash_find(&mfp->mf_trans, old_nr); -! - if (np == NULL) /* not found */ - return old_nr; - - mfp->mf_neg_count--; - new_bnum = np->nt_new_bnum; -! -! /* remove entry from the trans list */ -! mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np); -! - vim_free(np); - - return new_bnum; -*************** -*** 1397,1399 **** ---- 1364,1570 ---- - mch_hide(mfp->mf_fname); /* try setting the 'hidden' flag */ - } - } -+ -+ /* -+ * Implementation of mf_hashtab_T follows. -+ */ -+ -+ /* -+ * The number of buckets in the hashtable is increased by a factor of -+ * MHT_GROWTH_FACTOR when the average number of items per bucket -+ * exceeds 2 ^ MHT_LOG_LOAD_FACTOR. -+ */ -+ #define MHT_LOG_LOAD_FACTOR 6 -+ #define MHT_GROWTH_FACTOR 2 /* must be a power of two */ -+ -+ /* -+ * Initialize an empty hash table. -+ */ -+ static void -+ mf_hash_init(mht) -+ mf_hashtab_T *mht; -+ { -+ vim_memset(mht, 0, sizeof(mf_hashtab_T)); -+ mht->mht_buckets = mht->mht_small_buckets; -+ mht->mht_mask = MHT_INIT_SIZE - 1; -+ } -+ -+ /* -+ * Free the array of a hash table. Does not free the items it contains! -+ * The hash table must not be used again without another mf_hash_init() call. -+ */ -+ static void -+ mf_hash_free(mht) -+ mf_hashtab_T *mht; -+ { -+ if (mht->mht_buckets != mht->mht_small_buckets) -+ vim_free(mht->mht_buckets); -+ } -+ -+ /* -+ * Free the array of a hash table and all the items it contains. -+ */ -+ static void -+ mf_hash_free_all(mht) -+ mf_hashtab_T *mht; -+ { -+ long_u idx; -+ mf_hashitem_T *mhi; -+ mf_hashitem_T *next; -+ -+ for (idx = 0; idx <= mht->mht_mask; idx++) -+ for (mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next) -+ { -+ next = mhi->mhi_next; -+ vim_free(mhi); -+ } -+ -+ mf_hash_free(mht); -+ } -+ -+ /* -+ * Find "key" in hashtable "mht". -+ * Returns a pointer to a mf_hashitem_T or NULL if the item was not found. -+ */ -+ static mf_hashitem_T * -+ mf_hash_find(mht, key) -+ mf_hashtab_T *mht; -+ blocknr_T key; -+ { -+ mf_hashitem_T *mhi; -+ -+ mhi = mht->mht_buckets[key & mht->mht_mask]; -+ while (mhi != NULL && mhi->mhi_key != key) -+ mhi = mhi->mhi_next; -+ -+ return mhi; -+ } -+ -+ /* -+ * Add item "mhi" to hashtable "mht". -+ * "mhi" must not be NULL. -+ */ -+ static void -+ mf_hash_add_item(mht, mhi) -+ mf_hashtab_T *mht; -+ mf_hashitem_T *mhi; -+ { -+ long_u idx; -+ -+ idx = mhi->mhi_key & mht->mht_mask; -+ mhi->mhi_next = mht->mht_buckets[idx]; -+ mhi->mhi_prev = NULL; -+ if (mhi->mhi_next != NULL) -+ mhi->mhi_next->mhi_prev = mhi; -+ mht->mht_buckets[idx] = mhi; -+ -+ mht->mht_count++; -+ -+ /* -+ * Grow hashtable when we have more thank 2^MHT_LOG_LOAD_FACTOR -+ * items per bucket on average -+ */ -+ if (mht->mht_fixed == 0 -+ && (mht->mht_count >> MHT_LOG_LOAD_FACTOR) > mht->mht_mask) -+ { -+ if (mf_hash_grow(mht) == FAIL) -+ { -+ /* stop trying to grow after first failure to allocate memory */ -+ mht->mht_fixed = 1; -+ } -+ } -+ } -+ -+ /* -+ * Remove item "mhi" from hashtable "mht". -+ * "mhi" must not be NULL and must have been inserted into "mht". -+ */ -+ static void -+ mf_hash_rem_item(mht, mhi) -+ mf_hashtab_T *mht; -+ mf_hashitem_T *mhi; -+ { -+ if (mhi->mhi_prev == NULL) -+ mht->mht_buckets[mhi->mhi_key & mht->mht_mask] = mhi->mhi_next; -+ else -+ mhi->mhi_prev->mhi_next = mhi->mhi_next; -+ -+ if (mhi->mhi_next != NULL) -+ mhi->mhi_next->mhi_prev = mhi->mhi_prev; -+ -+ mht->mht_count--; -+ -+ /* We could shrink the table here, but it typically takes little memory, -+ * so why bother? */ -+ } -+ -+ /* -+ * Increase number of buckets in the hashtable by MHT_GROWTH_FACTOR and -+ * rehash items. -+ * Returns FAIL when out of memory. -+ */ -+ static int -+ mf_hash_grow(mht) -+ mf_hashtab_T *mht; -+ { -+ long_u i, j; -+ int shift; -+ mf_hashitem_T *mhi; -+ mf_hashitem_T *tails[MHT_GROWTH_FACTOR]; -+ mf_hashitem_T **buckets; -+ size_t size; -+ -+ size = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR * sizeof(void *); -+ buckets = (mf_hashitem_T **)lalloc_clear(size, FALSE); -+ if (buckets == NULL) -+ return FAIL; -+ -+ shift = 0; -+ while ((mht->mht_mask >> shift) != 0) -+ shift++; -+ -+ for (i = 0; i <= mht->mht_mask; i++) -+ { -+ /* -+ * Traverse the items in the i-th original bucket and move them into -+ * MHT_GROWTH_FACTOR new buckets, preserving their relative order -+ * within each new bucket. Preserving the order is important because -+ * mf_get() tries to keep most recently used items at the front of -+ * each bucket. -+ * -+ * Here we strongly rely on the fact the hashes are computed modulo -+ * a power of two. -+ */ -+ -+ vim_memset(tails, 0, sizeof(tails)); -+ -+ for (mhi = mht->mht_buckets[i]; mhi != NULL; mhi = mhi->mhi_next) -+ { -+ j = (mhi->mhi_key >> shift) & (MHT_GROWTH_FACTOR - 1); -+ if (tails[j] == NULL) -+ { -+ buckets[i + (j << shift)] = mhi; -+ tails[j] = mhi; -+ mhi->mhi_prev = NULL; -+ } -+ else -+ { -+ tails[j]->mhi_next = mhi; -+ mhi->mhi_prev = tails[j]; -+ tails[j] = mhi; -+ } -+ } -+ -+ for (j = 0; j < MHT_GROWTH_FACTOR; j++) -+ if (tails[j] != NULL) -+ tails[j]->mhi_next = NULL; -+ } -+ -+ if (mht->mht_buckets != mht->mht_small_buckets) -+ vim_free(mht->mht_buckets); -+ -+ mht->mht_buckets = buckets; -+ mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1; -+ -+ return OK; -+ } -*** ../vim-7.3.142/src/memfile_test.c 2011-03-03 21:58:14.000000000 +0100 ---- src/memfile_test.c 2011-03-03 20:40:29.000000000 +0100 -*************** -*** 0 **** ---- 1,145 ---- -+ /* vi:set ts=8 sts=4 sw=4: -+ * -+ * VIM - Vi IMproved by Bram Moolenaar -+ * -+ * Do ":help uganda" in Vim to read copying and usage conditions. -+ * Do ":help credits" in Vim to see a list of people who contributed. -+ * See README.txt for an overview of the Vim source code. -+ */ -+ -+ /* -+ * memfile_test.c: Unittests for memfile.c -+ * Mostly by Ivan Krasilnikov. -+ */ -+ -+ #undef NDEBUG -+ #include <assert.h> -+ -+ /* Must include main.c because it contains much more than just main() */ -+ #define NO_VIM_MAIN -+ #include "main.c" -+ -+ /* This file has to be included because the tested functions are static */ -+ #include "memfile.c" -+ -+ #define index_to_key(i) ((i) ^ 15167) -+ #define TEST_COUNT 50000 -+ -+ static void test_mf_hash __ARGS((void)); -+ -+ /* -+ * Test mf_hash_*() functions. -+ */ -+ static void -+ test_mf_hash() -+ { -+ mf_hashtab_T ht; -+ mf_hashitem_T *item; -+ blocknr_T key; -+ long_u i; -+ long_u num_buckets; -+ -+ mf_hash_init(&ht); -+ -+ /* insert some items and check invariants */ -+ for (i = 0; i < TEST_COUNT; i++) -+ { -+ assert(ht.mht_count == i); -+ -+ /* check that number of buckets is a power of 2 */ -+ num_buckets = ht.mht_mask + 1; -+ assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0); -+ -+ /* check load factor */ -+ assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR)); -+ -+ if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR)) -+ { -+ /* first expansion shouldn't have occurred yet */ -+ assert(num_buckets == MHT_INIT_SIZE); -+ assert(ht.mht_buckets == ht.mht_small_buckets); -+ } -+ else -+ { -+ assert(num_buckets > MHT_INIT_SIZE); -+ assert(ht.mht_buckets != ht.mht_small_buckets); -+ } -+ -+ key = index_to_key(i); -+ assert(mf_hash_find(&ht, key) == NULL); -+ -+ /* allocate and add new item */ -+ item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE); -+ assert(item != NULL); -+ item->mhi_key = key; -+ mf_hash_add_item(&ht, item); -+ -+ assert(mf_hash_find(&ht, key) == item); -+ -+ if (ht.mht_mask + 1 != num_buckets) -+ { -+ /* hash table was expanded */ -+ assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR); -+ assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR)); -+ } -+ } -+ -+ /* check presence of inserted items */ -+ for (i = 0; i < TEST_COUNT; i++) -+ { -+ key = index_to_key(i); -+ item = mf_hash_find(&ht, key); -+ assert(item != NULL); -+ assert(item->mhi_key == key); -+ } -+ -+ /* delete some items */ -+ for (i = 0; i < TEST_COUNT; i++) -+ { -+ if (i % 100 < 70) -+ { -+ key = index_to_key(i); -+ item = mf_hash_find(&ht, key); -+ assert(item != NULL); -+ assert(item->mhi_key == key); -+ -+ mf_hash_rem_item(&ht, item); -+ assert(mf_hash_find(&ht, key) == NULL); -+ -+ mf_hash_add_item(&ht, item); -+ assert(mf_hash_find(&ht, key) == item); -+ -+ mf_hash_rem_item(&ht, item); -+ assert(mf_hash_find(&ht, key) == NULL); -+ -+ vim_free(item); -+ } -+ } -+ -+ /* check again */ -+ for (i = 0; i < TEST_COUNT; i++) -+ { -+ key = index_to_key(i); -+ item = mf_hash_find(&ht, key); -+ -+ if (i % 100 < 70) -+ { -+ assert(item == NULL); -+ } -+ else -+ { -+ assert(item != NULL); -+ assert(item->mhi_key == key); -+ } -+ } -+ -+ /* free hash table and all remaining items */ -+ mf_hash_free_all(&ht); -+ } -+ -+ int -+ main() -+ { -+ test_mf_hash(); -+ return 0; -+ } -*** ../vim-7.3.142/src/structs.h 2011-02-15 17:39:14.000000000 +0100 ---- src/structs.h 2011-03-03 18:49:01.000000000 +0100 -*************** -*** 378,383 **** ---- 378,412 ---- - typedef long blocknr_T; - - /* -+ * mf_hashtab_T is a chained hashtable with blocknr_T key and arbitrary -+ * structures as items. This is an intrusive data structure: we require -+ * that items begin with mf_hashitem_T which contains the key and linked -+ * list pointers. List of items in each bucket is doubly-linked. -+ */ -+ -+ typedef struct mf_hashitem_S mf_hashitem_T; -+ -+ struct mf_hashitem_S -+ { -+ mf_hashitem_T *mhi_next; -+ mf_hashitem_T *mhi_prev; -+ blocknr_T mhi_key; -+ }; -+ -+ #define MHT_INIT_SIZE 64 -+ -+ typedef struct mf_hashtab_S -+ { -+ long_u mht_mask; /* mask used for hash value (nr of items -+ * in array is "mht_mask" + 1) */ -+ long_u mht_count; /* nr of items inserted into hashtable */ -+ mf_hashitem_T **mht_buckets; /* points to mht_small_buckets or -+ *dynamically allocated array */ -+ mf_hashitem_T *mht_small_buckets[MHT_INIT_SIZE]; /* initial buckets */ -+ char mht_fixed; /* non-zero value forbids growth */ -+ } mf_hashtab_T; -+ -+ /* - * for each (previously) used block in the memfile there is one block header. - * - * The block may be linked in the used list OR in the free list. -*************** -*** 394,404 **** - - struct block_hdr - { - bhdr_T *bh_next; /* next block_hdr in free or used list */ - bhdr_T *bh_prev; /* previous block_hdr in used list */ -- bhdr_T *bh_hash_next; /* next block_hdr in hash list */ -- bhdr_T *bh_hash_prev; /* previous block_hdr in hash list */ -- blocknr_T bh_bnum; /* block number */ - char_u *bh_data; /* pointer to memory (for used block) */ - int bh_page_count; /* number of pages in this block */ - ---- 423,433 ---- - - struct block_hdr - { -+ mf_hashitem_T bh_hashitem; /* header for hash table and key */ -+ #define bh_bnum bh_hashitem.mhi_key /* block number, part of bh_hashitem */ -+ - bhdr_T *bh_next; /* next block_hdr in free or used list */ - bhdr_T *bh_prev; /* previous block_hdr in used list */ - char_u *bh_data; /* pointer to memory (for used block) */ - int bh_page_count; /* number of pages in this block */ - -*************** -*** 417,425 **** - - struct nr_trans - { -! NR_TRANS *nt_next; /* next nr_trans in hash list */ -! NR_TRANS *nt_prev; /* previous nr_trans in hash list */ -! blocknr_T nt_old_bnum; /* old, negative, number */ - blocknr_T nt_new_bnum; /* new, positive, number */ - }; - ---- 446,454 ---- - - struct nr_trans - { -! mf_hashitem_T nt_hashitem; /* header for hash table and key */ -! #define nt_old_bnum nt_hashitem.mhi_key /* old, negative, number */ -! - blocknr_T nt_new_bnum; /* new, positive, number */ - }; - -*************** -*** 499,510 **** - - typedef struct file_buffer buf_T; /* forward declaration */ - -- /* -- * Simplistic hashing scheme to quickly locate the blocks in the used list. -- * 64 blocks are found directly (64 * 4K = 256K, most files are smaller). -- */ -- #define MEMHASHSIZE 64 -- #define MEMHASH(nr) ((nr) & (MEMHASHSIZE - 1)) - #define MF_SEED_LEN 8 - - struct memfile ---- 528,533 ---- -*************** -*** 517,524 **** - bhdr_T *mf_used_last; /* lru block_hdr in used list */ - unsigned mf_used_count; /* number of pages in used list */ - unsigned mf_used_count_max; /* maximum number of pages in memory */ -! bhdr_T *mf_hash[MEMHASHSIZE]; /* array of hash lists */ -! NR_TRANS *mf_trans[MEMHASHSIZE]; /* array of trans lists */ - blocknr_T mf_blocknr_max; /* highest positive block number + 1*/ - blocknr_T mf_blocknr_min; /* lowest negative block number - 1 */ - blocknr_T mf_neg_count; /* number of negative blocks numbers */ ---- 540,547 ---- - bhdr_T *mf_used_last; /* lru block_hdr in used list */ - unsigned mf_used_count; /* number of pages in used list */ - unsigned mf_used_count_max; /* maximum number of pages in memory */ -! mf_hashtab_T mf_hash; /* hash lists */ -! mf_hashtab_T mf_trans; /* trans lists */ - blocknr_T mf_blocknr_max; /* highest positive block number + 1*/ - blocknr_T mf_blocknr_min; /* lowest negative block number - 1 */ - blocknr_T mf_neg_count; /* number of negative blocks numbers */ -*** ../vim-7.3.142/src/testdir/Make_amiga.mak 2010-11-10 16:54:16.000000000 +0100 ---- src/testdir/Make_amiga.mak 2011-03-03 17:04:14.000000000 +0100 -*************** -*** 28,34 **** - test61.out test62.out test63.out test64.out test65.out \ - test66.out test67.out test68.out test69.out test70.out \ - test71.out test72.out test73.out test74.out test75.out \ -! test76.out - - .SUFFIXES: .in .out - ---- 28,34 ---- - test61.out test62.out test63.out test64.out test65.out \ - test66.out test67.out test68.out test69.out test70.out \ - test71.out test72.out test73.out test74.out test75.out \ -! test76.out test77.out - - .SUFFIXES: .in .out - -*************** -*** 124,126 **** ---- 124,127 ---- - test74.out: test74.in - test75.out: test75.in - test76.out: test76.in -+ test77.out: test77.in -*** ../vim-7.3.142/src/testdir/Make_dos.mak 2010-11-10 16:54:16.000000000 +0100 ---- src/testdir/Make_dos.mak 2011-03-03 17:04:20.000000000 +0100 -*************** -*** 28,34 **** - test37.out test38.out test39.out test40.out test41.out \ - test42.out test52.out test65.out test66.out test67.out \ - test68.out test69.out test71.out test72.out test73.out \ -! test74.out test75.out test76.out - - SCRIPTS32 = test50.out test70.out - ---- 28,34 ---- - test37.out test38.out test39.out test40.out test41.out \ - test42.out test52.out test65.out test66.out test67.out \ - test68.out test69.out test71.out test72.out test73.out \ -! test74.out test75.out test76.out test77.out - - SCRIPTS32 = test50.out test70.out - -*** ../vim-7.3.142/src/testdir/Make_ming.mak 2010-11-10 16:54:16.000000000 +0100 ---- src/testdir/Make_ming.mak 2011-03-03 17:04:32.000000000 +0100 -*************** -*** 48,54 **** - test37.out test38.out test39.out test40.out test41.out \ - test42.out test52.out test65.out test66.out test67.out \ - test68.out test69.out test71.out test72.out test73.out \ -! test74.out test75.out test76.out - - SCRIPTS32 = test50.out test70.out - ---- 48,54 ---- - test37.out test38.out test39.out test40.out test41.out \ - test42.out test52.out test65.out test66.out test67.out \ - test68.out test69.out test71.out test72.out test73.out \ -! test74.out test75.out test76.out test77.out - - SCRIPTS32 = test50.out test70.out - -*** ../vim-7.3.142/src/testdir/Make_os2.mak 2010-11-10 16:54:16.000000000 +0100 ---- src/testdir/Make_os2.mak 2011-03-03 17:04:48.000000000 +0100 -*************** -*** 28,34 **** - test61.out test62.out test63.out test64.out test65.out \ - test66.out test67.out test68.out test69.out test70.out \ - test71.out test72.out test73.out test74.out test75.out \ -! test76.out - - .SUFFIXES: .in .out - ---- 28,34 ---- - test61.out test62.out test63.out test64.out test65.out \ - test66.out test67.out test68.out test69.out test70.out \ - test71.out test72.out test73.out test74.out test75.out \ -! test76.out test77.out - - .SUFFIXES: .in .out - -*** ../vim-7.3.142/src/testdir/Makefile 2010-11-10 16:54:16.000000000 +0100 ---- src/testdir/Makefile 2011-03-22 17:03:25.000000000 +0100 -*************** -*** 25,31 **** - test59.out test60.out test61.out test62.out test63.out \ - test64.out test65.out test66.out test67.out test68.out \ - test69.out test70.out test71.out test72.out test73.out \ -! test74.out test75.out test76.out - - SCRIPTS_GUI = test16.out - ---- 25,31 ---- - test59.out test60.out test61.out test62.out test63.out \ - test64.out test65.out test66.out test67.out test68.out \ - test69.out test70.out test71.out test72.out test73.out \ -! test74.out test75.out test76.out test77.out - - SCRIPTS_GUI = test16.out - -*************** -*** 71,77 **** - fi \ - else echo $* NO OUTPUT >>test.log; \ - fi" -! -rm -rf X* test.ok viminfo - - test49.out: test49.vim - ---- 71,77 ---- - fi \ - else echo $* NO OUTPUT >>test.log; \ - fi" -! # -rm -rf X* test.ok viminfo - - test49.out: test49.vim - -*** ../vim-7.3.142/src/testdir/test77.in 2011-03-03 21:59:10.000000000 +0100 ---- src/testdir/test77.in 2011-03-22 17:12:38.000000000 +0100 -*************** -*** 0 **** ---- 1,27 ---- -+ Inserts 2 million lines with consecutive integers starting from 1 -+ (essentially, the output of GNU's seq 1 2000000), writes them to Xtest -+ and writes its cksum to test.out. -+ -+ We need 2 million lines to trigger a call to mf_hash_grow(). If it would mess -+ up the lines the checksum would differ. -+ -+ cksum is part of POSIX and so should be available on most Unixes. -+ If it isn't available then the test will be skipped. -+ -+ STARTTEST -+ :so small.vim -+ :if !executable("cksum") -+ : e! test.ok -+ : w! test.out -+ : qa! -+ :endif -+ :set fileformat=unix undolevels=-1 -+ ggdG -+ :let i = 1 -+ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile -+ ggdd -+ :w! Xtest -+ :!cksum Xtest > test.out -+ :qa! -+ ENDTEST -+ -*** ../vim-7.3.142/src/testdir/test77.ok 2011-03-03 21:59:10.000000000 +0100 ---- src/testdir/test77.ok 2011-03-22 17:10:14.000000000 +0100 -*************** -*** 0 **** ---- 1 ---- -+ 3678979763 14888896 Xtest -*** ../vim-7.3.142/src/version.c 2011-03-22 15:47:18.000000000 +0100 ---- src/version.c 2011-03-22 18:01:48.000000000 +0100 -*************** -*** 716,717 **** ---- 716,719 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 143, - /**/ - --- -SIGIRO -- irony detected (iron core dumped) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |