wcstod no more convert d and D characters
[scilab.git] / scilab / modules / string / src / c / tokens.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA - Cong WU
4  * Copyright (C) INRIA - 2008 - Allan CORNET
5  * Copyright (C) Digiteo - 2011 - Cedric DELAMARRE
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17
18 /*------------------------------------------------------------------------*/
19 #include <string.h>
20 #include <stdio.h>
21 #include "sci_malloc.h"
22 #include "tokens.h"
23 #include "os_string.h"
24 #include "os_wcstok.h"
25
26
27 /*------------------------------------------------------------------------*/
28 wchar_t** stringTokens(wchar_t* str, wchar_t* delim, int* sizeOutputs)
29 {
30     wchar_t **Outputs = NULL;
31     *sizeOutputs = 0;
32     if (str)
33     {
34         if (delim)
35         {
36             int i = 0;
37             wchar_t *pwstToken = NULL;
38             wchar_t *pwstWork = os_wcsdup(str);
39             wchar_t *pwstState = NULL;
40
41             //compute size of outputs array
42             for (pwstToken = os_wcstok(pwstWork, delim, &pwstState);
43                     pwstToken != NULL;
44                     pwstToken = os_wcstok(NULL, delim, &pwstState), (*sizeOutputs)++)
45             {
46                 ;
47             }
48
49             if (*sizeOutputs == 0)
50             {
51                 FREE(pwstWork);
52                 return NULL;
53             }
54
55             //alloc output array
56             Outputs = (wchar_t**)MALLOC(sizeof(wchar_t*) * *sizeOutputs);
57
58             FREE(pwstWork);
59             pwstWork = os_wcsdup(str);
60             for (pwstToken = os_wcstok(pwstWork, delim, &pwstState);
61                     pwstToken != NULL;
62                     pwstToken = os_wcstok(NULL, delim, &pwstState), i++)
63             {
64                 Outputs[i] = os_wcsdup(pwstToken);
65             }
66
67             FREE(pwstWork);
68         }
69     }
70     return Outputs;
71 }
72 /*--------------------------------------------------------------------------*/