Loading ...
Sorry, an error occurred while loading the content.

Patch 7.2.100

Expand Messages
  • Bram Moolenaar
    Patch 7.2.100 Problem: When using :source on a FIFO or something else that can t rewind the first three bytes are skipped. Solution: Instead of
    Message 1 of 1 , Feb 4, 2009
    • 0 Attachment
      Patch 7.2.100
      Problem: When using ":source" on a FIFO or something else that can't rewind
      the first three bytes are skipped.
      Solution: Instead of rewinding read the first line and detect a BOM in that.
      (mostly by James Vega)
      Files: src/ex_cmds2.c


      *** ../vim-7.2.099/src/ex_cmds2.c Sat Nov 15 14:10:23 2008
      --- src/ex_cmds2.c Wed Feb 4 16:05:51 2009
      ***************
      *** 2842,2847 ****
      --- 2842,2848 ----
      linenr_T save_sourcing_lnum;
      char_u *p;
      char_u *fname_exp;
      + char_u *firstline = NULL;
      int retval = FAIL;
      #ifdef FEAT_EVAL
      scid_T save_current_SID;
      ***************
      *** 2992,3014 ****

      cookie.level = ex_nesting_level;
      #endif
      - #ifdef FEAT_MBYTE
      - cookie.conv.vc_type = CONV_NONE; /* no conversion */
      -
      - /* Try reading the first few bytes to check for a UTF-8 BOM. */
      - {
      - char_u buf[3];
      -
      - if (fread((char *)buf, sizeof(char_u), (size_t)3, cookie.fp)
      - == (size_t)3
      - && buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf)
      - /* Found BOM, setup conversion and skip over it. */
      - convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc);
      - else
      - /* No BOM found, rewind. */
      - fseek(cookie.fp, 0L, SEEK_SET);
      - }
      - #endif

      /*
      * Keep the sourcing name/lnum, for recursive calls.
      --- 2993,2998 ----
      ***************
      *** 3018,3023 ****
      --- 3002,3026 ----
      save_sourcing_lnum = sourcing_lnum;
      sourcing_lnum = 0;

      + #ifdef FEAT_MBYTE
      + cookie.conv.vc_type = CONV_NONE; /* no conversion */
      +
      + /* Read the first line so we can check for a UTF-8 BOM. */
      + firstline = getsourceline(0, (void *)&cookie, 0);
      + if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef
      + && firstline[1] == 0xbb && firstline[2] == 0xbf)
      + {
      + /* Found BOM; setup conversion, skip over BOM and recode the line. */
      + convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc);
      + p = string_convert(&cookie.conv, firstline + 3, NULL);
      + if (p != NULL)
      + {
      + vim_free(firstline);
      + firstline = p;
      + }
      + }
      + #endif
      +
      #ifdef STARTUPTIME
      time_push(&tv_rel, &tv_start);
      #endif
      ***************
      *** 3111,3119 ****
      /*
      * Call do_cmdline, which will call getsourceline() to get the lines.
      */
      ! do_cmdline(NULL, getsourceline, (void *)&cookie,
      DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
      -
      retval = OK;

      #ifdef FEAT_PROFILE
      --- 3114,3121 ----
      /*
      * Call do_cmdline, which will call getsourceline() to get the lines.
      */
      ! do_cmdline(firstline, getsourceline, (void *)&cookie,
      DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
      retval = OK;

      #ifdef FEAT_PROFILE
      ***************
      *** 3171,3176 ****
      --- 3173,3179 ----
      #endif
      fclose(cookie.fp);
      vim_free(cookie.nextline);
      + vim_free(firstline);
      #ifdef FEAT_MBYTE
      convert_setup(&cookie.conv, NULL, NULL);
      #endif
      *** ../vim-7.2.099/src/version.c Wed Feb 4 17:27:50 2009
      --- src/version.c Wed Feb 4 17:48:47 2009
      ***************
      *** 678,679 ****
      --- 678,681 ----
      { /* Add new patch number below this line */
      + /**/
      + 100,
      /**/

      --
      Well, you come from nothing, you go back to nothing... What have you
      lost? Nothing!
      -- Monty Python: The life of Brian

      /// Bram Moolenaar -- Bram@... -- 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 ///

      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_dev" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    Your message has been successfully submitted and would be delivered to recipients shortly.