summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2009-11-17 11:08:52 +0000
committerBram Moolenaar <Bram@vim.org>2009-11-17 11:08:52 +0000
commiteaf033921144ef2402ee1e521c111fcb2e953d04 (patch)
tree6392b02f5d3c2277f6ae7fa8652f668bf99e6dd2
parentd7d5b47dc73bbde3ed882f4a6e4dc42aaec5247a (diff)
downloadvim-git-eaf033921144ef2402ee1e521c111fcb2e953d04.tar.gz
updated for version 7.2-294v7.2.294
-rwxr-xr-xsrc/auto/configure3
-rw-r--r--src/config.h.in1
-rw-r--r--src/configure.in2
-rw-r--r--src/fileio.c87
-rw-r--r--src/version.c2
5 files changed, 60 insertions, 35 deletions
diff --git a/src/auto/configure b/src/auto/configure
index 85d7da564..eb683c14a 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -14019,9 +14019,10 @@ fi
+
for ac_func in bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \
getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
- memset nanosleep opendir putenv qsort readlink select setenv \
+ memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
sigvec strcasecmp strerror strftime stricmp strncasecmp \
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
diff --git a/src/config.h.in b/src/config.h.in
index b603c23c7..0d39b4388 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -157,6 +157,7 @@
#undef HAVE_LSTAT
#undef HAVE_MEMCMP
#undef HAVE_MEMSET
+#undef HAVE_MKDTEMP
#undef HAVE_NANOSLEEP
#undef HAVE_OPENDIR
#undef HAVE_FLOAT_FUNCS
diff --git a/src/configure.in b/src/configure.in
index fa58c6e75..f994677b8 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -2635,7 +2635,7 @@ fi
dnl Check for functions in one big call, to reduce the size of configure
AC_CHECK_FUNCS(bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \
getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
- memset nanosleep opendir putenv qsort readlink select setenv \
+ memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
sigvec strcasecmp strerror strftime stricmp strncasecmp \
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
diff --git a/src/fileio.c b/src/fileio.c
index 5deb1a398..e7d1c75b4 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -146,6 +146,7 @@ static int get_mac_fio_flags __ARGS((char_u *ptr));
# endif
#endif
static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf));
+static void vim_settempdir __ARGS((char_u *tempdir));
#ifdef FEAT_AUTOCMD
static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name");
#endif
@@ -6987,6 +6988,33 @@ vim_deltempdir()
#endif
/*
+ * Directory "tempdir" was created. Expand this name to a full path and put
+ * it in "vim_tempdir". This avoids that using ":cd" would confuse us.
+ * "tempdir" must be no longer than MAXPATHL.
+ */
+ static void
+vim_settempdir(tempdir)
+ char_u *tempdir;
+{
+ char_u *buf;
+
+ buf = alloc((unsigned)MAXPATHL + 2);
+ if (buf != NULL)
+ {
+ if (vim_FullName(tempdir, buf, MAXPATHL, FALSE) == FAIL)
+ STRCPY(buf, tempdir);
+# ifdef __EMX__
+ if (vim_strchr(buf, '/') != NULL)
+ STRCAT(buf, "/");
+ else
+# endif
+ add_pathsep(buf);
+ vim_tempdir = vim_strsave(buf);
+ vim_free(buf);
+ }
+}
+
+/*
* vim_tempname(): Return a unique name that can be used for a temp file.
*
* The temp file is NOT created.
@@ -7007,8 +7035,6 @@ vim_tempname(extra_char)
#ifdef TEMPDIRNAMES
static char *(tempdirs[]) = {TEMPDIRNAMES};
int i;
- long nr;
- long off;
# ifndef EEXIST
struct stat st;
# endif
@@ -7027,6 +7053,12 @@ vim_tempname(extra_char)
*/
for (i = 0; i < (int)(sizeof(tempdirs) / sizeof(char *)); ++i)
{
+ size_t itmplen;
+# ifndef HAVE_MKDTEMP
+ long nr;
+ long off;
+# endif
+
/* expand $TMP, leave room for "/v1100000/999999999" */
expand_env((char_u *)tempdirs[i], itmp, TEMPNAMELEN - 20);
if (mch_isdir(itmp)) /* directory exists */
@@ -7040,7 +7072,14 @@ vim_tempname(extra_char)
else
# endif
add_pathsep(itmp);
+ itmplen = STRLEN(itmp);
+# ifdef HAVE_MKDTEMP
+ /* Leave room for filename */
+ STRCAT(itmp, "vXXXXXX");
+ if (mkdtemp((char *)itmp) != NULL)
+ vim_settempdir(itmp);
+# else
/* Get an arbitrary number of up to 6 digits. When it's
* unlikely that it already exists it will be faster,
* otherwise it doesn't matter. The use of mkdir() avoids any
@@ -7052,59 +7091,41 @@ vim_tempname(extra_char)
for (off = 0; off < 10000L; ++off)
{
int r;
-#if defined(UNIX) || defined(VMS)
+# if defined(UNIX) || defined(VMS)
mode_t umask_save;
-#endif
+# endif
- sprintf((char *)itmp + STRLEN(itmp), "v%ld", nr + off);
-# ifndef EEXIST
+ sprintf((char *)itmp + itmplen, "v%ld", nr + off);
+# ifndef EEXIST
/* If mkdir() does not set errno to EEXIST, check for
* existing file here. There is a race condition then,
* although it's fail-safe. */
if (mch_stat((char *)itmp, &st) >= 0)
continue;
-# endif
-#if defined(UNIX) || defined(VMS)
+# endif
+# if defined(UNIX) || defined(VMS)
/* Make sure the umask doesn't remove the executable bit.
* "repl" has been reported to use "177". */
umask_save = umask(077);
-#endif
+# endif
r = vim_mkdir(itmp, 0700);
-#if defined(UNIX) || defined(VMS)
+# if defined(UNIX) || defined(VMS)
(void)umask(umask_save);
-#endif
+# endif
if (r == 0)
{
- char_u *buf;
-
- /* Directory was created, use this name.
- * Expand to full path; When using the current
- * directory a ":cd" would confuse us. */
- buf = alloc((unsigned)MAXPATHL + 1);
- if (buf != NULL)
- {
- if (vim_FullName(itmp, buf, MAXPATHL, FALSE)
- == FAIL)
- STRCPY(buf, itmp);
-# ifdef __EMX__
- if (vim_strchr(buf, '/') != NULL)
- STRCAT(buf, "/");
- else
-# endif
- add_pathsep(buf);
- vim_tempdir = vim_strsave(buf);
- vim_free(buf);
- }
+ vim_settempdir(itmp);
break;
}
-# ifdef EEXIST
+# ifdef EEXIST
/* If the mkdir() didn't fail because the file/dir exists,
* we probably can't create any dir here, try another
* place. */
if (errno != EEXIST)
-# endif
+# endif
break;
}
+# endif /* HAVE_MKDTEMP */
if (vim_tempdir != NULL)
break;
}
diff --git a/src/version.c b/src/version.c
index 2ee84208f..e98bda8a8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 294,
+/**/
293,
/**/
292,