Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Source for opts plugin
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #ifndef ELEKTRA_GOPTS_SYSCTL_H
11 : #define ELEKTRA_GOPTS_SYSCTL_H
12 :
13 : #include <stdio.h>
14 : #include <stdlib.h>
15 : #include <string.h>
16 : #include <unistd.h>
17 :
18 : #include <kdbhelper.h>
19 :
20 : extern char ** environ;
21 :
22 106 : static int loadArgs (char *** argvp)
23 : {
24 : FILE * cmdline;
25 106 : if (access ("/proc/self/cmdline", F_OK) != -1)
26 : {
27 106 : cmdline = fopen ("/proc/self/cmdline", "rb");
28 : }
29 0 : else if (access ("/proc/curproc/cmdline", F_OK) != -1)
30 : {
31 0 : cmdline = fopen ("/proc/curproc/cmdline", "rb");
32 : }
33 : else
34 : {
35 : return 0;
36 : }
37 :
38 106 : char * arg = NULL;
39 106 : size_t size = 0;
40 106 : int argc = 0;
41 542 : while (getdelim (&arg, &size, 0, cmdline) != -1)
42 : {
43 330 : ++argc;
44 : }
45 106 : free (arg);
46 106 : rewind (cmdline);
47 :
48 106 : char ** argv = elektraMalloc ((argc + 1) * sizeof (char *));
49 :
50 106 : arg = NULL;
51 106 : int index = 0;
52 542 : while (getdelim (&arg, &size, 0, cmdline) != -1)
53 : {
54 330 : argv[index] = elektraStrDup (arg);
55 330 : ++index;
56 : }
57 106 : free (arg);
58 106 : fclose (cmdline);
59 :
60 106 : argv[argc] = NULL;
61 106 : *argvp = argv;
62 :
63 106 : return argc;
64 : }
65 :
66 : static char ** loadEnvp (void)
67 : {
68 106 : return environ;
69 : }
70 :
71 106 : static void cleanupArgs (int argc, char ** argv)
72 : {
73 436 : for (int i = 0; i < argc; ++i)
74 : {
75 330 : elektraFree (argv[i]);
76 : }
77 :
78 106 : elektraFree (argv);
79 106 : }
80 :
81 : static void cleanupEnvp (char ** envp ELEKTRA_UNUSED)
82 : {
83 : }
84 :
85 : #endif // ELEKTRA_GOPTS_SYSCTL_H
|