changeset 27382:9354d33dfbc4

accept 'E' and 'G' as scanf conversion specifiers (bug #56869) * oct-stream.cc (scanf_format_list::process_conversion, scanf_format_list::all_numeric_conversions, octave_scan<> (std::istream&, const scanf_format_elt&, double *)): Handle 'E' and 'G' conversion specifiers the same as 'e' and 'g'.
author John W. Eaton <jwe@octave.org>
date Mon, 09 Sep 2019 18:48:40 -0400
parents d4fdaeaab7f3
children 44c72e41d468
files libinterp/corefcn/oct-stream.cc
diffstat 1 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/oct-stream.cc	Mon Sep 09 16:40:08 2019 -0400
+++ b/libinterp/corefcn/oct-stream.cc	Mon Sep 09 18:48:40 2019 -0400
@@ -529,7 +529,10 @@
               }
             goto fini;
 
+            // We accept E and G for compatibility with undocumented
+            // Matlab behavior.
           case 'e': case 'f': case 'g':
+          case 'E': case 'G':
             if (modifier == 'h')
               {
                 nconv = -1;
@@ -717,7 +720,7 @@
             switch (elt->type)
               {
               case 'd': case 'i': case 'o': case 'u': case 'x':
-              case 'e': case 'f': case 'g':
+              case 'e': case 'f': case 'g': case 'E': case 'G':
                 break;
 
               default:
@@ -4337,6 +4340,8 @@
       case 'e':
       case 'f':
       case 'g':
+      case 'E':
+      case 'G':
         {
           int c1 = std::istream::traits_type::eof ();
 
@@ -4862,6 +4867,7 @@
                     break;
 
                   case 'e': case 'f': case 'g':
+                  case 'E': case 'G':
                     {
                       double tmp;
 
@@ -5183,6 +5189,7 @@
             break;
 
           case 'e': case 'f': case 'g':
+          case 'E': case 'G':
             {
               double tmp;