updated for version 7.4.684
Problem: When starting several Vim instances in diff mode, the temp files
used may not be unique. (Issue 353)
Solution: Add an argument to vim_tempname() to keep the file.
This commit is contained in:
10
src/diff.c
10
src/diff.c
@ -688,9 +688,9 @@ ex_diffupdate(eap)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* We need three temp file names. */
|
/* We need three temp file names. */
|
||||||
tmp_orig = vim_tempname('o');
|
tmp_orig = vim_tempname('o', TRUE);
|
||||||
tmp_new = vim_tempname('n');
|
tmp_new = vim_tempname('n', TRUE);
|
||||||
tmp_diff = vim_tempname('d');
|
tmp_diff = vim_tempname('d', TRUE);
|
||||||
if (tmp_orig == NULL || tmp_new == NULL || tmp_diff == NULL)
|
if (tmp_orig == NULL || tmp_new == NULL || tmp_diff == NULL)
|
||||||
goto theend;
|
goto theend;
|
||||||
|
|
||||||
@ -920,8 +920,8 @@ ex_diffpatch(eap)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* We need two temp file names. */
|
/* We need two temp file names. */
|
||||||
tmp_orig = vim_tempname('o');
|
tmp_orig = vim_tempname('o', FALSE);
|
||||||
tmp_new = vim_tempname('n');
|
tmp_new = vim_tempname('n', FALSE);
|
||||||
if (tmp_orig == NULL || tmp_new == NULL)
|
if (tmp_orig == NULL || tmp_new == NULL)
|
||||||
goto theend;
|
goto theend;
|
||||||
|
|
||||||
|
|||||||
@ -18775,7 +18775,7 @@ get_cmd_output_as_rettv(argvars, rettv, retlist)
|
|||||||
* Write the string to a temp file, to be used for input of the shell
|
* Write the string to a temp file, to be used for input of the shell
|
||||||
* command.
|
* command.
|
||||||
*/
|
*/
|
||||||
if ((infile = vim_tempname('i')) == NULL)
|
if ((infile = vim_tempname('i', TRUE)) == NULL)
|
||||||
{
|
{
|
||||||
EMSG(_(e_notmp));
|
EMSG(_(e_notmp));
|
||||||
goto errret;
|
goto errret;
|
||||||
@ -19134,7 +19134,7 @@ f_tempname(argvars, rettv)
|
|||||||
static int x = 'A';
|
static int x = 'A';
|
||||||
|
|
||||||
rettv->v_type = VAR_STRING;
|
rettv->v_type = VAR_STRING;
|
||||||
rettv->vval.v_string = vim_tempname(x);
|
rettv->vval.v_string = vim_tempname(x, FALSE);
|
||||||
|
|
||||||
/* Advance 'x' to use A-Z and 0-9, so that there are at least 34 different
|
/* Advance 'x' to use A-Z and 0-9, so that there are at least 34 different
|
||||||
* names. Skip 'I' and 'O', they are used for shell redirection. */
|
* names. Skip 'I' and 'O', they are used for shell redirection. */
|
||||||
|
|||||||
@ -1158,8 +1158,8 @@ do_filter(line1, line2, eap, cmd, do_in, do_out)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if ((do_in && (itmp = vim_tempname('i')) == NULL)
|
if ((do_in && (itmp = vim_tempname('i', FALSE)) == NULL)
|
||||||
|| (do_out && (otmp = vim_tempname('o')) == NULL))
|
|| (do_out && (otmp = vim_tempname('o', FALSE)) == NULL))
|
||||||
{
|
{
|
||||||
EMSG(_(e_notmp));
|
EMSG(_(e_notmp));
|
||||||
goto filterend;
|
goto filterend;
|
||||||
@ -1963,7 +1963,7 @@ write_viminfo(file, forceit)
|
|||||||
if (fp_out == NULL)
|
if (fp_out == NULL)
|
||||||
{
|
{
|
||||||
vim_free(tempname);
|
vim_free(tempname);
|
||||||
if ((tempname = vim_tempname('o')) != NULL)
|
if ((tempname = vim_tempname('o', TRUE)) != NULL)
|
||||||
fp_out = mch_fopen((char *)tempname, WRITEBIN);
|
fp_out = mch_fopen((char *)tempname, WRITEBIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
src/fileio.c
15
src/fileio.c
@ -2872,7 +2872,7 @@ readfile_charconvert(fname, fenc, fdp)
|
|||||||
char_u *tmpname;
|
char_u *tmpname;
|
||||||
char_u *errmsg = NULL;
|
char_u *errmsg = NULL;
|
||||||
|
|
||||||
tmpname = vim_tempname('r');
|
tmpname = vim_tempname('r', FALSE);
|
||||||
if (tmpname == NULL)
|
if (tmpname == NULL)
|
||||||
errmsg = (char_u *)_("Can't find temp file for conversion");
|
errmsg = (char_u *)_("Can't find temp file for conversion");
|
||||||
else
|
else
|
||||||
@ -4288,7 +4288,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
|
|||||||
*/
|
*/
|
||||||
if (*p_ccv != NUL)
|
if (*p_ccv != NUL)
|
||||||
{
|
{
|
||||||
wfname = vim_tempname('w');
|
wfname = vim_tempname('w', FALSE);
|
||||||
if (wfname == NULL) /* Can't write without a tempfile! */
|
if (wfname == NULL) /* Can't write without a tempfile! */
|
||||||
{
|
{
|
||||||
errmsg = (char_u *)_("E214: Can't find temp file for writing");
|
errmsg = (char_u *)_("E214: Can't find temp file for writing");
|
||||||
@ -7344,14 +7344,16 @@ vim_settempdir(tempdir)
|
|||||||
/*
|
/*
|
||||||
* vim_tempname(): Return a unique name that can be used for a temp file.
|
* vim_tempname(): Return a unique name that can be used for a temp file.
|
||||||
*
|
*
|
||||||
* The temp file is NOT created.
|
* The temp file is NOT garanteed to be created. If "keep" is FALSE it is
|
||||||
|
* garanteed to NOT be created.
|
||||||
*
|
*
|
||||||
* The returned pointer is to allocated memory.
|
* The returned pointer is to allocated memory.
|
||||||
* The returned pointer is NULL if no valid name was found.
|
* The returned pointer is NULL if no valid name was found.
|
||||||
*/
|
*/
|
||||||
char_u *
|
char_u *
|
||||||
vim_tempname(extra_char)
|
vim_tempname(extra_char, keep)
|
||||||
int extra_char UNUSED; /* char to use in the name instead of '?' */
|
int extra_char UNUSED; /* char to use in the name instead of '?' */
|
||||||
|
int keep UNUSED;
|
||||||
{
|
{
|
||||||
#ifdef USE_TMPNAM
|
#ifdef USE_TMPNAM
|
||||||
char_u itmp[L_tmpnam]; /* use tmpnam() */
|
char_u itmp[L_tmpnam]; /* use tmpnam() */
|
||||||
@ -7487,8 +7489,9 @@ vim_tempname(extra_char)
|
|||||||
buf4[2] = extra_char; /* make it "VIa", "VIb", etc. */
|
buf4[2] = extra_char; /* make it "VIa", "VIb", etc. */
|
||||||
if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
|
if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
/* GetTempFileName() will create the file, we don't want that */
|
if (!keep)
|
||||||
(void)DeleteFile(itmp);
|
/* GetTempFileName() will create the file, we don't want that */
|
||||||
|
(void)DeleteFile(itmp);
|
||||||
|
|
||||||
/* Backslashes in a temp file name cause problems when filtering with
|
/* Backslashes in a temp file name cause problems when filtering with
|
||||||
* "sh". NOTE: This also checks 'shellcmdflag' to help those people who
|
* "sh". NOTE: This also checks 'shellcmdflag' to help those people who
|
||||||
|
|||||||
@ -2751,7 +2751,7 @@ mch_print_init(psettings, jobname, forceit)
|
|||||||
/* If the user didn't specify a file name, use a temp file. */
|
/* If the user didn't specify a file name, use a temp file. */
|
||||||
if (psettings->outfile == NULL)
|
if (psettings->outfile == NULL)
|
||||||
{
|
{
|
||||||
prt_ps_file_name = vim_tempname('p');
|
prt_ps_file_name = vim_tempname('p', TRUE);
|
||||||
if (prt_ps_file_name == NULL)
|
if (prt_ps_file_name == NULL)
|
||||||
{
|
{
|
||||||
EMSG(_(e_notmp));
|
EMSG(_(e_notmp));
|
||||||
|
|||||||
@ -1269,7 +1269,7 @@ cs_find_common(opt, pat, forceit, verbose, use_ll, cmdline)
|
|||||||
{
|
{
|
||||||
/* fill error list */
|
/* fill error list */
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char_u *tmp = vim_tempname('c');
|
char_u *tmp = vim_tempname('c', TRUE);
|
||||||
qf_info_T *qi = NULL;
|
qf_info_T *qi = NULL;
|
||||||
win_T *wp = NULL;
|
win_T *wp = NULL;
|
||||||
|
|
||||||
|
|||||||
@ -757,7 +757,7 @@ ml_open_file(buf)
|
|||||||
/* For a spell buffer use a temp file name. */
|
/* For a spell buffer use a temp file name. */
|
||||||
if (buf->b_spell)
|
if (buf->b_spell)
|
||||||
{
|
{
|
||||||
fname = vim_tempname('s');
|
fname = vim_tempname('s', FALSE);
|
||||||
if (fname != NULL)
|
if (fname != NULL)
|
||||||
(void)mf_open_file(mfp, fname); /* consumes fname! */
|
(void)mf_open_file(mfp, fname); /* consumes fname! */
|
||||||
buf->b_may_swap = FALSE;
|
buf->b_may_swap = FALSE;
|
||||||
|
|||||||
@ -11049,7 +11049,7 @@ get_cmd_output(cmd, infile, flags, ret_len)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* get a name for the temp file */
|
/* get a name for the temp file */
|
||||||
if ((tempname = vim_tempname('o')) == NULL)
|
if ((tempname = vim_tempname('o', FALSE)) == NULL)
|
||||||
{
|
{
|
||||||
EMSG(_(e_notmp));
|
EMSG(_(e_notmp));
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@ -5838,7 +5838,7 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
|
|||||||
/*
|
/*
|
||||||
* get a name for the temp file
|
* get a name for the temp file
|
||||||
*/
|
*/
|
||||||
if ((tempname = vim_tempname('o')) == NULL)
|
if ((tempname = vim_tempname('o', FALSE)) == NULL)
|
||||||
{
|
{
|
||||||
EMSG(_(e_notmp));
|
EMSG(_(e_notmp));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
|||||||
@ -23,7 +23,7 @@ void buf_reload __ARGS((buf_T *buf, int orig_mode));
|
|||||||
void buf_store_time __ARGS((buf_T *buf, struct stat *st, char_u *fname));
|
void buf_store_time __ARGS((buf_T *buf, struct stat *st, char_u *fname));
|
||||||
void write_lnum_adjust __ARGS((linenr_T offset));
|
void write_lnum_adjust __ARGS((linenr_T offset));
|
||||||
void vim_deltempdir __ARGS((void));
|
void vim_deltempdir __ARGS((void));
|
||||||
char_u *vim_tempname __ARGS((int extra_char));
|
char_u *vim_tempname __ARGS((int extra_char, int keep));
|
||||||
void forward_slash __ARGS((char_u *fname));
|
void forward_slash __ARGS((char_u *fname));
|
||||||
void aubuflocal_remove __ARGS((buf_T *buf));
|
void aubuflocal_remove __ARGS((buf_T *buf));
|
||||||
int au_has_group __ARGS((char_u *name));
|
int au_has_group __ARGS((char_u *name));
|
||||||
|
|||||||
@ -2945,7 +2945,7 @@ get_mef_name()
|
|||||||
|
|
||||||
if (*p_mef == NUL)
|
if (*p_mef == NUL)
|
||||||
{
|
{
|
||||||
name = vim_tempname('e');
|
name = vim_tempname('e', FALSE);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
EMSG(_(e_notmp));
|
EMSG(_(e_notmp));
|
||||||
return name;
|
return name;
|
||||||
|
|||||||
@ -9426,7 +9426,7 @@ spell_add_word(word, len, bad, idx, undo)
|
|||||||
{
|
{
|
||||||
if (int_wordlist == NULL)
|
if (int_wordlist == NULL)
|
||||||
{
|
{
|
||||||
int_wordlist = vim_tempname('s');
|
int_wordlist = vim_tempname('s', FALSE);
|
||||||
if (int_wordlist == NULL)
|
if (int_wordlist == NULL)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -741,6 +741,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 */
|
||||||
|
/**/
|
||||||
|
684,
|
||||||
/**/
|
/**/
|
||||||
683,
|
683,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user