[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Octave-bug-tracker] [bug #41965] __makeinfo__ assumes unsigned char for
From: |
anonymous |
Subject: |
[Octave-bug-tracker] [bug #41965] __makeinfo__ assumes unsigned char for input text when it should be signed char |
Date: |
Wed, 26 Mar 2014 21:53:22 +0000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/4.8.4 Safari/534.34 |
URL:
<http://savannah.gnu.org/bugs/?41965>
Summary: __makeinfo__ assumes unsigned char for input text
when it should be signed char
Project: GNU Octave
Submitted by: None
Submitted on: Wed 26 Mar 2014 09:53:21 PM UTC
Category: Octave Function
Severity: 3 - Normal
Priority: 5 - Normal
Item Group: Incorrect Result
Status: None
Assigned to: None
Originator Name: Alan W. Irwin
Originator Email: address@hidden
Open/Closed: Open
Discussion Lock: Any
Release: 3.6.2
Operating System: GNU/Linux
_______________________________________________________
Details:
The __makeinfo__ function writes documentation strings to a temporary file
using
fwrite (fid, text);
That function assumes the documentation text is contained in an array of
unsigned char's by default. That's fine for documentation written in 7-bit
ascii, but when the text contains 8-bit utf-8 characters, those 8-bit bytes
are replaced by null characters as can be seen by the following simple
example:
function test_fwrite_utf8
fid = fopen("test.out", "w")
fwrite(fid, "The unicode character, ≥, is outputn")
endfunction
The net result of running that function is
address@hidden> od -a test.out
0000000 T h e sp u n i c o d e sp c h a r
0000020 a c t e r , sp nul nul nul , sp i s sp o
0000040 u t p u t nl
0000046
If an additional argument "schar" is used for fwrite, all is well and
the utf8 characters are written to the file without issues which appears to
prove that Octave strings are generally represented as an array of signed
char's (as opposed to an array of unsigned characters as assumed by the
__makeinfo__ function.
Indeed if the following patch
--- __makeinfo__.m_original 2014-03-26 13:56:42.741106684 -0700
+++ __makeinfo__.m 2014-03-26 13:56:19.005546479 -0700
@@ -120,7 +120,7 @@
if (fid < 0)
error ("__makeinfo__: could not create temporary file");
endif
- fwrite (fid, text);
+ fwrite (fid, text, "schar");
fclose (fid);
## Take action depending on output type
is applied, then the following code
## -*- texinfo -*-
## @deftypefn {Function File} address@hidden =} fn (@var{x}, …)
## The unicode character, ≥, is output
## @end deftypefn
function test_utf8
printf("The unicode character, ≥, is outputn")
endfunction
yields the following help result:
warning: function ./__makeinfo__.m shadows a core library function
octave:1> help test_utf8
`test_utf8' is a function from the file /home/irwin/test_octave/test_utf8.m
-- Function File: A = fn (X, …)
The unicode character, ≥, is output
Without the above patch, the help output is truncated just before
the utf-8 symbol for greater than or equal to. This is expected because
fwrite writes null characters in place of the utf8 bytes without the above
patch to the __makeinfo__ function.
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?41965>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
- [Octave-bug-tracker] [bug #41965] __makeinfo__ assumes unsigned char for input text when it should be signed char,
anonymous <=