LCOV - code coverage report
Current view: top level - src/plugins/uname - uname.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 38 43 88.4 %
Date: 2019-09-12 12:28:41 Functions: 3 5 60.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 "uname.h"
      10             : 
      11             : #include <errno.h>
      12             : #include <kdblogger.h>
      13             : #include <string.h>
      14             : #include <sys/utsname.h>
      15             : 
      16             : #ifndef HAVE_KDBCONFIG
      17             : #include "kdbconfig.h"
      18             : #endif
      19             : 
      20             : #include <kdberrors.h>
      21             : #include <kdbmacros.h>
      22             : 
      23          14 : static void elektraAddUname (KeySet * returned, Key * parentKey)
      24             : {
      25             :         Key * dir;
      26          14 :         Key * key = keyDup (parentKey);
      27          14 :         ksAppendKey (returned, key);
      28             : 
      29             :         struct utsname buf;
      30             : 
      31          14 :         uname (&buf); // TODO: handle error
      32             : 
      33          14 :         dir = keyDup (parentKey);
      34          14 :         keyAddBaseName (dir, "sysname");
      35          14 :         keySetString (dir, buf.sysname);
      36          14 :         ksAppendKey (returned, dir);
      37             : 
      38          14 :         dir = keyDup (parentKey);
      39          14 :         keyAddBaseName (dir, "nodename");
      40          14 :         keySetString (dir, buf.nodename);
      41          14 :         ksAppendKey (returned, dir);
      42             : 
      43          14 :         dir = keyDup (parentKey);
      44          14 :         keyAddBaseName (dir, "release");
      45          14 :         keySetString (dir, buf.release);
      46          14 :         ksAppendKey (returned, dir);
      47             : 
      48          14 :         dir = keyDup (parentKey);
      49          14 :         keyAddBaseName (dir, "version");
      50          14 :         keySetString (dir, buf.version);
      51          14 :         ksAppendKey (returned, dir);
      52             : 
      53          14 :         dir = keyDup (parentKey);
      54          14 :         keyAddBaseName (dir, "machine");
      55          14 :         keySetString (dir, buf.machine);
      56          14 :         ksAppendKey (returned, dir);
      57          14 : }
      58             : 
      59          56 : int elektraUnameGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey)
      60             : {
      61          56 :         int errnosave = errno;
      62             :         ELEKTRA_LOG ("get uname %s from %s\n", keyName (parentKey), keyString (parentKey));
      63             : 
      64          56 :         if (!strcmp (keyName (parentKey), "system/elektra/modules/uname"))
      65             :         {
      66          42 :                 KeySet * moduleConfig =
      67          42 :                         ksNew (50, keyNew ("system/elektra/modules/uname", KEY_VALUE, "uname plugin waits for your orders", KEY_END),
      68             :                                keyNew ("system/elektra/modules/uname/exports", KEY_END),
      69             :                                keyNew ("system/elektra/modules/uname/exports/get", KEY_FUNC, elektraUnameGet, KEY_END),
      70             :                                keyNew ("system/elektra/modules/uname/exports/set", KEY_FUNC, elektraUnameSet, KEY_END),
      71             : #include "readme_uname.c"
      72             :                                keyNew ("system/elektra/modules/uname/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END);
      73          42 :                 ksAppend (returned, moduleConfig);
      74          42 :                 ksDel (moduleConfig);
      75          42 :                 return 1;
      76             :         }
      77             : 
      78          14 :         elektraAddUname (returned, parentKey);
      79             : 
      80          14 :         errno = errnosave;
      81          14 :         return 1;
      82             : }
      83             : 
      84           0 : int elektraUnameSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned ELEKTRA_UNUSED, Key * parentKey)
      85             : {
      86             :         ELEKTRA_LOG ("set uname %s from %s\n", keyName (parentKey), keyString (parentKey));
      87             : 
      88           0 :         KeySet * info = ksNew (0, KS_END);
      89           0 :         elektraAddUname (info, parentKey);
      90           0 :         ELEKTRA_SET_ERROR_READ_ONLY (info, returned, parentKey);
      91           0 :         return 0;
      92             : }
      93             : 
      94         456 : Plugin * ELEKTRA_PLUGIN_EXPORT
      95             : {
      96             :         // clang-format off
      97         456 :         return elektraPluginExport("uname",
      98             :                 ELEKTRA_PLUGIN_GET,            &elektraUnameGet,
      99             :                 ELEKTRA_PLUGIN_SET,            &elektraUnameSet,
     100             :                 ELEKTRA_PLUGIN_END);
     101             : }
     102             : 
     103             : 

Generated by: LCOV version 1.13