mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.1.1060: MS-Windows: get_cmd_args() is no longer needed
Problem: MS-Windows: get_cmd_args() is no longer needed, get_cmd_argsW() is always used. Solution: Remove get_cmd_args(). (Ken Takata, closes #4171)
This commit is contained in:
parent
90d0cf69aa
commit
760285dd4f
145
src/gui_w32.c
145
src/gui_w32.c
@ -3882,151 +3882,6 @@ _OnScroll(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get command line arguments.
|
|
||||||
* Use "prog" as the name of the program and "cmdline" as the arguments.
|
|
||||||
* Copy the arguments to allocated memory.
|
|
||||||
* Return the number of arguments (including program name).
|
|
||||||
* Return pointers to the arguments in "argvp". Memory is allocated with
|
|
||||||
* malloc(), use free() instead of vim_free().
|
|
||||||
* Return pointer to buffer in "tofree".
|
|
||||||
* Returns zero when out of memory.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
get_cmd_args(char *prog, char *cmdline, char ***argvp, char **tofree)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *p;
|
|
||||||
char *progp;
|
|
||||||
char *pnew = NULL;
|
|
||||||
char *newcmdline;
|
|
||||||
int inquote;
|
|
||||||
int argc;
|
|
||||||
char **argv = NULL;
|
|
||||||
int round;
|
|
||||||
|
|
||||||
*tofree = NULL;
|
|
||||||
|
|
||||||
/* Try using the Unicode version first, it takes care of conversion when
|
|
||||||
* 'encoding' is changed. */
|
|
||||||
argc = get_cmd_argsW(&argv);
|
|
||||||
if (argc != 0)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
/* Handle the program name. Remove the ".exe" extension, and find the 1st
|
|
||||||
* non-space. */
|
|
||||||
p = strrchr(prog, '.');
|
|
||||||
if (p != NULL)
|
|
||||||
*p = NUL;
|
|
||||||
for (progp = prog; *progp == ' '; ++progp)
|
|
||||||
;
|
|
||||||
|
|
||||||
/* The command line is copied to allocated memory, so that we can change
|
|
||||||
* it. Add the size of the string, the separating NUL and a terminating
|
|
||||||
* NUL. */
|
|
||||||
newcmdline = malloc(STRLEN(cmdline) + STRLEN(progp) + 2);
|
|
||||||
if (newcmdline == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First round: count the number of arguments ("pnew" == NULL).
|
|
||||||
* Second round: produce the arguments.
|
|
||||||
*/
|
|
||||||
for (round = 1; round <= 2; ++round)
|
|
||||||
{
|
|
||||||
/* First argument is the program name. */
|
|
||||||
if (pnew != NULL)
|
|
||||||
{
|
|
||||||
argv[0] = pnew;
|
|
||||||
strcpy(pnew, progp);
|
|
||||||
pnew += strlen(pnew);
|
|
||||||
*pnew++ = NUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Isolate each argument and put it in argv[].
|
|
||||||
*/
|
|
||||||
p = cmdline;
|
|
||||||
argc = 1;
|
|
||||||
while (*p != NUL)
|
|
||||||
{
|
|
||||||
inquote = FALSE;
|
|
||||||
if (pnew != NULL)
|
|
||||||
argv[argc] = pnew;
|
|
||||||
++argc;
|
|
||||||
while (*p != NUL && (inquote || (*p != ' ' && *p != '\t')))
|
|
||||||
{
|
|
||||||
/* Backslashes are only special when followed by a double
|
|
||||||
* quote. */
|
|
||||||
i = (int)strspn(p, "\\");
|
|
||||||
if (p[i] == '"')
|
|
||||||
{
|
|
||||||
/* Halve the number of backslashes. */
|
|
||||||
if (i > 1 && pnew != NULL)
|
|
||||||
{
|
|
||||||
vim_memset(pnew, '\\', i / 2);
|
|
||||||
pnew += i / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Even nr of backslashes toggles quoting, uneven copies
|
|
||||||
* the double quote. */
|
|
||||||
if ((i & 1) == 0)
|
|
||||||
inquote = !inquote;
|
|
||||||
else if (pnew != NULL)
|
|
||||||
*pnew++ = '"';
|
|
||||||
p += i + 1;
|
|
||||||
}
|
|
||||||
else if (i > 0)
|
|
||||||
{
|
|
||||||
/* Copy span of backslashes unmodified. */
|
|
||||||
if (pnew != NULL)
|
|
||||||
{
|
|
||||||
vim_memset(pnew, '\\', i);
|
|
||||||
pnew += i;
|
|
||||||
}
|
|
||||||
p += i;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (pnew != NULL)
|
|
||||||
*pnew++ = *p;
|
|
||||||
/* Can't use mb_* functions, because 'encoding' is not
|
|
||||||
* initialized yet here. */
|
|
||||||
if (IsDBCSLeadByte(*p))
|
|
||||||
{
|
|
||||||
++p;
|
|
||||||
if (pnew != NULL)
|
|
||||||
*pnew++ = *p;
|
|
||||||
}
|
|
||||||
++p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pnew != NULL)
|
|
||||||
*pnew++ = NUL;
|
|
||||||
while (*p == ' ' || *p == '\t')
|
|
||||||
++p; /* advance until a non-space */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (round == 1)
|
|
||||||
{
|
|
||||||
argv = (char **)malloc((argc + 1) * sizeof(char *));
|
|
||||||
if (argv == NULL )
|
|
||||||
{
|
|
||||||
free(newcmdline);
|
|
||||||
return 0; /* malloc error */
|
|
||||||
}
|
|
||||||
pnew = newcmdline;
|
|
||||||
*tofree = newcmdline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
|
||||||
argv[argc] = NULL; /* NULL-terminated list */
|
|
||||||
*argvp = argv;
|
|
||||||
return argc;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef FEAT_XPM_W32
|
#ifdef FEAT_XPM_W32
|
||||||
# include "xpm_w32.h"
|
# include "xpm_w32.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -42,36 +42,25 @@ static void (_cdecl *pSaveInst)(HINSTANCE);
|
|||||||
WinMain(
|
WinMain(
|
||||||
HINSTANCE hInstance UNUSED,
|
HINSTANCE hInstance UNUSED,
|
||||||
HINSTANCE hPrevInst UNUSED,
|
HINSTANCE hPrevInst UNUSED,
|
||||||
LPSTR lpszCmdLine,
|
LPSTR lpszCmdLine UNUSED,
|
||||||
int nCmdShow UNUSED)
|
int nCmdShow UNUSED)
|
||||||
{
|
{
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
char **argv;
|
char **argv = NULL;
|
||||||
char *tofree;
|
|
||||||
char prog[256];
|
|
||||||
#ifdef VIMDLL
|
#ifdef VIMDLL
|
||||||
|
char prog[256];
|
||||||
char *p;
|
char *p;
|
||||||
HANDLE hLib;
|
HANDLE hLib;
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Ron: added full path name so that the $VIM variable will get set to our
|
/* Ron: added full path name so that the $VIM variable will get set to our
|
||||||
* startup path (so the .vimrc file can be found w/o a VIM env. var.) */
|
* startup path (so the .vimrc file can be found w/o a VIM env. var.) */
|
||||||
GetModuleFileName(NULL, prog, 255);
|
GetModuleFileName(NULL, prog, 255);
|
||||||
|
|
||||||
argc = get_cmd_args(prog, (char *)lpszCmdLine, &argv, &tofree);
|
|
||||||
if (argc == 0)
|
|
||||||
{
|
|
||||||
MessageBox(0, "Could not allocate memory for command line.",
|
|
||||||
"VIM Error", 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ifdef DYNAMIC_GETTEXT
|
# ifdef DYNAMIC_GETTEXT
|
||||||
/* Initialize gettext library */
|
/* Initialize gettext library */
|
||||||
dyn_libintl_init();
|
dyn_libintl_init();
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#ifdef VIMDLL
|
|
||||||
// LoadLibrary - get name of dll to load in here:
|
// LoadLibrary - get name of dll to load in here:
|
||||||
p = strrchr(prog, '\\');
|
p = strrchr(prog, '\\');
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
@ -127,9 +116,6 @@ WinMain(
|
|||||||
FreeLibrary(hLib);
|
FreeLibrary(hLib);
|
||||||
errout:
|
errout:
|
||||||
#endif
|
#endif
|
||||||
free(argv);
|
|
||||||
if (tofree != NULL)
|
|
||||||
free(tofree);
|
|
||||||
free_cmd_argsW();
|
free_cmd_argsW();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -775,6 +775,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1060,
|
||||||
/**/
|
/**/
|
||||||
1059,
|
1059,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user