041eb1291570cb3fbb436e6d75db202164cddd0b
[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  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
12  *
13  */
14
15 /*------------------------------------------------------------------------*/
16 #include <string.h>
17 #include <stdio.h>
18 #include "sci_malloc.h"
19 #include "tokens.h"
20 #include "os_string.h"
21 #include "os_wcstok.h"
22
23
24 /*------------------------------------------------------------------------*/
25 char** stringTokens(const char* str, const char* delim, int* sizeoutputs)
26 {
27     char **outputs = NULL;
28     *sizeoutputs = 0;
29     if (str)
30     {
31         if (delim)
32         {
33             int i = 0;
34             char *pstToken = NULL;
35             char *pstWork = os_strdup(str);
36             char *pstState = NULL;
37
38             //compute size of outputs array
39             for (pstToken = os_strtok(pstWork, delim, &pstState);
40                     pstToken != NULL;
41                     pstToken = os_strtok(NULL, delim, &pstState), (*sizeoutputs)++)
42             {
43                 ;
44             }
45
46             if (*sizeoutputs == 0)
47             {
48                 FREE(pstWork);
49                 return NULL;
50             }
51
52             //alloc output array
53             outputs = (char**)MALLOC(sizeof(char*) * *sizeoutputs);
54
55             FREE(pstWork);
56             pstWork = os_strdup(str);
57             for (pstToken = os_strtok(pstWork, delim, &pstState);
58                     pstToken != NULL;
59                     pstToken = os_strtok(NULL, delim, &pstState), i++)
60             {
61                 outputs[i] = os_strdup(pstToken);
62             }
63
64             FREE(pstWork);
65         }
66     }
67     return outputs;
68 }
69 /*--------------------------------------------------------------------------*/