Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : */
8 :
9 : #include "xmltool.h"
10 : #include "kdbtools.h"
11 :
12 : #include <errno.h>
13 :
14 : #include "kdbconfig.h"
15 : #include "kdberrors.h"
16 :
17 : #include <stdio.h>
18 : #include <string.h>
19 :
20 22 : int elektraXmltoolGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey)
21 : {
22 22 : if (!strcmp (keyName (parentKey), "system/elektra/modules/xmltool"))
23 : {
24 21 : KeySet * moduleConfig =
25 21 : ksNew (30, keyNew ("system/elektra/modules/xmltool", KEY_VALUE, "xmltool plugin waits for your orders", KEY_END),
26 : keyNew ("system/elektra/modules/xmltool/exports", KEY_END),
27 : keyNew ("system/elektra/modules/xmltool/exports/get", KEY_FUNC, elektraXmltoolGet, KEY_END),
28 : keyNew ("system/elektra/modules/xmltool/exports/set", KEY_FUNC, elektraXmltoolSet, KEY_END),
29 : keyNew ("system/elektra/modules/xmltool/exports/ksFromXML", KEY_FUNC, ksFromXMLfile, KEY_END),
30 : keyNew ("system/elektra/modules/xmltool/exports/ksToStream", KEY_FUNC, ksToStream, KEY_END),
31 : #include "readme_xmltool.c"
32 : keyNew ("system/elektra/modules/xmltool/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END);
33 21 : ksAppend (returned, moduleConfig);
34 21 : ksDel (moduleConfig);
35 21 : return 1;
36 : }
37 :
38 : /* get all keys */
39 1 : int errnosave = errno;
40 1 : if (ksFromXMLfile (returned, keyString (parentKey)) == -1)
41 : {
42 0 : ELEKTRA_SET_ERROR_GET (parentKey);
43 0 : errno = errnosave;
44 0 : return -1;
45 : }
46 : return 1;
47 : }
48 :
49 0 : int elektraXmltoolSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey)
50 : {
51 : /* set all keys */
52 :
53 0 : int errnosave = errno;
54 0 : FILE * fout = fopen (keyString (parentKey), "w");
55 :
56 0 : if (fout == 0)
57 : {
58 0 : ELEKTRA_SET_ERROR_SET (parentKey);
59 0 : errno = errnosave;
60 0 : return -1;
61 : }
62 :
63 : // TODO: proper error handling + use correct errors
64 0 : ksToStream (returned, fout, KDB_O_HEADER);
65 :
66 0 : if (fclose (fout))
67 : {
68 0 : ELEKTRA_SET_ERROR_SET (parentKey);
69 0 : errno = errnosave;
70 0 : return -1;
71 : }
72 :
73 : return 1; /* success */
74 : }
75 :
76 21 : Plugin * ELEKTRA_PLUGIN_EXPORT
77 : {
78 : // clang-format off
79 21 : return elektraPluginExport("xmltool",
80 : ELEKTRA_PLUGIN_GET, &elektraXmltoolGet,
81 : ELEKTRA_PLUGIN_SET, &elektraXmltoolSet,
82 : ELEKTRA_PLUGIN_END);
83 : }
84 :
|