* Viewing executables and compressed files is no longer inhibited.

This commit is contained in:
Gunnar Ritter 2005-08-04 17:03:27 +00:00
parent f2ae772abb
commit b5ea77e25f
3 changed files with 4 additions and 94 deletions

View File

@ -3,6 +3,7 @@ Release ...
vi usually does not return to ex mode with "screen too large" when the vi usually does not return to ex mode with "screen too large" when the
terminal is resized on a large monitor anymore. terminal is resized on a large monitor anymore.
* ex (not vi) can now edit files with lines of arbitrary length. * ex (not vi) can now edit files with lines of arbitrary length.
* Viewing executables and compressed files is no longer inhibited.
Release 3/25/05 Release 3/25/05
* vi no longer dies with a segmentation fault if a line does not fit on the * vi no longer dies with a segmentation fault if a line does not fit on the

93
ex_io.c
View File

@ -73,7 +73,7 @@
#ifndef lint #ifndef lint
#ifdef DOSCCS #ifdef DOSCCS
static char sccsid[] = "@(#)ex_io.c 1.41 (gritter) 8/4/05"; static char sccsid[] = "@(#)ex_io.c 1.42 (gritter) 8/4/05";
#endif #endif
#endif #endif
@ -407,9 +407,7 @@ samei(struct stat *sp, char *cp)
void void
rop(int c) rop(int c)
{ {
register int i;
struct stat stbuf; struct stat stbuf;
char magic[4];
static int ovro; /* old value(READONLY) */ static int ovro; /* old value(READONLY) */
static int denied; /* 1 if READONLY was set due to file permissions */ static int denied; /* 1 if READONLY was set due to file permissions */
@ -459,95 +457,6 @@ rop(int c)
case S_IFIFO: case S_IFIFO:
error(catgets(catd, 1, 96, " Named pipe")); error(catgets(catd, 1, 96, " Named pipe"));
#endif #endif
case S_IFREG:
/*
* The magics are checked byte-wise now to avoid
* endianness problems. Some quite old types
* were omitted.
*
* Feel free too add more magics here, but do not
* make this a copy of the `file' program.
*
* GR
*/
i = read(io, magic, sizeof(magic));
lseek(io, (off_t) 0, SEEK_SET);
if (i != sizeof(magic))
break;
switch (magic[0]&0377) {
case 01: /* big endian a.out */
if (magic[1] != 05 && magic[1] != 07
&& magic[1] != 010 && magic[1] != 011
&& magic[1] != 013 && magic[1] != 030
&& magic[1] != 031)
break;
goto is_exec;
case 0314: /* Linux/ia32 QMAGIC */
if (magic[1] != 0 || magic[2] != 0144)
break;
goto is_exec;
case 05: /* data overlay on exec */
case 07: /* unshared */
case 010: /* shared text */
case 011: /* separate I/D */
case 013: /* VM/Unix demand paged */
case 030: /* PDP-11 Overlay shared */
case 031: /* PDP-11 Overlay sep I/D */
if (magic[1] == 01)
is_exec:
error(catgets(catd, 1, 97, " Executable"));
break;
case 037:
switch (magic[1]&0377) {
case 036: /* pack */
case 037: /* compact */
case 0235: /* compress */
case 0213: /* gzip */
/*
* We omit bzip2 here since it has
* an ASCII header.
*/
error(catgets(catd, 1, 98, " Compressed Data"));
}
break;
case 0177:
if (magic[1] == 'E' && magic[2] == 'L'
&& magic[3] == 'F')
error(catgets(catd, 1, 99, " ELF object"));
break;
default:
break;
}
#ifdef notdef
/*
* We do not forbid the editing of portable archives
* because it is reasonable to edit them, especially
* if they are archives of text files. This is
* especially useful if you archive source files together
* and copy them to another system with ~%take, since
* the files sometimes show up munged and must be fixed.
*/
case 0177545:
case 0177555:
error(catgets(catd, 1, 100, " Archive"));
default:
#ifdef mbb
/* C/70 has a 10 bit byte */
if (magic & 03401600)
#else
/* Everybody else has an 8 bit byte */
if (magic & 0100200)
#endif
error(catgets(catd, 1, 101, " Non-ascii file"));
break;
}
#endif /* notdef */
} }
if (c != 'r') { if (c != 'r') {
if (value(READONLY) && denied) { if (value(READONLY) && denied) {

View File

@ -70,7 +70,7 @@
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* Sccsid @(#)ex_version.c 1.140 (gritter) 8/4/05 * Sccsid @(#)ex_version.c 1.141 (gritter) 8/4/05
*/ */
#include "ex.h" #include "ex.h"
@ -100,7 +100,7 @@ ex_cmdsub.c:static char sccsid[] = "@(#)ex_cmdsub.c 1.31 (gritter) 8/4/05";
ex_data.c:static char sccsid[] = "@(#)ex_data.c 1.14 (gritter) 11/23/04"; ex_data.c:static char sccsid[] = "@(#)ex_data.c 1.14 (gritter) 11/23/04";
ex_extern.c:static char sccsid[] = "@(#)ex_extern.c 1.6 (gritter) 11/23/04"; ex_extern.c:static char sccsid[] = "@(#)ex_extern.c 1.6 (gritter) 11/23/04";
ex_get.c:static char sccsid[] = "@(#)ex_get.c 1.18 (gritter) 8/4/05"; ex_get.c:static char sccsid[] = "@(#)ex_get.c 1.18 (gritter) 8/4/05";
ex_io.c:static char sccsid[] = "@(#)ex_io.c 1.41 (gritter) 8/4/05"; ex_io.c:static char sccsid[] = "@(#)ex_io.c 1.42 (gritter) 8/4/05";
ex_proto.h: * Sccsid @(#)ex_proto.h 1.31 (gritter) 8/4/05 ex_proto.h: * Sccsid @(#)ex_proto.h 1.31 (gritter) 8/4/05
ex_put.c:static char sccsid[] = "@(#)ex_put.c 1.32 (gritter) 2/17/05"; ex_put.c:static char sccsid[] = "@(#)ex_put.c 1.32 (gritter) 2/17/05";
ex_re.c:static char sccsid[] = "@(#)ex_re.c 1.59 (gritter) 8/4/05"; ex_re.c:static char sccsid[] = "@(#)ex_re.c 1.59 (gritter) 8/4/05";