octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 3.0.4 RC3 (mingw 3.4.5)-2


From: Tatsuro MATSUOKA
Subject: Re: 3.0.4 RC3 (mingw 3.4.5)-2
Date: Mon, 9 Mar 2009 13:48:45 +0900 (JST)

Hello Benjamin

I have built octave-3.0.4RC5 with your patch being allied and performed the 
'make check'

  test_string.m .......................................... PASS  130/131  FAIL 1
Summary:

  PASS   4125
  FAIL      1
test of 
ov-fcn-handle.cc was successful.

  test_string.m .......................................... PASS  130/131  FAIL 1
is already discussed but not has not be correcet

http://www.nabble.com/3.0.4-RC3-td21723094.html#a21742494

It is a trivial problem that can be ignored.
However if it is fixed it will be grateful.

Here I used modified test_io.m but have no relies to now.

http://www.nabble.com/Quesion-about-test_io.m-td22074114.html#a22074114

I will vote it again to discuss it.

Regards

Tatsuro 

--- Benjamin Lindner  wrote:

> >>
> >>> Hello Benjamin
> >>>
> >>> 3.0.4 RC3 is no longer available.
> >>>
> >>> Can you remake the patch for 3.0.4 RC5?
> >>>
> >>> Regards
> >>>
> >>> Tatsuro
> >>>
> 
> Sorry if I was not specific. The path I posted was against current 
> development sources, e.g. 3.1.x.
> 
> I have backported it for the 3.0.x branch and attached it
> 
> benjamin
> > fix CRLF issues with text-mode reading in windows when loading ascii data
> 
> diff -r f4de8305599c src/ChangeLog
> --- a/src/ChangeLog   Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ChangeLog   Thu Mar 05 15:38:37 2009 +0100
> @@ -1,3 +1,15 @@
> +2009-03-03  Benjamin Lindner  <address@hidden>
> +
> +     * ls-ascii-helper.h ls-ascii-helper.cc: New files, provide helper 
> +     functions skip_until_newline(), skip_preceeding_newline() and
> +     read_until_newline() that take care of CR/LF handling.
> +     * Makefile.in: add new files
> +     * load-save.cc: Open files always in binary mode in Fload
> +     * ls-mat-ascii.cc (get_mat_data_input_line), ls-oct-ascii.cc 
> +     (extract_keyword, read_ascii_data), ls-oct-ascii.h (extract_keyword), 
> +     ov-fcn-handle.cc, ov-fcn-inline.cc, ov-range.cc, ov-str-mat.cc 
> +     (load_ascii): Use helper functions 
> +     
>  2009-02-25  Marco Caliari <address@hidden>
>  
>       * graphics.cc (base_properties::remove_child): Fix order of dims.
> diff -r f4de8305599c src/Makefile.in
> --- a/src/Makefile.in Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/Makefile.in Thu Mar 05 15:38:37 2009 +0100
> @@ -116,7 +116,7 @@
>       comment-list.h debug.h defun-dld.h defun-int.h defun.h \
>       dirfns.h dynamic-ld.h error.h file-io.h gripes.h help.h \
>       input.h lex.h load-path.h load-save.h ls-hdf5.h \
> -     ls-mat-ascii.h ls-mat4.h ls-mat5.h ls-oct-ascii.h \
> +     ls-mat-ascii.h ls-mat4.h ls-mat5.h ls-oct-ascii.h ls-ascii-helper.h \
>       ls-oct-binary.h ls-utils.h mex.h mexproto.h oct-errno.h \
>       oct-fstrm.h oct-hist.h oct-iostrm.h oct-map.h oct-obj.h \
>       oct-prcstrm.h oct-procbuf.h oct-stdstrm.h oct-stream.h \
> @@ -186,7 +186,7 @@
>       cutils.c data.cc debug.cc defaults.cc defun.cc dirfns.cc \
>       dynamic-ld.cc error.cc file-io.cc graphics.cc gripes.cc \
>       help.cc input.cc lex.l load-path.cc load-save.cc ls-hdf5.cc \
> -     ls-mat-ascii.cc ls-mat4.cc ls-mat5.cc ls-oct-ascii.cc \
> +     ls-mat-ascii.cc ls-mat4.cc ls-mat5.cc ls-oct-ascii.cc 
> ls-ascii-helper.cc \
>       ls-oct-binary.cc ls-utils.cc main.c mappers.cc matherr.c \
>       mex.cc oct-fstrm.cc oct-hist.cc oct-iostrm.cc oct-map.cc \
>       oct-obj.cc oct-prcstrm.cc oct-procbuf.cc oct-stream.cc \
> diff -r f4de8305599c src/load-save.cc
> --- a/src/load-save.cc        Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/load-save.cc        Thu Mar 05 15:38:37 2009 +0100
> @@ -906,15 +906,12 @@
>  
>         std::ios::openmode mode = std::ios::in;
>  
> -       if (format == LS_BINARY
> -#ifdef HAVE_HDF5
> -           || format == LS_HDF5
> -#endif
> -           || format == LS_MAT_BINARY
> -           || format == LS_MAT5_BINARY
> -           || format == LS_MAT7_BINARY)
> -         mode |= std::ios::binary;
> -
> +       // Open in binary mode in any case, to fix annoying bug that
> +       // text-mode opened streams cannot be seekg'ed/tellg'ed with
> +       // mingw32 (See http://oldwiki.mingw.org/index.php/Known%20Problems )
> +       // The CR/LF issues are handled in ls-ascii-helper.cc
> +       mode |= std::ios::binary;
> +       
>  #ifdef HAVE_ZLIB
>         if (use_zlib)
>           {
> diff -r f4de8305599c src/ls-ascii-helper.cc
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/src/ls-ascii-helper.cc  Thu Mar 05 15:38:37 2009 +0100
> @@ -0,0 +1,160 @@
> +/*
> +
> +Copyright (C) 2003, 2005, 2006, 2007 John W. Eaton
> +
> +This file is part of Octave.
> +
> +Octave is free software; you can redistribute it and/or modify it
> +under the terms of the GNU General Public License as published by the
> +Free Software Foundation; either version 3 of the License, or (at your
> +option) any later version.
> +
> +Octave is distributed in the hope that it will be useful, but WITHOUT
> +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> +FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +for more details.
> +
> +You should have received a copy of the GNU General Public License
> +along with Octave; see the file COPYING.  If not, see
> +<http://www.gnu.org/licenses/>.
> +
> +*/
> +
> +
> +#include "ls-ascii-helper.h"
> +
> +#include <iostream>
> +#include <sstream>
> +
> +// Helper functions when reading from ascii files.
> +// These function take care of CR/LF issues when files are opened in 
> text-mode for reading 
> +
> +// Skip characters from stream IS until a newline is reached.
> +// Depending on KEEP_NEWLINE, either eat newline from stream or
> +// keep it unread
> +
> +void
> +skip_until_newline( std::istream& is, bool keep_newline )
> +{
> +  if (!is)
> +    return;
> +  
> +  char c,d;
> +  
> +  while (is)
> +  {
> +      c = is.peek();
> +      if (c == '\n' || c == '\r')
> +      {
> +       // reached newline
> +       if (keep_newline == false)
> +       {
> +           // eat the CR or LF character
> +           is.get(d);
> +           
> +           // make sure that for binary-mode opened ascii files containing 
> CRLF line endings
> +           // we skip the LF after CR...
> +           if (c == '\r' && is.peek()=='\n')
> +           {
> +               // yes, LF following CR, eat it...
> +               is.get(d);
> +           }
> +       }
> +       
> +       // Newline was found, and read from stream if keep_newline==true, so 
> exit loop
> +       break;
> +      }
> +      else
> +       // no newline charater peeked, so read it and proceed to next 
> character
> +       is.get(d);
> +  }
> +  
> +  return;
> +}
> +
> +
> +// If stream IS currently points to a newline (a leftover from a previous 
> read)
> +// then eat newline(s) until a non-newline character is found
> +
> +void
> +skip_preceeding_newline( std::istream& is )
> +{
> +  if (!is)
> +    return;
> +  
> +  char c,d;
> +  
> +  // Check if IS currently points to newline character
> +  c = is.peek();
> +  if (c == '\n' || c == '\r')
> +  {
> +      // Yes, at newline
> +      do {
> +       // eat the CR or LF character
> +       is.get(d);
> +       
> +       // make sure that for binary-mode opened ascii files containing CRLF 
> line endings
> +       // we skip the LF after CR...
> +       if (c == '\r' && is.peek() == '\n')
> +       {
> +           // yes, LF following CR, eat it...
> +           is.get(d);
> +       }
> +       
> +       // Peek into next character
> +       c = is.peek();
> +      // Loop while still a newline ahead
> +      } while( c == '\n' || c == '\r' );
> +  }
> +  
> +  return;
> +}
> +
> +
> +// Read charaters from stream IS until a newline is reached.
> +// Depending on KEEP_NEWLINE, either eat newline from stream or
> +// keep it unread
> +// Characters read are stored and returned as std::string
> +
> +std::string
> +read_until_newline( std::istream& is, bool keep_newline )
> +{
> +  if (!is)
> +    return std::string();
> +  
> +  char c,d;
> +  std::ostringstream buf;
> +  
> +  while (is)
> +  {
> +      c = is.peek();
> +      if (c == '\n' || c == '\r')
> +      {
> +       // reached newline
> +       if (keep_newline == false)
> +       {
> +           // eat the CR or LF character
> +           is.get(d);
> +           
> +           // make sure that for binary-mode opened ascii files containing 
> CRLF line endings
> +           // we skip the LF after CR...
> +           if (c == '\r' && is.peek() == '\n')
> +           {
> +               // yes, LF following CR, eat it...
> +               is.get(d);
> +           }
> +       }
> +       
> +       // Newline was found, and read from stream if keep_newline==true, so 
> exit loop
> +       break;
> +      }
> +      else
> +      {
> +       // no newline charater peeked, so read it, store it, and proceed to 
> next
> +       is.get(d);
> +       buf << d;
> +      }
> +  }
> +  
> +  return buf.str();
> +}
> diff -r f4de8305599c src/ls-ascii-helper.h
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/src/ls-ascii-helper.h   Thu Mar 05 15:38:37 2009 +0100
> @@ -0,0 +1,40 @@
> +/*
> +
> +Copyright (C) 2003, 2005, 2006, 2007 John W. Eaton
> +
> +This file is part of Octave.
> +
> +Octave is free software; you can redistribute it and/or modify it
> +under the terms of the GNU General Public License as published by the
> +Free Software Foundation; either version 3 of the License, or (at your
> +option) any later version.
> +
> +Octave is distributed in the hope that it will be useful, but WITHOUT
> +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> +FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +for more details.
> +
> +You should have received a copy of the GNU General Public License
> +along with Octave; see the file COPYING.  If not, see
> +<http://www.gnu.org/licenses/>.
> +
> +*/
> +
> +#if !defined (octave_ls_ascii_helper_h)
> +#define octave_ls_ascii_helper_h 1
> +
> +#include <iosfwd>
> +#include <string>
> +
> +#include "oct-dlldefs.h"
> +
> +extern OCTINTERP_API void
> +skip_until_newline( std::istream& is, bool keep_newline = false );
> +
> +extern OCTINTERP_API void
> +skip_preceeding_newline( std::istream& is );
> +
> +extern OCTINTERP_API std::string
> +read_until_newline( std::istream& is, bool keep_newline = false );
> +
> +#endif  // !defined (octave_ls_ascii_helper_h)
> diff -r f4de8305599c src/ls-mat-ascii.cc
> --- a/src/ls-mat-ascii.cc     Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ls-mat-ascii.cc     Thu Mar 05 15:38:37 2009 +0100
> @@ -65,6 +65,7 @@
>  #include "dMatrix.h"
>  
>  #include "ls-mat-ascii.h"
> +#include "ls-ascii-helper.h"
>  
>  static std::string
>  get_mat_data_input_line (std::istream& is)
> @@ -81,14 +82,16 @@
>        while (is.get (c))
>       {
>         if (c == '\n' || c == '\r')
> -         break;
> +         {
> +           // Let skip_until_newline handle CR/LF issues...
> +           skip_until_newline (is, false);
> +           break;
> +         }
>  
>         if (c == '%' || c == '#')
>           {
>             // skip to end of line
> -           while (is.get (c))
> -             if (c == '\n' || c == '\r')
> -               break;
> +           skip_until_newline (is, false);
>  
>             break;
>           }
> diff -r f4de8305599c src/ls-oct-ascii.cc
> --- a/src/ls-oct-ascii.cc     Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ls-oct-ascii.cc     Thu Mar 05 15:38:37 2009 +0100
> @@ -65,6 +65,7 @@
>  #include "dMatrix.h"
>  
>  #include "ls-oct-ascii.h"
> +#include "ls-ascii-helper.h"
>  
>  // The number of decimal digits to use when writing ascii data.
>  static int Vsave_precision = 16;
> @@ -116,14 +117,15 @@
>               }
>  
>             retval = value.str ();
> +           skip_until_newline (is, false);
>             break;
>           }
>         else if (next_only)
>           break;
>         else
>           {
> -           while (is.get (c) && c != '\n' && c != '\r')
> -             ; // Skip to end of line.
> +           // Skip to end of line
> +           skip_until_newline (is, false);
>           }
>       }
>      }
> diff -r f4de8305599c src/ls-oct-ascii.h
> --- a/src/ls-oct-ascii.h      Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ls-oct-ascii.h      Thu Mar 05 15:38:37 2009 +0100
> @@ -29,6 +29,7 @@
>  #include <string>
>  
>  #include "str-vec.h"
> +#include "ls-ascii-helper.h"
>  
>  // Flag for cell elements
>  #define CELL_ELT_TAG "<cell-element>"
> @@ -103,8 +104,8 @@
>               is >> value;
>             if (is)
>               status = true;
> -           while (is.get (c) && c != '\n' && c != '\r')
> -             ; // Skip to beginning of next line;
> +           // Skip to beginning of next line;
> +           skip_until_newline (is, false);
>             break;
>           }
>         else if (next_only)
> @@ -165,8 +166,8 @@
>                   is >> value;
>                 if (is)
>                   status = true;
> -               while (is.get (c) && c != '\n' && c != '\r')
> -                 ; // Skip to beginning of next line;
> +               // Skip to beginning of next line;
> +               skip_until_newline (is, false);
>                 return status;
>               }
>           }
> diff -r f4de8305599c src/ov-fcn-handle.cc
> --- a/src/ov-fcn-handle.cc    Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ov-fcn-handle.cc    Thu Mar 05 15:38:37 2009 +0100
> @@ -56,6 +56,7 @@
>  #include "ls-oct-binary.h"
>  #include "ls-hdf5.h"
>  #include "ls-utils.h"
> +#include "ls-ascii-helper.h"
>  
>  DEFINE_OCTAVE_ALLOCATOR (octave_fcn_handle);
>  
> @@ -330,26 +331,18 @@
>      {
>        octave_idx_type len = 0;
>        char c;
> -      std::ostringstream buf;
> +      std::string buf;
>  
>        // Skip preceeding newline(s).
> -      while (is.get (c) && c == '\n')
> -     /* do nothing */;
> +      skip_preceeding_newline (is);
>  
>        if (is)
>       {
> -       buf << c;
>  
>         // Get a line of text whitespace characters included, leaving
>         // newline in the stream.
> +       buf = read_until_newline (is, true);
>  
> -       while (is.peek () != '\n')
> -         {
> -           is.get (c);
> -           if (! is)
> -             break;
> -           buf << c;
> -         }
>       }
>  
>        pos = is.tellg ();
> @@ -408,7 +401,7 @@
>  
>         int parse_status;
>         octave_value anon_fcn_handle = 
> -         eval_string (buf.str (), true, parse_status);
> +         eval_string (buf, true, parse_status);
>  
>         if (parse_status == 0)
>           {
> diff -r f4de8305599c src/ov-fcn-inline.cc
> --- a/src/ov-fcn-inline.cc    Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ov-fcn-inline.cc    Thu Mar 05 15:38:37 2009 +0100
> @@ -47,6 +47,7 @@
>  #include "ls-oct-ascii.h"
>  #include "ls-hdf5.h"
>  #include "ls-utils.h"
> +#include "ls-ascii-helper.h"
>  
>  DEFINE_OCTAVE_ALLOCATOR (octave_fcn_inline);
>  
> @@ -139,27 +140,20 @@
>       nm = "";
>  
>        char c;
> -      std::ostringstream buf;
> +      std::string buf;
>  
>        // Skip preceeding newline(s)
> -      while (is.get (c) && c == '\n');
> +      skip_preceeding_newline (is);
>  
>        if (is)
>       {
> -       buf << c;
>  
>         // Get a line of text whitespace characters included, leaving
>         // newline in the stream
> -       while (is.peek () != '\n')
> -         {
> -           is.get (c);
> -           if (! is)
> -             break;
> -           buf << c;
> -         }
> +       buf = read_until_newline (is, true);
>       }
>  
> -      iftext = buf.str ();
> +      iftext = buf;
>  
>        octave_fcn_inline tmp (iftext, ifargs, nm);
>        fcn = tmp.fcn;
> diff -r f4de8305599c src/ov-range.cc
> --- a/src/ov-range.cc Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ov-range.cc Thu Mar 05 15:38:37 2009 +0100
> @@ -41,6 +41,7 @@
>  #include "byte-swap.h"
>  #include "ls-hdf5.h"
>  #include "ls-utils.h"
> +#include "ls-ascii-helper.h"
>  
>  DEFINE_OCTAVE_ALLOCATOR (octave_range);
>  
> @@ -274,14 +275,9 @@
>       break;
>      }
>  
> -  for (;;)
> -    {
> -      if (is && (c == '%' || c == '#'))
> -     while (is.get (c) && c != '\n')
> -       ; // Skip to beginning of next line, ignoring everything.
> -      else
> -     break;
> -    }
> +  // Skip to beginning of next line, ignoring everything.
> +  skip_until_newline (is, false);
> +  
>  }
>  
>  bool 
> diff -r f4de8305599c src/ov-str-mat.cc
> --- a/src/ov-str-mat.cc       Thu Mar 05 15:22:25 2009 +0100
> +++ b/src/ov-str-mat.cc       Thu Mar 05 15:38:37 2009 +0100
> @@ -48,6 +48,7 @@
>  #include "pr-output.h"
>  #include "pt-mat.h"
>  #include "utils.h"
> +#include "ls-ascii-helper.h"
>  
>  DEFINE_OCTAVE_ALLOCATOR (octave_char_matrix_str);
>  DEFINE_OCTAVE_ALLOCATOR (octave_char_matrix_sq_str);
> @@ -344,8 +345,7 @@
>                     char *ftmp = tmp.fortran_vec ();
>  
>                     // Skip the return line
> -                   if (! is.read (ftmp, 1))
> -                     return false;
> +                   skip_preceeding_newline (is);
>  
>                     if (! is.read (ftmp, dv.numel ()) || !is)
>                       {
> 


--------------------------------------
Power up the Internet with Yahoo! Toolbar.
http://pr.mail.yahoo.co.jp/toolbar/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]