forked from aniani/vim
updated for version 7.1-027
This commit is contained in:
34
src/fileio.c
34
src/fileio.c
@@ -44,6 +44,10 @@
|
|||||||
/* Is there any system that doesn't have access()? */
|
/* Is there any system that doesn't have access()? */
|
||||||
#define USE_MCH_ACCESS
|
#define USE_MCH_ACCESS
|
||||||
|
|
||||||
|
#if defined(sun) && defined(S_ISCHR)
|
||||||
|
# define OPEN_CHR_FILES
|
||||||
|
static int is_dev_fd_file(char_u *fname);
|
||||||
|
#endif
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
static char_u *next_fenc __ARGS((char_u **pp));
|
static char_u *next_fenc __ARGS((char_u **pp));
|
||||||
# ifdef FEAT_EVAL
|
# ifdef FEAT_EVAL
|
||||||
@@ -405,6 +409,10 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
|
|||||||
# endif
|
# endif
|
||||||
# ifdef S_ISSOCK
|
# ifdef S_ISSOCK
|
||||||
&& !S_ISSOCK(perm) /* ... or socket */
|
&& !S_ISSOCK(perm) /* ... or socket */
|
||||||
|
# endif
|
||||||
|
# ifdef OPEN_CHR_FILES
|
||||||
|
&& !(S_ISCHR(perm) && is_dev_fd_file(fname))
|
||||||
|
/* ... or a character special file named /dev/fd/<n> */
|
||||||
# endif
|
# endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -2265,6 +2273,13 @@ failed:
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
# ifdef OPEN_CHR_FILES
|
||||||
|
if (S_ISCHR(perm)) /* or character special */
|
||||||
|
{
|
||||||
|
STRCAT(IObuff, _("[character special]"));
|
||||||
|
c = TRUE;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
if (curbuf->b_p_ro)
|
if (curbuf->b_p_ro)
|
||||||
{
|
{
|
||||||
@@ -2464,6 +2479,25 @@ failed:
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OPEN_CHR_FILES
|
||||||
|
/*
|
||||||
|
* Returns TRUE if the file name argument is of the form "/dev/fd/\d\+",
|
||||||
|
* which is the name of files used for process substitution output by
|
||||||
|
* some shells on some operating systems, e.g., bash on SunOS.
|
||||||
|
* Do not accept "/dev/fd/[012]", opening these may hang Vim.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
is_dev_fd_file(fname)
|
||||||
|
char_u *fname;
|
||||||
|
{
|
||||||
|
return (STRNCMP(fname, "/dev/fd/", 8) == 0
|
||||||
|
&& VIM_ISDIGIT(fname[8])
|
||||||
|
&& *skipdigits(fname + 9) == NUL
|
||||||
|
&& (fname[9] != NUL
|
||||||
|
|| (fname[8] != '0' && fname[8] != '1' && fname[8] != '2')));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -508,6 +508,9 @@ int mch_rename __ARGS((const char *src, const char *dest));
|
|||||||
#if !defined(S_ISFIFO) && defined(S_IFIFO)
|
#if !defined(S_ISFIFO) && defined(S_IFIFO)
|
||||||
# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(S_ISCHR) && defined(S_IFCHR)
|
||||||
|
# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Note: Some systems need both string.h and strings.h (Savage). However,
|
/* Note: Some systems need both string.h and strings.h (Savage). However,
|
||||||
* some systems can't handle both, only use string.h in that case. */
|
* some systems can't handle both, only use string.h in that case. */
|
||||||
|
@@ -666,6 +666,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 */
|
||||||
|
/**/
|
||||||
|
27,
|
||||||
/**/
|
/**/
|
||||||
26,
|
26,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user