]> granicus.if.org Git - vim/commitdiff
updated for version 7.0-130 v7.0.130
authorBram Moolenaar <Bram@vim.org>
Tue, 10 Oct 2006 16:44:07 +0000 (16:44 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 10 Oct 2006 16:44:07 +0000 (16:44 +0000)
runtime/doc/options.txt
src/fileio.c
src/option.c
src/option.h
src/os_win32.c
src/version.c

index 8fb22f850c634f83bd8dd47f591ffed0e1b4a0ee..eadd215c0434415dfca73db59ae21edfc40f2e1a 100644 (file)
@@ -4792,10 +4792,22 @@ A jump table for the options with a short description can be found at |Q_op|.
        completion with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O|
        See |complete-functions| for an explanation of how the function is
        invoked and what it should return.
-       This option is usually set by a filetype plugin.
+       This option is usually set by a filetype plugin:
        |:filetype-plugin-on|
 
 
+                               *'opendevice* *'odev* *'noopendevice* *'noodev*
+'opendevice' 'odev'    boolean (default off)
+                       global
+                       {not in Vi}
+                       {only for MS-DOS, MS-Windows and OS/2}
+       Enable reading and writing from devices.  This may get Vim stuck on a
+       device that can be opened but doesn't actually do the I/O.  Therefore
+       it is off by default.
+       Note that on MS-Windows editing "aux.h", "lpt1.txt" and the like also
+       result in editing a device.
+
+
                                                *'operatorfunc'* *'opfunc'*
 'operatorfunc' 'opfunc'        string  (default: empty)
                        global
index 42181e17b22fa9afc7cf2be75b74a9d61058bd88..7bab84e55f2bf5153f4a0f50dad9c40866b03f2d 100644 (file)
@@ -419,6 +419,20 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
     }
 #endif
 
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+    /*
+     * MS-Windows allows opening a device, but we will probably get stuck
+     * trying to read it.
+     */
+    if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE)
+    {
+       filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option"), 0);
+       msg_end();
+       msg_scroll = msg_save;
+       return FAIL;
+    }
+#endif
+
     /* set default 'fileformat' */
     if (set_options)
     {
@@ -3163,6 +3177,16 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
     }
     if (c == NODE_WRITABLE)
     {
+# if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+       /* MS-Windows allows opening a device, but we will probably get stuck
+        * trying to write to it.  */
+       if (!p_odev)
+       {
+           errnum = (char_u *)"E796: ";
+           errmsg = (char_u *)_("writing to device disabled with 'opendevice' option");
+           goto fail;
+       }
+# endif
        device = TRUE;
        newfile = TRUE;
        perm = -1;
index 1f47c60b90a069c39be4e9d9bfabbe1d895d90f1..aa8a70e6c6a80a7a94b9ea130d7f8827554fae80 100644 (file)
@@ -1810,6 +1810,14 @@ static struct vimoption
     {"open",       NULL,   P_BOOL|P_VI_DEF,
                            (char_u *)NULL, PV_NONE,
                            {(char_u *)FALSE, (char_u *)0L}},
+    {"opendevice",  "odev", P_BOOL|P_VI_DEF,
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+                           (char_u *)&p_odev, PV_NONE,
+#else
+                           (char_u *)NULL, PV_NONE,
+#endif
+                           {(char_u *)FALSE, (char_u *)FALSE}
+                           },
     {"operatorfunc", "opfunc", P_STRING|P_VI_DEF|P_SECURE,
                            (char_u *)&p_opfunc, PV_NONE,
                            {(char_u *)"", (char_u *)0L} },
index 28c58152e44b88de9b50ebf17ac311cdfde00fcd..c322f3a1c49671c73292f19e6d2d4e454789410f 100644 (file)
@@ -618,6 +618,9 @@ EXTERN int  p_more;         /* 'more' */
 #ifdef FEAT_MZSCHEME
 EXTERN long    p_mzq;          /* 'mzquantum */
 #endif
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+EXTERN int     p_odev;         /* 'opendevice' */
+#endif
 EXTERN char_u  *p_opfunc;      /* 'operatorfunc' */
 EXTERN char_u  *p_para;        /* 'paragraphs' */
 EXTERN int     p_paste;        /* 'paste' */
index af659065258bd1b0d06bba169c78964da1cec93a..cc0b326cbb3765b8cacf93c11fff4ab548435a8d 100644 (file)
@@ -2702,6 +2702,12 @@ mch_nodetype(char_u *name)
     HANDLE     hFile;
     int                type;
 
+    /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to
+     * read from it later will cause Vim to hang.  Thus return NODE_WRITABLE
+     * here. */
+    if (STRNCMP(name, "\\\\.\\", 4) == 0)
+       return NODE_WRITABLE;
+
     hFile = CreateFile(name,           /* file name */
                GENERIC_WRITE,          /* access mode */
                0,                      /* share mode */
index cab8d68789307d9f4a5d6a53a95a6a30f2faa075..87f74ac1d9bf7949f06c808712445f3a28d1f647 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    130,
 /**/
     129,
 /**/