Coverity #1247398, #1199692, #1321278, #1321279, #1321280, #1321281, #1097625 fixed...
[scilab.git] / scilab / modules / gui / src / cpp / SetUicontrolIcon.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "FindIconHelper.hxx"
17
18 extern "C" {
19 #include "SetUicontrol.h"
20 #include "expandPathVariable.h"
21 #include "getScilabJavaVM.h"
22 #include "scicurdir.h"
23 #include "sci_malloc.h"
24 #include "fullpath.h"
25 }
26 /*------------------------------------------------------------------------*/
27 int SetUicontrolIcon(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int nbRow, int nbCol)
28 {
29     char* expandedpath = NULL;
30     char absolutepath[4096];
31
32     if (valueType != sci_strings)
33     {
34         Scierror(999, _("Wrong type for '%s' property: String expected.\n"), "icon");
35         return SET_PROPERTY_ERROR;
36     }
37
38     //get file path
39     expandedpath = expandPathVariable((char*)_pvData);
40
41     if (((char*)_pvData)[0] != '\0')
42     {
43         char* iconPath = org_scilab_modules_commons_gui::FindIconHelper::findIcon(getScilabJavaVM(), (char*)_pvData, 0);
44         if (iconPath == NULL)
45         {
46             get_full_path(absolutepath, expandedpath, 4096);
47
48             //it is a absolute path, put it only in model
49             if (strcmp(expandedpath, absolutepath))
50             {
51                 int iErr = 0;
52                 char* pwd = scigetcwd(&iErr);
53
54                 //add it to FindIconHelper java class
55                 org_scilab_modules_commons_gui::FindIconHelper::addThemePath(getScilabJavaVM(), pwd);
56             }
57         }
58         else
59         {
60             delete[] iconPath;
61         }
62     }
63
64     strcpy(absolutepath, expandedpath);
65     FREE(expandedpath);
66
67     if (setGraphicObjectProperty(iObjUID, __GO_UI_ICON__, absolutepath, jni_string, 1) == FALSE)
68     {
69         Scierror(999, _("'%s' property does not exist for this handle.\n"), "icon");
70         return SET_PROPERTY_ERROR;
71     }
72
73     return SET_PROPERTY_SUCCEED;
74 }
75 /*------------------------------------------------------------------------*/