changeset 27385:9a59876c1c4c

accept 'X' as scanf conversion specifier (bug #56869) * oct-stream.cc (scanf_format_list::process_conversion, scanf_format_list::all_numeric_conversions, octave_scan_1, base_stream::do_scanf, base_stream::do_oscanf): Handle 'X' conversion specifier the same as 'x'.
author Mike Miller <mtmiller@octave.org>
date Tue, 10 Sep 2019 15:44:01 -0700
parents 918a3df652c3
children 69dc24383358
files libinterp/corefcn/oct-stream.cc
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/oct-stream.cc	Tue Sep 10 15:54:39 2019 -0400
+++ b/libinterp/corefcn/oct-stream.cc	Tue Sep 10 15:44:01 2019 -0700
@@ -521,7 +521,9 @@
               modifier = s[i++];
             break;
 
+          // We accept X for compatibility with undocumented Matlab behavior.
           case 'd': case 'i': case 'o': case 'u': case 'x':
+          case 'X':
             if (modifier == 'L')
               {
                 nconv = -1;
@@ -719,7 +721,7 @@
 
             switch (elt->type)
               {
-              case 'd': case 'i': case 'o': case 'u': case 'x':
+              case 'd': case 'i': case 'o': case 'u': case 'x': case 'X':
               case 'e': case 'f': case 'g': case 'E': case 'G':
                 break;
 
@@ -4195,6 +4197,7 @@
         break;
 
       case 'x':
+      case 'X':
         is >> std::hex >> value >> std::dec;
         break;
 
@@ -4832,7 +4835,7 @@
                     }
                     break;
 
-                  case 'o': case 'u': case 'x':
+                  case 'o': case 'u': case 'x': case 'X':
                     {
                       switch (elt->modifier)
                         {
@@ -5142,7 +5145,7 @@
             }
             break;
 
-          case 'o': case 'u': case 'x':
+          case 'o': case 'u': case 'x': case 'X':
             {
               switch (elt->modifier)
                 {