[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 19:06:39 +0900 (JST) |
Hello
I have forgotten to express my sincere thanks to Benjamin!
Regards
Tatsuro
--- Tatsuro MATSUOKA wrote:
> 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/
>
--------------------------------------
Power up the Internet with Yahoo! Toolbar.
http://pr.mail.yahoo.co.jp/toolbar/
Re: 3.0.4 RC3 (mingw 3.4.5)-2, John W. Eaton, 2009/03/10