LCOV - code coverage report
Current view: top level - src/plugins/gopts - gopts_procfs.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 27 29 93.1 %
Date: 2019-09-12 12:28:41 Functions: 2 3 66.7 %

          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

Generated by: LCOV version 1.13