LCOV - code coverage report
Current view: top level - util/env - fd_env.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 42 42 100.0 %
Date: 2026-02-20 06:01:24 Functions: 13 13 100.0 %

          Line data    Source code
       1             : #ifndef FD_ENV_STYLE
       2             : #if FD_HAS_HOSTED /* Use POSIX */
       3             : #define FD_ENV_STYLE 0
       4             : #else
       5             : #error "Define FD_ENV_STYLE for this build target"
       6             : #endif
       7             : #endif
       8             : 
       9             : #include "fd_env.h"
      10             : 
      11             : #include <stdlib.h>
      12             : 
      13             : int
      14          21 : fd_env_strip_cmdline_contains( int * pargc, char *** pargv, char const * key ) {
      15          21 :   int new_argc = 0;
      16          21 :   int found = 0;
      17          21 :   if( key && pargc && pargv ) {
      18         114 :     for( int arg=0; arg<(*pargc); arg++ )
      19          93 :       if( strcmp( key, (*pargv)[arg] ) ) (*pargv)[new_argc++] = (*pargv)[arg];
      20           9 :       else found = 1;
      21          21 :     (*pargc)           = new_argc;
      22          21 :     (*pargv)[new_argc] = NULL; /* ANSI - argv is NULL terminated */
      23          21 :   }
      24          21 :   return found;
      25          21 : }
      26             : 
      27             : #if FD_ENV_STYLE==0
      28             : 
      29             : #define FD_ENV_STRIP_CMDLINE_IMPL( T, what )                                   \
      30             : T                                                                              \
      31             : fd_env_strip_cmdline_##what( int        *   pargc,                             \
      32             :                              char       *** pargv,                             \
      33             :                              char const *   key,                               \
      34             :                              char const *   env_key,                           \
      35       65191 :                              T              val ) {                            \
      36       65191 :   int new_argc = 0;                                                            \
      37       65191 :   int arg;                                                                     \
      38       65191 :                                                                                \
      39       65191 :   if( env_key ) {                                                              \
      40       63422 :     char const * cstr = getenv( env_key );                                     \
      41       63422 :     if( cstr ) val = fd_cstr_to_##what( cstr );                                \
      42       63422 :   }                                                                            \
      43       65191 :                                                                                \
      44       65191 :   if( key && pargc && pargv ) {                                                \
      45      588709 :     for( arg=0; arg<(*pargc); arg++ )                                          \
      46      528622 :       if( strcmp( key, (*pargv)[arg] ) ) (*pargv)[new_argc++] = (*pargv)[arg]; \
      47      528622 :       else if( (++arg)<(*pargc) ) val = fd_cstr_to_##what( (*pargv)[arg] );    \
      48       60087 :     (*pargc)           = new_argc;                                             \
      49       60087 :     (*pargv)[new_argc] = NULL; /* ANSI - argv is NULL terminated */            \
      50       60087 :   }                                                                            \
      51       65191 :                                                                                \
      52       65191 :   return val;                                                                  \
      53       65191 : }
      54             : 
      55       31152 : FD_ENV_STRIP_CMDLINE_IMPL( char const *, cstr   )
      56          15 : FD_ENV_STRIP_CMDLINE_IMPL( char,         char   )
      57          15 : FD_ENV_STRIP_CMDLINE_IMPL( schar,        schar  )
      58          15 : FD_ENV_STRIP_CMDLINE_IMPL( short,        short  )
      59       15327 : FD_ENV_STRIP_CMDLINE_IMPL( int,          int    )
      60          33 : FD_ENV_STRIP_CMDLINE_IMPL( long,         long   )
      61          15 : FD_ENV_STRIP_CMDLINE_IMPL( uchar,        uchar  )
      62          18 : FD_ENV_STRIP_CMDLINE_IMPL( ushort,       ushort )
      63         144 : FD_ENV_STRIP_CMDLINE_IMPL( uint,         uint   )
      64       18388 : FD_ENV_STRIP_CMDLINE_IMPL( ulong,        ulong  )
      65          45 : FD_ENV_STRIP_CMDLINE_IMPL( float,        float  )
      66             : #if FD_HAS_DOUBLE
      67             : FD_ENV_STRIP_CMDLINE_IMPL( double,       double )
      68             : #endif
      69             : 
      70             : #undef FD_ENV_STRIP_CMDLINE_IMPL
      71             : 
      72             : #elif FD_LOG_STYLE==1 /* generic embedded target */
      73             : 
      74             : #define FD_ENV_STRIP_CMDLINE_IMPL( T, what )                                   \
      75             : T                                                                              \
      76             : fd_env_strip_cmdline_##what( int        *   pargc,                             \
      77             :                              char       *** pargv,                             \
      78             :                              char const *   key,                               \
      79             :                              char const *   env_key,                           \
      80             :                              T              val ) {                            \
      81             :   (void)env_key;                                                               \
      82             :   int new_argc = 0;                                                            \
      83             :   int arg;                                                                     \
      84             :                                                                                \
      85             :   if( key && pargc && pargv ) {                                                \
      86             :     for( arg=0; arg<(*pargc); arg++ )                                          \
      87             :       if( strcmp( key, (*pargv)[arg] ) ) (*pargv)[new_argc++] = (*pargv)[arg]; \
      88             :       else if( (++arg)<(*pargc) ) val = fd_cstr_to_##what( (*pargv)[arg] );    \
      89             :     (*pargc)           = new_argc;                                             \
      90             :     (*pargv)[new_argc] = NULL; /* ANSI - argv is NULL terminated */            \
      91             :   }                                                                            \
      92             :                                                                                \
      93             :   return val;                                                                  \
      94             : }
      95             : 
      96             : FD_ENV_STRIP_CMDLINE_IMPL( char const *, cstr   )
      97             : FD_ENV_STRIP_CMDLINE_IMPL( char,         char   )
      98             : FD_ENV_STRIP_CMDLINE_IMPL( schar,        schar  )
      99             : FD_ENV_STRIP_CMDLINE_IMPL( short,        short  )
     100             : FD_ENV_STRIP_CMDLINE_IMPL( int,          int    )
     101             : FD_ENV_STRIP_CMDLINE_IMPL( long,         long   )
     102             : FD_ENV_STRIP_CMDLINE_IMPL( uchar,        uchar  )
     103             : FD_ENV_STRIP_CMDLINE_IMPL( ushort,       ushort )
     104             : FD_ENV_STRIP_CMDLINE_IMPL( uint,         uint   )
     105             : FD_ENV_STRIP_CMDLINE_IMPL( ulong,        ulong  )
     106             : FD_ENV_STRIP_CMDLINE_IMPL( float,        float  )
     107             : #if FD_HAS_DOUBLE
     108             : FD_ENV_STRIP_CMDLINE_IMPL( double,       double )
     109             : #endif
     110             : 
     111             : #else
     112             : #error "Unknown FD_ENV_STYLE"
     113             : #endif
     114             : 

Generated by: LCOV version 1.14