add some Scierror after printError to create an error in Scilab
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlAddNs.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
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 #include "XMLObject.hxx"
14 #include "XMLElement.hxx"
15 #include "XMLNs.hxx"
16
17 extern "C"
18 {
19 #include "gw_xml.h"
20 #include "stack-c.h"
21 #include "Scierror.h"
22 #include "api_scilab.h"
23 #include "xml_mlist.h"
24 #include "localization.h"
25 }
26
27 using namespace org_modules_xml;
28
29 /*--------------------------------------------------------------------------*/
30 int sci_xmlAddNs(char * fname, unsigned long fname_len)
31 {
32     XMLElement * elem = 0;
33     XMLNs * ns = 0;
34     SciErr err;
35     int * addr = 0;
36     int i = 2;
37
38     CheckLhs(1, 1);
39     if (Rhs < 2)
40     {
41         Scierror(999, gettext("%s: Wrong number of input arguments: at least %d expected.\n"), fname, 2);
42         return 0;
43     }
44
45     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
46     if (err.iErr)
47     {
48         printError(&err, 0);
49         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
50         return 0;
51     }
52
53     if (!isXMLElem(addr, pvApiCtx))
54     {
55         Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLElem");
56         return 0;
57     }
58
59     elem = XMLObject::getFromId<XMLElement>(getXMLObjectId(addr, pvApiCtx));
60     if (!elem)
61     {
62         Scierror(999, gettext("%s: XML Element does not exist.\n"), fname);
63         return 0;
64     }
65
66     for (; i <= Rhs; i++)
67     {
68         err = getVarAddressFromPosition(pvApiCtx, i, &addr);
69         if (err.iErr)
70         {
71             printError(&err, 0);
72             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i);
73             return 0;
74         }
75
76         if (!isXMLNs(addr, pvApiCtx))
77         {
78             Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, i, "XMLNs");
79             return 0;
80         }
81
82         ns = XMLObject::getFromId<XMLNs>(getXMLObjectId(addr, pvApiCtx));
83         if (!ns)
84         {
85             Scierror(999, gettext("%s: XML Namespace does not exist.\n"), fname);
86             return 0;
87         }
88
89         elem->addNamespace(*ns);
90     }
91
92     LhsVar(1) = 0;
93     PutLhsVar();
94
95     return 0;
96 }