Revert "* Bug 15817 fixed: now ascii(c) with c>=128 does not crash on OSX" 75/20775/2
Stéphane MOTTELET [Fri, 1 Feb 2019 07:32:02 +0000 (08:32 +0100)]
This reverts commit 241e4cde58b8c2c282f852b05e757cd597c1768f.

This fix causes many issues for the OSX version (locale, completion, and many others).

Change-Id: Ie5253aebf860fabfe48dcb597acdbdcc0ab2958c

scilab/CHANGES.md
scilab/modules/localization/src/c/charEncoding.c
scilab/modules/localization/tests/nonreg_tests/bug_15817.dia.ref [deleted file]
scilab/modules/localization/tests/nonreg_tests/bug_15817.tst [deleted file]

index ac15325..61e8f7d 100644 (file)
@@ -686,7 +686,6 @@ Known issues
 * [#15814](http://bugzilla.scilab.org/show_bug.cgi?id=15814): Selecting graphic children with booleans yielded an error.
 * [#15815](http://bugzilla.scilab.org/show_bug.cgi?id=15815): After `polarplot()`, reversing axes or switching `gca().rotation_angles` shifted all angular and radial labels.
 * [#15816](http://bugzilla.scilab.org/show_bug.cgi?id=15816): `polarplot()`, `pie()`, `mesh()` and  `contourf()` ignored / canceled any upstream `drawlater`.
-* [#15817](http://bugzilla.scilab.org/show_bug.cgi?id=15817): `ascii(c)` with c>=128 crashed on OSX.
 * [#15818](http://bugzilla.scilab.org/show_bug.cgi?id=15818): `polarplot()` example could not be subplotted. `polarplot`'s demo did not display 'View code' and too often prompted the user.
 * [#15827](http://bugzilla.scilab.org/show_bug.cgi?id=15828): After `bode(..'rad')`, abscissae were titled 'Fréquence' instead of 'Pulsation' in french, and datatips still shew 'Hz' instead of 'rad/s'.
 * [#15830](http://bugzilla.scilab.org/show_bug.cgi?id=15830): `linspace` was not reliable for series of encoded integers.
index 84bb694..e0ee5b6 100644 (file)
@@ -113,7 +113,86 @@ int wcstat(char* filename, struct _stat *st)
     return stat_result;
 }
 /*--------------------------------------------------------------------------*/
-#else // Linux or Mac OS X
+#else
+/*--------------------------------------------------------------------------*/
+#ifdef __APPLE__ // Mac OS X
+/*--------------------------------------------------------------------------*/
+char *wide_string_to_UTF8(const wchar_t *_wide)
+{
+    size_t iCharLen = 0;
+    wchar_t *pwstr = _wide;
+    char* pchar = NULL;
+    /* The value of MB_CUR_MAX is the maximum number of bytes
+    in a multibyte character for the current locale. */
+    int iMaxLen =  0;
+
+    if (_wide == NULL)
+    {
+        return NULL;
+    }
+
+    iMaxLen =  (int)wcslen(_wide) * MB_CUR_MAX ;
+
+    pchar = (char*) MALLOC(( iMaxLen + 1) * sizeof(char));
+    if (pchar == NULL)
+    {
+        return NULL;
+    }
+    iCharLen = wcstombs (pchar, pwstr, iMaxLen);
+    if ( iCharLen == (size_t)(-1) )
+    {
+        if (pchar)
+        {
+            FREE(pchar);
+            pchar = NULL;
+        }
+        return NULL;
+    }
+    pchar[iCharLen] = '\0';
+    return pchar;
+}
+/*--------------------------------------------------------------------------*/
+wchar_t *to_wide_string(const char *_UTFStr)
+{
+    wchar_t *_buf = NULL;
+    size_t pszLen = 0;
+    char *psz = _UTFStr;
+    mbstate_t ps;
+
+    if (_UTFStr == NULL)
+    {
+        return NULL;
+    }
+
+    memset (&ps, 0x00, sizeof(ps));
+    pszLen = mbsrtowcs(NULL, (const char**)&psz, 0, &ps);
+
+    if ( pszLen == (size_t)(-1) )
+    {
+        return NULL;
+    }
+
+    _buf = (wchar_t*)MALLOC((pszLen + 1) * sizeof(wchar_t));
+    if (_buf == NULL)
+    {
+        return NULL;
+    }
+
+    pszLen = mbsrtowcs(_buf, (const char**)&psz, (int)strlen(psz), &ps);
+
+    if ( pszLen == (size_t)(-1) )
+    {
+        FREE(_buf);
+        return NULL;
+    }
+    else
+    {
+        _buf[pszLen] = L'\0';
+    }
+    return _buf;
+}
+/*--------------------------------------------------------------------------*/
+#else // Linux
 /*--------------------------------------------------------------------------*/
 char *wide_string_to_UTF8(const wchar_t *_wide)
 {
@@ -201,6 +280,8 @@ wchar_t *to_wide_string(const char *_UTFStr)
     return pOutSave;
 }
 /*--------------------------------------------------------------------------*/
+#endif
+/*--------------------------------------------------------------------------*/
 int wcstat(char* filename, struct stat *st)
 {
     return stat(filename, st);
diff --git a/scilab/modules/localization/tests/nonreg_tests/bug_15817.dia.ref b/scilab/modules/localization/tests/nonreg_tests/bug_15817.dia.ref
deleted file mode 100644 (file)
index 7a41f32..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-// =============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2018 - Stéphane MOTTELET
-//
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
-// <-- MACOSX ONLY -->
-// <-- CLI SHELL MODE -->
-//
-// <-- Non-regression test for bug 15817 -->
-//
-// <-- Bugzilla URL -->
-// http://bugzilla.scilab.org/show_bug.cgi?id=15817
-//
-// <-- Short Description -->
-// ascii(c); with c>=128 crashes on OSX
-ascii(255)
- ans  =
- ÿ
diff --git a/scilab/modules/localization/tests/nonreg_tests/bug_15817.tst b/scilab/modules/localization/tests/nonreg_tests/bug_15817.tst
deleted file mode 100644 (file)
index 1fa2032..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-// =============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2018 - Stéphane MOTTELET
-//
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
-// <-- MACOSX ONLY -->
-// <-- CLI SHELL MODE -->
-//
-// <-- Non-regression test for bug 15817 -->
-//
-// <-- Bugzilla URL -->
-// http://bugzilla.scilab.org/show_bug.cgi?id=15817
-//
-// <-- Short Description -->
-// ascii(c); with c>=128 crashes on OSX
-
-ascii(255)
\ No newline at end of file