diff libinterp/corefcn/oct-stdstrm.h @ 26703:29ea2369971d

Add basic backend for encodings in file streams (bug #55452). * oct-stream.h (base_stream): Store encoding in class. * oct-stream.cc (do_scanf_conv): Convert strings from encoding. (do_printf_string): Convert strings to encoding. (base_stream::printf): Convert format string to encoding. * oct-stdstrm.h (octave_stdiostream, octave_tstdiostream, octave_zstdiostream, create): Pass encoding through to base_stream. * oct-prcstrm.[cc,h] (octave_iprocstream, octave_oprocstream, create): Pass encoding through to octave_stdiostream. * oct-strstrm.[cc,h] (octave_istrstream, octave_ostrstream, create): Pass encoding through to base_stream.
author Markus Mützel <markus.muetzel@gmx.de>
date Sat, 09 Feb 2019 16:43:11 +0100
parents 00f796120a6d
children 92ba3434f0b0
line wrap: on
line diff
--- a/libinterp/corefcn/oct-stdstrm.h	Sat Feb 02 20:07:45 2019 +0100
+++ b/libinterp/corefcn/oct-stdstrm.h	Sat Feb 09 16:43:11 2019 +0100
@@ -40,8 +40,9 @@
                        std::ios::openmode m = std::ios::in | std::ios::out,
                        octave::mach_info::float_format ff
                          = octave::mach_info::native_float_format (),
+                       const std::string& encoding = "utf-8",
                        typename BUF_T::close_fcn cf = BUF_T::file_close)
-    : octave::base_stream (m, ff), nm (n), md (m),
+    : octave::base_stream (m, ff, encoding), nm (n), md (m),
       s (f ? new STREAM_T (f, cf) : nullptr), fnum (fid)
   { }
 
@@ -108,18 +109,20 @@
                       std::ios::openmode m = std::ios::in | std::ios::out,
                       octave::mach_info::float_format ff
                         = octave::mach_info::native_float_format (),
+                      const std::string& encoding = "utf-8",
                       c_file_ptr_buf::close_fcn cf = c_file_ptr_buf::file_close)
     : octave_tstdiostream<c_file_ptr_buf, io_c_file_ptr_stream, FILE *>
-       (n, f, f ? fileno (f) : -1, m, ff, cf) { }
+       (n, f, f ? fileno (f) : -1, m, ff, encoding, cf) { }
 
   static octave::stream
   create (const std::string& n, FILE *f = nullptr,
           std::ios::openmode m = std::ios::in | std::ios::out,
           octave::mach_info::float_format ff
             = octave::mach_info::native_float_format (),
+          const std::string& encoding = "utf-8",
           c_file_ptr_buf::close_fcn cf = c_file_ptr_buf::file_close)
   {
-    return octave::stream (new octave_stdiostream (n, f, m, ff, cf));
+    return octave::stream (new octave_stdiostream (n, f, m, ff, encoding, cf));
   }
 
   // No copying!
@@ -145,19 +148,22 @@
                        std::ios::openmode m = std::ios::in | std::ios::out,
                        octave::mach_info::float_format ff
                          = octave::mach_info::native_float_format (),
+                       const std::string& encoding = "utf-8",
                        c_zfile_ptr_buf::close_fcn cf
                          = c_zfile_ptr_buf::file_close)
     : octave_tstdiostream<c_zfile_ptr_buf, io_c_zfile_ptr_stream, gzFile>
-       (n, f, fid, m, ff, cf) { }
+       (n, f, fid, m, ff, encoding, cf) { }
 
   static octave::stream
   create (const std::string& n, gzFile f = nullptr, int fid = 0,
           std::ios::openmode m = std::ios::in | std::ios::out,
           octave::mach_info::float_format ff
             = octave::mach_info::native_float_format (),
+          const std::string& encoding = "utf-8",
           c_zfile_ptr_buf::close_fcn cf = c_zfile_ptr_buf::file_close)
   {
-    return octave::stream (new octave_zstdiostream (n, f, fid, m, ff, cf));
+    return octave::stream (new octave_zstdiostream (n, f, fid, m, ff, encoding,
+                                                    cf));
   }
 
   // No copying!