LCOV - code coverage report
Current view: top level - src - mkernel.c (source / functions) Hit Total Coverage
Test: mkernel.info Lines: 74 82 90.2 %
Date: 2024-07-29 17:43:08 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /**         @file  mkernel.c
       2             :  *         @brief  Micro-kernel core main source
       3             :  *          @date  10/11/2017
       4             :  *        @author  François Cerbelle (Fanfan), francois@cerbelle.net
       5             :  *     @copyright  Copyright (c) 2017, François Cerbelle
       6             :  *
       7             :  *   @internal
       8             :  *       Compiler  gcc
       9             :  *  Last modified  2024-07-26 13:37
      10             :  *   Organization  Cerbelle.net
      11             :  *        Company  Home
      12             :  *
      13             :  *   This source code is released for free distribution under the terms of the
      14             :  *   GNU General Public License as published by the Free Software Foundation.
      15             :  */
      16             : 
      17             : #ifdef HAVE_CONFIG_H
      18             : #include "config.h"
      19             : #endif
      20             : 
      21             : #include "revision.h"
      22             : #include "gettext.h"
      23             : /** GetText helper */
      24             : #define _(String) gettext (String)
      25             : #include <locale.h>
      26             : 
      27             : /* Exclude inclusion for static code analysis with cppcheck */
      28             : #ifndef NOCPPCHECK
      29             : #include "mkernel-opt.h"
      30             : #endif
      31             : 
      32             : #include "modmgr.h"
      33             : #include "mkmod.h"
      34             : #include "ansi-color-codes.h"
      35             : 
      36             : #include <stdlib.h> /* EXIT_SUCCESS / EXIT_FAILURE */
      37             : #include <libgen.h> /* dirname */
      38             : 
      39             : #ifndef PATH_MAX
      40             : #  define PATH_MAX 255
      41             : #endif
      42             : 
      43             : #include "debug/assert.h"
      44             : #include "debug/memory.h"
      45             : 
      46             : /** @todo Define in configure.ac with default value */
      47             : #ifndef MODULE_PATH_ENV
      48             : /** Default environment variable name to get module patch from */
      49             : #  define MODULE_PATH_ENV        "MODULE_PATH"
      50             : #endif
      51             : 
      52             : #ifndef MODULE_PATH_DEFAULT
      53             : /** Default path to search modules in, if not defined by autotools (should be) */
      54             : #  define MODULE_PATH_DEFAULT        "."
      55             : #endif
      56             : 
      57          17 : int main(int argc, char** argv, char**env)
      58             : {
      59             :     char *appDir;
      60             : 
      61             :     (void)env;
      62             : 
      63             :     /* Get executable relative invocation path from argv0 BEFORE AutoOpts */
      64             :     {
      65          17 :         char* execCmdCopy = strdup(argv[0]);
      66          17 :         appDir = strdup(dirname(execCmdCopy));
      67             :     }
      68             : 
      69             :     /* LibIntl/GetText setup for Internationalization i18n */
      70          17 :     setlocale (LC_ALL, "");
      71          17 :     bindtextdomain (PACKAGE, LOCALEDIR);
      72          17 :     textdomain (PACKAGE);
      73             : 
      74             :     /* Application banner */
      75          17 :     printf(BCYN PACKAGE_NAME " " PACKAGE_VERSION RESET);
      76             : #ifdef REVISION
      77          17 :     printf("." BBLU REVISION RESET);
      78             : #endif
      79             : #ifdef BBID
      80          17 :     printf("." BBID);
      81             : #endif
      82          17 :     printf("\n");
      83             : 
      84             : #pragma GCC diagnostic push                             /* save the actual diag context */
      85             : #pragma GCC diagnostic ignored "-Wdate-time"         /* locally disable warnings because of non reproductible build triggered by pbuild */
      86          17 :     printf(_("Compiled %s at %s\n"),__DATE__, __TIME__);
      87             : #pragma GCC diagnostic pop                              /* restore previous diag context */
      88             :     /* TRANSLATORS: This is a French proper name. "fraa-swa sEr\-bEl" "François Cerbelle" */
      89          17 :     printf("Copyright 2024 François Cerbelle\n");
      90          17 :     printf(_("Report bugs to %s\n\n"), BYEL PACKAGE_BUGREPORT RESET);
      91             : 
      92             :     /* AutoGen option parsing and consumming */
      93             :     {
      94          17 :         int arg_ct = optionProcess( &mkernelOptions, argc, argv );
      95          11 :         argc -= arg_ct;
      96          11 :         argv += arg_ct;
      97             :         /* Avoid assignement without usage warnings from cppcheck */
      98             :         (void)argc;
      99             :     }
     100             : 
     101             :     /* Default (least significant) module search path */
     102          11 :     if (0!=modmgr_addpath(MODULE_PATH_DEFAULT))
     103           0 :         fprintf(stderr,_("The module search path can not add MODULE_PATH_DEFAULT (%s)\n"),MODULE_PATH_DEFAULT);
     104             : 
     105             :     /* Add Application root and plugins subdir to module path */
     106             :     {
     107             :         char *modulePath;
     108          11 :         modulePath = (char*)malloc(strlen(appDir)+strlen("/plugins")+1);
     109          11 :         strcpy(modulePath,appDir);
     110          11 :         strcat(modulePath,"/plugins");
     111          11 :         if (0!=modmgr_addpath(appDir))
     112           0 :             fprintf(stderr,_("The module search path can not add the application folder (%s)\n"),appDir);
     113          11 :         if (0!=modmgr_addpath(modulePath))
     114           0 :             fprintf(stderr,_("The module search path can not add the application plugin folder (%s)\n"),modulePath);
     115          11 :         free(modulePath);
     116             :     }
     117             : 
     118             :     /* Override whole module path if environment defined */
     119          11 :     if ((getenv(MODULE_PATH_ENV)) && (strlen(getenv(MODULE_PATH_ENV))>0))
     120           3 :         if (0!=modmgr_setpath(getenv (MODULE_PATH_ENV)))
     121           0 :             fprintf(stderr,_("The module path can not be reset from MODULE_PATH_ENV (%s)\n"),getenv (MODULE_PATH_ENV));
     122             : 
     123             :     /* Override whole module path if options passed in CLI */
     124          11 :     if (HAVE_OPT(MODULE_PATH))
     125           3 :         if (0!=modmgr_setpath(OPT_ARG(MODULE_PATH)))
     126           0 :             fprintf(stderr,_("The module path can not be reset from CLI parameter (%s)\n"),OPT_ARG(MODULE_PATH));
     127             : 
     128             :     /* Main payload */
     129          11 :     printf (_("Hello from main\n"));
     130             : 
     131             :     /* AutoGen/AutoOpts shifted left argv */
     132             :     /* Try to load the module provided as first invocation argument */
     133             :     {
     134          11 :         modmgr_module_t m1=NULL;
     135          11 :         modmgr_module_t m2=NULL;
     136          11 :         modmgr_module_t m3=NULL;
     137          11 :         mkmod_api_t* api1=NULL;
     138          11 :         mkmod_api_t* api2=NULL;
     139          11 :         mkmod_api_t* api3=NULL;
     140             : 
     141          11 :         DBG_ITRACE(modmgr_list());
     142             : 
     143          11 :         if (argc>=1) {
     144          11 :             DBG_PRINTF("Loading %s",argv[0]);
     145          11 :             MODMGR_LOAD(m1,api1,argv[0]);
     146          11 :             DBG_ITRACE(modmgr_list());
     147          11 :             if (NULL!=m1) {
     148           9 :                 if ((NULL!=api1)&&(NULL!=api1->mkmod_function))
     149           9 :                     api1->mkmod_function();
     150             :                 else
     151           0 :                     fprintf(stderr,_("mkmod_function not found\n"));
     152             :             } else
     153           2 :                 fprintf(stderr,_("Module not loaded\n"));
     154             :         }
     155             : 
     156          11 :         if (argc>=2) {
     157           5 :             DBG_PRINTF("Loading %s",argv[1]);
     158           5 :             MODMGR_LOAD(m2,api2,argv[1]);
     159           5 :             DBG_ITRACE(modmgr_list());
     160           5 :             if (NULL!=m2) {
     161           3 :                 if ((NULL!=api2)&&(NULL!=api2->mkmod_function))
     162           3 :                     api2->mkmod_function();
     163             :                 else
     164           0 :                     fprintf(stderr,_("mkmod_function not found\n"));
     165             :             } else
     166           2 :                 fprintf(stderr,_("Module not loaded\n"));
     167             :         }
     168             : 
     169          11 :         if (argc>=3) {
     170           2 :             DBG_PRINTF("Loading %s",argv[2]);
     171           2 :             MODMGR_LOAD(m3,api3,argv[2]);
     172           2 :             DBG_ITRACE(modmgr_list());
     173           2 :             if (NULL!=m3) {
     174           1 :                 if ((NULL!=api3)&&(NULL!=api3->mkmod_function))
     175           1 :                     api3->mkmod_function();
     176             :                 else
     177           0 :                     fprintf(stderr,_("mkmod_function not found\n"));
     178             :             } else
     179           1 :                 fprintf(stderr,_("Module not loaded\n"));
     180             :         }
     181             : 
     182          11 :         if (NULL!=m1) {
     183           9 :             modmgr_unload(m1);
     184             :         } else
     185           2 :             fprintf(stderr,_("Module not loaded\n"));
     186          11 :         DBG_ITRACE(modmgr_list());
     187             : 
     188          11 :         if (NULL!=m2) {
     189           3 :             modmgr_unload(m2);
     190             :         } else
     191           8 :             fprintf(stderr,_("Module not loaded\n"));
     192          11 :         DBG_ITRACE(modmgr_list());
     193             : 
     194          11 :         if (NULL!=m3) {
     195           1 :             modmgr_unload(m3);
     196             :         } else
     197          10 :             fprintf(stderr,_("Module not loaded\n"));
     198          11 :         DBG_ITRACE(modmgr_list());
     199             :     }
     200             : 
     201          11 :     free(appDir);
     202          11 :     memreport();
     203             : 
     204             : #ifdef _WIN32
     205             :     system("PAUSE");  /* Pour la console Windows. */
     206             : #endif
     207             : 
     208          11 :     return EXIT_SUCCESS;
     209             : }

Generated by: LCOV version 1.16