utf: module string 2
[scilab.git] / scilab / modules / string / src / c / stringsstrrev.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA - Allan CORNET
4  * Copyright (C) DIGITEO - 2009 - Allan CORNET
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13
14 /*----------------------------------------------------------------------------*/
15 #include <string.h>
16 #include <stdio.h>
17 #include "stringsstrrev.h"
18 #include "freeArrayOfString.h"
19 #include "sci_malloc.h"
20 #include "os_string.h"
21 #include "charEncoding.h"
22 /*----------------------------------------------------------------------------*/
23 char** strings_strrev(char **Input_strings, int Dim_Input_strings)
24 {
25     char** Output_strings = NULL;
26     if (Input_strings)
27     {
28         Output_strings = (char**)MALLOC(sizeof(char*) * Dim_Input_strings);
29         if (Output_strings)
30         {
31             int i = 0;
32             for (i = 0; i < Dim_Input_strings; i++)
33             {
34                 wchar_t* w = to_wide_string(Input_strings[i]);
35                 wchar_t* o = scistrrev(w);
36                 if (o == NULL)
37                 {
38                     freeArrayOfString(Output_strings, i);
39                     return NULL;
40                 }
41
42                 Output_strings[i] = wide_string_to_UTF8(o);
43                 FREE(o);
44                 FREE(w);
45             }
46         }
47     }
48     return Output_strings;
49 }
50 /*----------------------------------------------------------------------------*/
51 wchar_t* scistrrev(wchar_t* str)
52 {
53     wchar_t *revstr = NULL;
54     if (str)
55     {
56 #ifdef _MSC_VER
57         revstr = _wcsrev(os_wcsdup(str));
58 #else
59         int iLen = 0;
60         int j = 0;
61
62         iLen = (int)wcslen(str);
63         revstr = (wchar_t*)MALLOC((iLen + 1) * sizeof(wchar_t));
64         /* copy character by character to reverse string */
65         for (j = 0 ; j < iLen ; j++)
66         {
67             revstr[iLen - j - 1] = str[j];
68         }
69         revstr[iLen] = '\0';
70 #endif
71     }
72     return revstr;
73 }
74 /*----------------------------------------------------------------------------*/