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 :
|