# HG changeset patch # User Bram Moolenaar # Date 1664122503 -7200 # Node ID 1b9abc263eb3d485203cca5fda083e5ef2efa27b # Parent 4dee284c6ccd177ddeacf0d36cd1d2432a1d7f6c patch 9.0.0584: cscope test with wrong executable name fails Commit: https://github.com/vim/vim/commit/dc21552c9a83413a018a91e61649cc632929d6a1 Author: Bram Moolenaar Date: Sun Sep 25 17:03:26 2022 +0100 patch 9.0.0584: cscope test with wrong executable name fails Problem: Cscope test with wrong executable name fails. Solution: Use /bin/sh to execute the command. (Yegappan Lakshmanan) diff --git a/src/if_cscope.c b/src/if_cscope.c --- a/src/if_cscope.c +++ b/src/if_cscope.c @@ -799,7 +799,7 @@ cs_create_cmd(char *csoption, char *patt return NULL; } - // Skip white space before the patter, except for text and pattern search, + // Skip white space before the pattern, except for text and pattern search, // they may want to use the leading white space. pat = pattern; if (search != 4 && search != 6) @@ -825,6 +825,7 @@ cs_create_connection(int i) #ifdef UNIX int to_cs[2], from_cs[2]; #endif + int cmdlen; int len; char *prog, *cmd, *ppath = NULL; #ifdef MSWIN @@ -917,7 +918,7 @@ err_closing: expand_env(p_csprg, (char_u *)prog, MAXPATHL); // alloc space to hold the cscope command - len = (int)(strlen(prog) + strlen(csinfo[i].fname) + 32); + cmdlen = (int)(strlen(prog) + strlen(csinfo[i].fname) + 32); if (csinfo[i].ppath) { // expand the prepend path for env var's @@ -933,13 +934,13 @@ err_closing: } expand_env((char_u *)csinfo[i].ppath, (char_u *)ppath, MAXPATHL); - len += (int)strlen(ppath); + cmdlen += (int)strlen(ppath); } if (csinfo[i].flags) - len += (int)strlen(csinfo[i].flags); + cmdlen += (int)strlen(csinfo[i].flags); - if ((cmd = alloc(len)) == NULL) + if ((cmd = alloc(cmdlen)) == NULL) { vim_free(prog); vim_free(ppath); @@ -952,17 +953,21 @@ err_closing: } // run the cscope command - (void)sprintf(cmd, "%s -dl -f %s", prog, csinfo[i].fname); - +#ifdef UNIX + vim_snprintf(cmd, cmdlen, "/bin/sh -c \"exec %s -dl -f %s\"", + prog, csinfo[i].fname); +#else + vim_snprintf(cmd, cmdlen, "%s -dl -f %s", prog, csinfo[i].fname); +#endif if (csinfo[i].ppath != NULL) { - (void)strcat(cmd, " -P"); - (void)strcat(cmd, csinfo[i].ppath); + len = STRLEN(cmd); + vim_snprintf(cmd + len, cmdlen - len, " -P%s", csinfo[i].ppath); } if (csinfo[i].flags != NULL) { - (void)strcat(cmd, " "); - (void)strcat(cmd, csinfo[i].flags); + len = STRLEN(cmd); + vim_snprintf(cmd + len, cmdlen - len, " %s", csinfo[i].flags); } # ifdef UNIX // on Win32 we still need prog diff --git a/src/testdir/test_cscope.vim b/src/testdir/test_cscope.vim --- a/src/testdir/test_cscope.vim +++ b/src/testdir/test_cscope.vim @@ -241,15 +241,11 @@ func Test_cscopeWithCscopeConnections() let a = execute('cscope kill -1') call assert_equal('', a) - " Test: 'csprg' option - " Skip this with valgrind, it causes spurious leak reports - " FIXME: this causes failures when timers are used - if !RunningWithValgrind() && 0 - call assert_equal('cscope', &csprg) - set csprg=doesnotexist - call assert_fails('cscope add Xcscope2.out', 'E262:') - set csprg=cscope - endif + " Test: 'csprg' option invalid command + call assert_equal('cscope', &csprg) + set csprg=doesnotexist + call assert_fails('cscope add Xcscope2.out', 'E609:') + set csprg=cscope " Test: multiple cscope connections cscope add Xcscope.out diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 584, +/**/ 583, /**/ 582,