LCOV - code coverage report
Current view: top level - test - checktools.inc (source / functions) Hit Total Coverage
Test: mkernel.info Lines: 17 18 94.4 %
Date: 2024-11-11 21:44:55 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /**
       2             :  *    @file  checktools.inc
       3             :  *   @brief 
       4             :  *
       5             :  *  @author  François Cerbelle (Fanfan), francois@cerbelle.net
       6             :  *
       7             :  *  @internal
       8             :  *       Created:  19/07/2024
       9             :  *      Revision:  none
      10             :  * Last modified:  2024-11-09 00:30
      11             :  *      Compiler:  gcc
      12             :  *  Organization:  Cerbelle.net
      13             :  *     Copyright:  Copyright (c) 2024, François Cerbelle
      14             :  *
      15             :  *  This source code is released for free distribution under the terms of the
      16             :  *  GNU General Public License as published by the Free Software Foundation.
      17             :  */
      18             : 
      19             : 
      20             : #ifdef HAVE_CONFIG_H
      21             : #include "config.h"
      22             : #endif
      23             : 
      24             : #include <unistd.h>                             /* pid_t getpid() */
      25             : #include <sys/stat.h>                           /* mkdir(), chdir(), mode_t */
      26             : 
      27             : #if GPROF
      28             : #include <stdio.h>
      29             : #include <stdlib.h>
      30             : #endif
      31             : 
      32             : #ifdef GCOV
      33             : #include <signal.h>                             /* signal(), SIGABRT, SIG_DFL */
      34             : #include <stdio.h>
      35             : #include <stdlib.h>
      36             : void __gcov_dump();
      37          12 : static void signals_handler(int sig)
      38             : {
      39             :     (void)sig;
      40          12 :     signal(SIGABRT,SIG_DFL);
      41          12 :     signal(SIGSEGV,SIG_DFL);
      42          12 :     __gcov_dump();
      43           0 : }
      44             : #endif /* GCOV */
      45             : 
      46          32 : static void signals_catch() {
      47             : #ifdef GCOV
      48          32 :     signal(SIGABRT,signals_handler);
      49          32 :     signal(SIGSEGV,signals_handler);
      50             : #endif
      51          32 : }
      52             : 
      53          20 : static void signals_release() {
      54             : #ifdef GCOV
      55          20 :     signal(SIGABRT,SIG_DFL);
      56          20 :     signal(SIGSEGV,SIG_DFL);
      57             : #endif
      58          20 : }
      59             : 
      60             : static pid_t _forktest_pid;
      61             : 
      62          46 : static void forktest_init() {
      63          46 :     _forktest_pid = getpid();
      64          46 : }
      65             : 
      66             : #define forktest_only if (_forktest_pid==getpid()) return
      67             : 
      68          32 : static void forktest_gprofdir() {
      69             : #ifdef GPROF
      70             :     if (_forktest_pid!=getpid()) {
      71             :         /* Forked : mkdir/chdir to a subdir for gmon.out */
      72             :         char dirname[20];
      73             :         int result = snprintf(dirname, 20, "%d", getpid());
      74             :         if ((0<result)&&(20>result)) {
      75             :             mkdir("gprof", S_IRWXU);
      76             :             chdir("gprof");
      77             :             mkdir(dirname, S_IRWXU);
      78             :             chdir(dirname);
      79             :         } else {
      80             :             fprintf(stderr,"Unable to create GPROF/gmon.out subdir\n");
      81             :             abort();
      82             :         }
      83             :     }
      84             : #endif /* GPROF */
      85          32 : }
      86             : 
      87             : /* vim:se filetype=c : */

Generated by: LCOV version 1.16