Massive indent of all codes:
[scilab.git] / scilab / modules / completion / src / c / getCommonPart.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2008 - DIGITEO - Allan CORNET
4 *
5 * This file must be used under the terms of the CeCILL.
6 * This source file is licensed as described in the file COPYING, which
7 * you should have received as part of this distribution.  The terms
8 * are also available at
9 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 *
11 */
12
13 /*--------------------------------------------------------------------------*/
14 #include <string.h>
15 #include <stdlib.h>
16 #include "getCommonPart.h"
17 #include "core_math.h"
18 #include "MALLOC.h"
19 #ifdef _MSC_VER
20 #include "strdup_windows.h"
21 #endif
22 /*--------------------------------------------------------------------------*/
23 static int cmp( const void *a , const void *b)
24 {
25     return strcmp(*(const char **)a, *(const char **)b );
26 }
27 /*--------------------------------------------------------------------------*/
28 static int cmpPos(char *str1, char *str2)
29 {
30     if (str1 && str2)
31     {
32         int i = 0;
33         char *s1 = NULL;
34         char *s2 = NULL;
35         int lenstr1 = (int) strlen(str1);
36         int lenstr2 = (int) strlen(str2);
37         int slen;
38
39         if (lenstr1 > lenstr2)
40         {
41             s1 = str2;
42             s2 = str1;
43             slen = lenstr1;
44             lenstr1 = lenstr2;
45             lenstr2 = slen;
46         }
47         else
48         {
49             s1 = str1;
50             s2 = str2;
51         }
52         for (i = 0; i < lenstr1; i++)
53         {
54             if ( s1[i] != s2[i] )
55             {
56                 return i;
57             }
58         }
59
60         return Min(lenstr1, lenstr2);
61     }
62     return -1;
63 }
64 /*--------------------------------------------------------------------------*/
65 char *getCommonPart(char **dictionary, int sizeDictionary)
66 {
67     char *commonpart = NULL;
68
69     if (sizeDictionary == 1)
70     {
71         return strdup(dictionary[0]);
72     }
73
74     if (sizeDictionary >= 2)
75     {
76         int i = 0;
77         int r = 0;
78         char *currentstr = dictionary[0];
79         qsort(dictionary, sizeof dictionary / sizeof dictionary[0], sizeof dictionary[0], cmp);
80
81         r = cmpPos(currentstr, dictionary[1]);
82         for (i = 1; i < sizeDictionary - 1; i++)
83         {
84             int current_r = cmpPos(currentstr, dictionary[i + 1]);
85             if (r > current_r)
86             {
87                 r = current_r;
88                 currentstr = dictionary[i + 1];
89             }
90         }
91
92         commonpart = strdup(currentstr);
93         commonpart[r] = '\0';
94     }
95     return commonpart;
96 }
97 /*--------------------------------------------------------------------------*/