From: Bram Moolenaar Date: Tue, 10 Jul 2007 15:10:54 +0000 (+0000) Subject: updated for version 7.1-027 X-Git-Tag: v7.1.027 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe1c56d6ae98b5a549475ac7b1ec34c6aec250fd;p=vim updated for version 7.1-027 --- diff --git a/src/fileio.c b/src/fileio.c index 6fd2799c8..3f094d4ef 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -44,6 +44,10 @@ /* Is there any system that doesn't have 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 static char_u *next_fenc __ARGS((char_u **pp)); # ifdef FEAT_EVAL @@ -405,6 +409,10 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags) # endif # ifdef S_ISSOCK && !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/ */ # endif ) { @@ -2265,6 +2273,13 @@ failed: } # endif # endif +# ifdef OPEN_CHR_FILES + if (S_ISCHR(perm)) /* or character special */ + { + STRCAT(IObuff, _("[character special]")); + c = TRUE; + } +# endif #endif if (curbuf->b_p_ro) { @@ -2464,6 +2479,25 @@ failed: 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 /* diff --git a/src/os_unix.h b/src/os_unix.h index d99d1c8d3..be6048fa5 100644 --- a/src/os_unix.h +++ b/src/os_unix.h @@ -508,6 +508,9 @@ int mch_rename __ARGS((const char *src, const char *dest)); #if !defined(S_ISFIFO) && defined(S_IFIFO) # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) #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, * some systems can't handle both, only use string.h in that case. */ diff --git a/src/version.c b/src/version.c index 6d9157295..38095cbac 100644 --- a/src/version.c +++ b/src/version.c @@ -666,6 +666,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 27, /**/ 26, /**/