- patchlevel 100

This commit is contained in:
Karsten Hopp 2007-09-07 14:05:05 +00:00
parent 5c0aa406f8
commit 60c1226ce7
3 changed files with 564 additions and 1 deletions

513
7.1.100 Normal file
View File

@ -0,0 +1,513 @@
To: vim-dev@vim.org
Subject: patch 7.1.100
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 7.1.100
Problem: Win32: Executing cscope doesn't always work properly.
Solution: Use another way to invoke cscope. (Mike Williams)
Files: src/if_cscope.c, src/if_cscope.h, src/main.c,
src/proto/if_cscope.pro
*** ../vim-7.1.099/src/if_cscope.c Tue Aug 21 18:02:58 2007
--- src/if_cscope.c Sun Sep 2 16:50:50 2007
***************
*** 24,34 ****
/* not UNIX, must be WIN32 */
# include "vimio.h"
# include <fcntl.h>
- # include <process.h>
- # define STDIN_FILENO 0
- # define STDOUT_FILENO 1
- # define STDERR_FILENO 2
- # define pipe(fds) _pipe(fds, 256, O_TEXT|O_NOINHERIT)
#endif
#include "if_cscope.h"
--- 24,29 ----
***************
*** 65,71 ****
static char * cs_parse_results __ARGS((int cnumber, char *buf, int bufsize, char **context, char **linenumber, char **search));
static char * cs_pathcomponents __ARGS((char *path));
static void cs_print_tags_priv __ARGS((char **, char **, int));
! static int cs_read_prompt __ARGS((int ));
static void cs_release_csp __ARGS((int, int freefnpp));
static int cs_reset __ARGS((exarg_T *eap));
static char * cs_resolve_file __ARGS((int, char *));
--- 60,66 ----
static char * cs_parse_results __ARGS((int cnumber, char *buf, int bufsize, char **context, char **linenumber, char **search));
static char * cs_pathcomponents __ARGS((char *path));
static void cs_print_tags_priv __ARGS((char **, char **, int));
! static int cs_read_prompt __ARGS((int));
static void cs_release_csp __ARGS((int, int freefnpp));
static int cs_reset __ARGS((exarg_T *eap));
static char * cs_resolve_file __ARGS((int, char *));
***************
*** 504,510 ****
#if defined(UNIX)
else if (S_ISREG(statbuf.st_mode) || S_ISLNK(statbuf.st_mode))
#else
! /* substitute define S_ISREG from os_unix.h */
else if (((statbuf.st_mode) & S_IFMT) == S_IFREG)
#endif
{
--- 499,505 ----
#if defined(UNIX)
else if (S_ISREG(statbuf.st_mode) || S_ISLNK(statbuf.st_mode))
#else
! /* WIN32 - substitute define S_ISREG from os_unix.h */
else if (((statbuf.st_mode) & S_IFMT) == S_IFREG)
#endif
{
***************
*** 717,733 ****
cs_create_connection(i)
int i;
{
! int to_cs[2], from_cs[2], len;
! char *prog, *cmd, *ppath = NULL;
! #ifndef UNIX
! int in_save, out_save, err_save;
! long_i ph;
! # ifdef FEAT_GUI
! HWND activewnd = NULL;
! HWND consolewnd = NULL;
! # endif
#endif
/*
* Cscope reads from to_cs[0] and writes to from_cs[1]; vi reads from
* from_cs[0] and writes to to_cs[1].
--- 712,734 ----
cs_create_connection(i)
int i;
{
! #ifdef UNIX
! int to_cs[2], from_cs[2];
! #endif
! int len;
! char *prog, *cmd, *ppath = NULL;
! #ifdef WIN32
! int fd;
! SECURITY_ATTRIBUTES sa;
! PROCESS_INFORMATION pi;
! STARTUPINFO si;
! BOOL pipe_stdin = FALSE, pipe_stdout = FALSE;
! HANDLE stdin_rd, stdout_rd;
! HANDLE stdout_wr, stdin_wr;
! BOOL created;
#endif
+ #if defined(UNIX)
/*
* Cscope reads from to_cs[0] and writes to from_cs[1]; vi reads from
* from_cs[0] and writes to to_cs[1].
***************
*** 748,765 ****
return CSCOPE_FAILURE;
}
- #if defined(UNIX)
switch (csinfo[i].pid = fork())
{
case -1:
(void)EMSG(_("E622: Could not fork for cscope"));
goto err_closing;
case 0: /* child: run cscope. */
- #else
- in_save = dup(STDIN_FILENO);
- out_save = dup(STDOUT_FILENO);
- err_save = dup(STDERR_FILENO);
- #endif
if (dup2(to_cs[0], STDIN_FILENO) == -1)
PERROR("cs_create_connection 1");
if (dup2(from_cs[1], STDOUT_FILENO) == -1)
--- 749,760 ----
***************
*** 768,782 ****
PERROR("cs_create_connection 3");
/* close unused */
- #if defined(UNIX)
(void)close(to_cs[1]);
(void)close(from_cs[0]);
#else
! /* On win32 we must close opposite ends because we are the parent */
! (void)close(to_cs[0]);
! to_cs[0] = -1;
! (void)close(from_cs[1]);
! from_cs[1] = -1;
#endif
/* expand the cscope exec for env var's */
if ((prog = (char *)alloc(MAXPATHL + 1)) == NULL)
--- 763,794 ----
PERROR("cs_create_connection 3");
/* close unused */
(void)close(to_cs[1]);
(void)close(from_cs[0]);
#else
! /* WIN32 */
! /* Create pipes to communicate with cscope */
! sa.nLength = sizeof(SECURITY_ATTRIBUTES);
! sa.bInheritHandle = TRUE;
! sa.lpSecurityDescriptor = NULL;
!
! if (!(pipe_stdin = CreatePipe(&stdin_rd, &stdin_wr, &sa, 0))
! || !(pipe_stdout = CreatePipe(&stdout_rd, &stdout_wr, &sa, 0)))
! {
! (void)EMSG(_("E566: Could not create cscope pipes"));
! err_closing:
! if (pipe_stdin)
! {
! CloseHandle(stdin_rd);
! CloseHandle(stdin_wr);
! }
! if (pipe_stdout)
! {
! CloseHandle(stdout_rd);
! CloseHandle(stdout_wr);
! }
! return CSCOPE_FAILURE;
! }
#endif
/* expand the cscope exec for env var's */
if ((prog = (char *)alloc(MAXPATHL + 1)) == NULL)
***************
*** 784,789 ****
--- 796,802 ----
#ifdef UNIX
return CSCOPE_FAILURE;
#else
+ /* WIN32 */
goto err_closing;
#endif
}
***************
*** 800,805 ****
--- 813,819 ----
#ifdef UNIX
return CSCOPE_FAILURE;
#else
+ /* WIN32 */
goto err_closing;
#endif
}
***************
*** 818,823 ****
--- 832,838 ----
#ifdef UNIX
return CSCOPE_FAILURE;
#else
+ /* WIN32 */
goto err_closing;
#endif
}
***************
*** 826,831 ****
--- 841,847 ----
#if defined(UNIX)
(void)sprintf(cmd, "exec %s -dl -f %s", prog, csinfo[i].fname);
#else
+ /* WIN32 */
(void)sprintf(cmd, "%s -dl -f %s", prog, csinfo[i].fname);
#endif
if (csinfo[i].ppath != NULL)
***************
*** 851,910 ****
exit(127);
/* NOTREACHED */
default: /* parent. */
- #else
- # ifdef FEAT_GUI
- activewnd = GetForegroundWindow(); /* on win9x cscope steals focus */
- /* Dirty hack to hide annoying console window */
- if (AllocConsole())
- {
- char *title;
- title = (char *)alloc(1024);
- if (title == NULL)
- FreeConsole();
- else
- {
- GetConsoleTitle(title, 1024); /* save for future restore */
- SetConsoleTitle(
- "GVIMCS{5499421B-CBEF-45b0-85EF-38167FDEA5C5}GVIMCS");
- Sleep(40); /* as stated in MS KB we must wait 40 ms */
- consolewnd = FindWindow(NULL,
- "GVIMCS{5499421B-CBEF-45b0-85EF-38167FDEA5C5}GVIMCS");
- if (consolewnd != NULL)
- ShowWindow(consolewnd, SW_HIDE);
- SetConsoleTitle(title);
- vim_free(title);
- }
- }
- # endif
- /* May be use &shell, &shellquote etc */
- # ifdef __BORLANDC__
- /* BCC 5.5 uses a different function name for spawnlp */
- ph = (long_i)spawnlp(P_NOWAIT, prog, cmd, NULL);
- # else
- ph = (long_i)_spawnlp(_P_NOWAIT, prog, cmd, NULL);
- # endif
- vim_free(prog);
- vim_free(cmd);
- # ifdef FEAT_GUI
- /* Dirty hack part two */
- if (activewnd != NULL)
- /* restoring focus */
- SetForegroundWindow(activewnd);
- if (consolewnd != NULL)
- FreeConsole();
-
- # endif
- if (ph == -1)
- {
- PERROR(_("cs_create_connection exec failed"));
- (void)EMSG(_("E623: Could not spawn cscope process"));
- goto err_closing;
- }
- /* else */
- csinfo[i].pid = 0;
- csinfo[i].hProc = (HANDLE)ph;
-
- #endif /* !UNIX */
/*
* Save the file descriptors for later duplication, and
* reopen as streams.
--- 867,872 ----
***************
*** 914,935 ****
if ((csinfo[i].fr_fp = fdopen(from_cs[0], "r")) == NULL)
PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
- #if defined(UNIX)
/* close unused */
(void)close(to_cs[0]);
(void)close(from_cs[1]);
break;
}
#else
! /* restore stdhandles */
! dup2(in_save, STDIN_FILENO);
! dup2(out_save, STDOUT_FILENO);
! dup2(err_save, STDERR_FILENO);
! close(in_save);
! close(out_save);
! close(err_save);
! #endif
return CSCOPE_SUCCESS;
} /* cs_create_connection */
--- 876,927 ----
if ((csinfo[i].fr_fp = fdopen(from_cs[0], "r")) == NULL)
PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
/* close unused */
(void)close(to_cs[0]);
(void)close(from_cs[1]);
break;
}
+
#else
! /* WIN32 */
! /* Create a new process to run cscope and use pipes to talk with it */
! GetStartupInfo(&si);
! si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
! si.wShowWindow = SW_HIDE; /* Hide child application window */
! si.hStdOutput = stdout_wr;
! si.hStdError = stdout_wr;
! si.hStdInput = stdin_rd;
! created = CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE,
! NULL, NULL, &si, &pi);
! vim_free(prog);
! vim_free(cmd);
!
! if (!created)
! {
! PERROR(_("cs_create_connection exec failed"));
! (void)EMSG(_("E623: Could not spawn cscope process"));
! goto err_closing;
! }
! /* else */
! csinfo[i].pid = pi.dwProcessId;
! csinfo[i].hProc = pi.hProcess;
! CloseHandle(pi.hThread);
!
! /* TODO - tidy up after failure to create files on pipe handles. */
! if (((fd = _open_osfhandle((intptr_t)stdin_wr, _O_TEXT|_O_APPEND)) < 0)
! || ((csinfo[i].to_fp = _fdopen(fd, "w")) == NULL))
! PERROR(_("cs_create_connection: fdopen for to_fp failed"));
! if (((fd = _open_osfhandle((intptr_t)stdout_rd, _O_TEXT|_O_RDONLY)) < 0)
! || ((csinfo[i].fr_fp = _fdopen(fd, "r")) == NULL))
! PERROR(_("cs_create_connection: fdopen for fr_fp failed"));
!
! /* Close handles for file descriptors inherited by the cscope process */
! CloseHandle(stdin_rd);
! CloseHandle(stdout_wr);
!
! #endif /* !UNIX */
!
return CSCOPE_SUCCESS;
} /* cs_create_connection */
***************
*** 2097,2104 ****
/*
* PRIVATE: cs_release_csp
*
! * does the actual free'ing for the cs ptr with an optional flag of whether
! * or not to free the filename. called by cs_kill and cs_reset.
*/
static void
cs_release_csp(i, freefnpp)
--- 2089,2096 ----
/*
* PRIVATE: cs_release_csp
*
! * Does the actual free'ing for the cs ptr with an optional flag of whether
! * or not to free the filename. Called by cs_kill and cs_reset.
*/
static void
cs_release_csp(i, freefnpp)
***************
*** 2116,2125 ****
(void)fputs("q\n", csinfo[i].to_fp);
(void)fflush(csinfo[i].to_fp);
}
! /* give cscope chance to exit normally */
! if (csinfo[i].hProc != NULL
! && WaitForSingleObject(csinfo[i].hProc, 1000) == WAIT_TIMEOUT)
! TerminateProcess(csinfo[i].hProc, 0);
#endif
if (csinfo[i].fr_fp != NULL)
--- 2108,2120 ----
(void)fputs("q\n", csinfo[i].to_fp);
(void)fflush(csinfo[i].to_fp);
}
! if (csinfo[i].hProc != NULL)
! {
! /* Give cscope a chance to exit normally */
! if (WaitForSingleObject(csinfo[i].hProc, 1000) == WAIT_TIMEOUT)
! TerminateProcess(csinfo[i].hProc, 0);
! CloseHandle(csinfo[i].hProc);
! }
#endif
if (csinfo[i].fr_fp != NULL)
***************
*** 2301,2306 ****
--- 2296,2316 ----
wait_return(TRUE);
return CSCOPE_SUCCESS;
} /* cs_show */
+
+
+ /*
+ * PUBLIC: cs_end
+ *
+ * Only called when VIM exits to quit any cscope sessions.
+ */
+ void
+ cs_end()
+ {
+ int i;
+
+ for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
+ cs_release_csp(i, TRUE);
+ }
#endif /* FEAT_CSCOPE */
*** ../vim-7.1.099/src/if_cscope.h Thu Jun 30 23:59:58 2005
--- src/if_cscope.h Sun Sep 2 16:51:08 2007
***************
*** 72,78 ****
ino_t st_ino; /* inode number of cscope db */
#else
# if defined(WIN32)
! int pid; /* Can't get pid so set it to 0 ;) */
HANDLE hProc; /* cscope process handle */
DWORD nVolume; /* Volume serial number, instead of st_dev */
DWORD nIndexHigh; /* st_ino has no meaning in the Windows */
--- 72,78 ----
ino_t st_ino; /* inode number of cscope db */
#else
# if defined(WIN32)
! DWORD pid; /* PID of the connected cscope process. */
HANDLE hProc; /* cscope process handle */
DWORD nVolume; /* Volume serial number, instead of st_dev */
DWORD nIndexHigh; /* st_ino has no meaning in the Windows */
*** ../vim-7.1.099/src/main.c Thu Aug 30 12:24:21 2007
--- src/main.c Sun Sep 2 16:44:36 2007
***************
*** 1331,1336 ****
--- 1331,1339 ----
#ifdef FEAT_NETBEANS_INTG
netbeans_end();
#endif
+ #ifdef FEAT_CSCOPE
+ cs_end();
+ #endif
mch_exit(exitval);
}
***************
*** 3671,3677 ****
mainerr_arg_missing((char_u *)filev[-1]);
if (mch_dirname(cwd, MAXPATHL) != OK)
return NULL;
! if ((p = vim_strsave_escaped_ext(cwd, PATH_ESC_CHARS, '\\', TRUE)) == NULL)
return NULL;
ga_init2(&ga, 1, 100);
ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
--- 3674,3686 ----
mainerr_arg_missing((char_u *)filev[-1]);
if (mch_dirname(cwd, MAXPATHL) != OK)
return NULL;
! if ((p = vim_strsave_escaped_ext(cwd,
! #ifdef BACKSLASH_IN_FILENAME
! "", /* rem_backslash() will tell what chars to escape */
! #else
! PATH_ESC_CHARS,
! #endif
! '\\', TRUE)) == NULL)
return NULL;
ga_init2(&ga, 1, 100);
ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
*** ../vim-7.1.099/src/proto/if_cscope.pro Sat May 5 19:15:39 2007
--- src/proto/if_cscope.pro Sun Sep 2 16:51:34 2007
***************
*** 6,9 ****
--- 6,10 ----
void cs_free_tags __ARGS((void));
void cs_print_tags __ARGS((void));
int cs_connection __ARGS((int num, char_u *dbpath, char_u *ppath));
+ void cs_end __ARGS((void));
/* vim: set ft=c : */
*** ../vim-7.1.099/src/version.c Thu Sep 6 16:33:47 2007
--- src/version.c Thu Sep 6 17:27:51 2007
***************
*** 668,669 ****
--- 668,671 ----
{ /* Add new patch number below this line */
+ /**/
+ 100,
/**/
--
I have to exercise early in the morning before my brain
figures out what I'm doing.
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///

View File

@ -111,3 +111,16 @@ Individual patches for Vim 7.1:
2496 7.1.085 after ":split fold.c" folds in one window disappear 2496 7.1.085 after ":split fold.c" folds in one window disappear
3561 7.1.086 crash when using specific Python syntax highlighting 3561 7.1.086 crash when using specific Python syntax highlighting
4165 7.1.087 cscope: reading past command end; writing past buffer end 4165 7.1.087 cscope: reading past command end; writing past buffer end
2276 7.1.088 (extra) window position wrong when using ":winpos"
13841 7.1.089 when listing variables text of command is not cleared
2372 7.1.090 compiler warning on Mac OS X 10.5 for sigaltstack()
10488 7.1.091 (extra) Win32: add --windowid argument
2901 7.1.092 (extra, after 7.1.088) wrong args for MoveWindowStructure()
15955 7.1.093 read past end of screen line when checking for double width
1901 7.1.094 using wrong buffer to check if syntax HL is present
5809 7.1.095 autocmmand for focus events may cause problems
2287 7.1.096 reading past end of a string when resizing Vim
1620 7.1.097 "setlocal stl=%!expr" doesn't work
1780 7.1.098 ":call s:var()" doesn't work if "s:var" is a Funcref
4552 7.1.099 ":mkvimrc" doesn't work properly when 'paste' or 'keymap' set
14551 7.1.100 Win32: Executing cscope doesn't always work properly

View File

@ -15,7 +15,7 @@
#used for pre-releases: #used for pre-releases:
%define beta %{nil} %define beta %{nil}
%define vimdir vim71%{?beta} %define vimdir vim71%{?beta}
%define patchlevel 87 %define patchlevel 100
Summary: The VIM editor Summary: The VIM editor
URL: http://www.vim.org/ URL: http://www.vim.org/
@ -141,6 +141,23 @@ Patch084: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.084
Patch085: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.085 Patch085: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.085
Patch086: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.086 Patch086: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.086
Patch087: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.087 Patch087: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.087
# Mac:
#Patch088: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.088
Patch089: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.089
Patch090: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.090
# Win32:
#Patch091: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.091
# Mac:
#Patch092: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.092
Patch093: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.093
Patch094: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.094
Patch095: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.095
Patch096: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.096
Patch097: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.097
Patch098: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.098
Patch099: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.099
# Win32:
#Patch100: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.100
Patch3000: vim-7.0-syntax.patch Patch3000: vim-7.0-syntax.patch
Patch3002: vim-7.1-nowarnings.patch Patch3002: vim-7.1-nowarnings.patch
@ -366,6 +383,23 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
%patch085 -p0 %patch085 -p0
%patch086 -p0 %patch086 -p0
%patch087 -p0 %patch087 -p0
# Mac:
#patch088 -p0
%patch089 -p0
%patch090 -p0
# Win32:
#patch091 -p0
# Mac:
#patch092 -p0
%patch093 -p0
%patch094 -p0
%patch095 -p0
%patch096 -p0
%patch097 -p0
%patch098 -p0
%patch099 -p0
# Win32:
#patch100 -p0
# install spell files # install spell files
%if %{withvimspell} %if %{withvimspell}
@ -751,6 +785,9 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/icons/hicolor/*/apps/* %{_datadir}/icons/hicolor/*/apps/*
%changelog %changelog
* Fri Sep 07 2007 Karsten Hopp <karsten@redhat.com> 7.1.100-1
- patchlevel 100
* Fri Aug 24 2007 Karsten Hopp <karsten@redhat.com> 7.1.87-1 * Fri Aug 24 2007 Karsten Hopp <karsten@redhat.com> 7.1.87-1
- add build requirement perl-devel - add build requirement perl-devel
- fix tarball unpacking - fix tarball unpacking