LCOV - code coverage report
Current view: top level - src/plugins/xmltool - xmltool.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 17 26 65.4 %
Date: 2022-05-21 16:19:22 Functions: 3 4 75.0 %

          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         107 : int elektraXmltoolGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey)
      21             : {
      22         107 :         if (!strcmp (keyName (parentKey), "system:/elektra/modules/xmltool"))
      23             :         {
      24          82 :                 KeySet * moduleConfig =
      25          82 :                         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          82 :                 ksAppend (returned, moduleConfig);
      34          82 :                 ksDel (moduleConfig);
      35          82 :                 return 1;
      36             :         }
      37             : 
      38             :         /* get all keys */
      39          25 :         int errnosave = errno;
      40          25 :         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          21 : int elektraXmltoolSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey)
      50             : {
      51             :         /* set all keys */
      52             : 
      53          21 :         int errnosave = errno;
      54          21 :         FILE * fout = fopen (keyString (parentKey), "w");
      55             : 
      56          21 :         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          21 :         ksToStream (returned, fout, KDB_O_HEADER);
      65             : 
      66          21 :         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         138 : Plugin * ELEKTRA_PLUGIN_EXPORT
      77             : {
      78             :         // clang-format off
      79         138 :         return elektraPluginExport("xmltool",
      80             :                 ELEKTRA_PLUGIN_GET,     &elektraXmltoolGet,
      81             :                 ELEKTRA_PLUGIN_SET,     &elektraXmltoolSet,
      82             :                 ELEKTRA_PLUGIN_END);
      83             : }
      84             : 

Generated by: LCOV version 1.13