Patch 7.0.130 (extra)
Problem:    Win32: Trying to edit or write devices may cause Vim to get stuck.
Solution:   Add the 'opendevice' option, default off.  Disallow
            reading/writing from/to devices when it's off.
            Also detect more devices by the full name starting with "\\.\".
Files:      runtime/doc/options.txt, src/fileio.c, src/option.c, src/option.h,
            src/os_win32.c


*** ../vim-7.0.129/runtime/doc/options.txt      Sun May  7 17:07:10 2006
--- runtime/doc/options.txt     Tue Oct 10 17:34:48 2006
***************
*** 4792,4801 ****
        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.
        |:filetype-plugin-on|
  
  
                                                *'operatorfunc'* *'opfunc'*
  'operatorfunc' 'opfunc'       string  (default: empty)
                        global
--- 4815,4836 ----
        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:
        |: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
*** ../vim-7.0.129/src/fileio.c Thu Sep 14 11:07:08 2006
--- src/fileio.c        Tue Oct 10 18:41:24 2006
***************
*** 419,424 ****
--- 419,438 ----
      }
  #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,3168 ****
--- 3177,3192 ----
      }
      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;
*** ../vim-7.0.129/src/option.c Tue Sep  5 16:29:38 2006
--- src/option.c        Tue Oct 10 17:16:00 2006
***************
*** 1810,1815 ****
--- 1810,1823 ----
      {"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} },
*** ../vim-7.0.129/src/option.h Mon Apr 24 21:37:06 2006
--- src/option.h        Tue Oct 10 17:17:09 2006
***************
*** 618,623 ****
--- 618,626 ----
  #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' */
*** ../vim-7.0.129/src/os_win32.c       Sun Apr 23 00:24:31 2006
--- src/os_win32.c      Tue Oct 10 17:08:23 2006
***************
*** 2702,2707 ****
--- 2702,2713 ----
      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 */
*** ../vim-7.0.129/src/version.c        Tue Oct 10 18:29:21 2006
--- src/version.c       Tue Oct 10 18:37:12 2006
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     130,
  /**/

-- 
"Space is big.  Really big.  You just won't believe how vastly hugely mind-
bogglingly big it is.  I mean, you may think it's a long way down the
road to the chemist, but that's just peanuts to space."
                -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Reply via email to