LCOV - code coverage report
Current view: top level - test - checktools.inc (source / functions) Hit Total Coverage
Test: liboom.info Lines: 17 18 94.4 %
Date: 2024-12-21 20:00:23 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-12-11 14:31
      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             : #define _XOPEN_SOURCE 500                       /* pid_t */
      25             : #include <stdio.h>                              /* snprintf */
      26             : #include <unistd.h>                             /* pid_t getpid() */
      27             : #include <sys/stat.h>                           /* mkdir(), chdir(), mode_t */
      28             : 
      29             : #ifdef ENABLE_GPROF
      30             : #include <stdlib.h>                             /* abort */
      31             : #endif
      32             : 
      33             : #ifdef ENABLE_GCOV
      34             : #include <signal.h>                             /* signal(), SIGABRT, SIG_DFL */
      35             : void __gcov_dump();
      36          61 : static void signals_handler(int sig)
      37             : {
      38             :     (void)sig;
      39          61 :     signal(SIGABRT,SIG_DFL);
      40          61 :     signal(SIGSEGV,SIG_DFL);
      41          61 :     __gcov_dump();
      42           0 : }
      43             : #endif /* ENABLE_GCOV */
      44             : 
      45         544 : static void signals_catch() {
      46             : #ifdef ENABLE_GCOV
      47         544 :     signal(SIGABRT,signals_handler);
      48         544 :     signal(SIGSEGV,signals_handler);
      49             : #endif
      50         544 : }
      51             : 
      52         423 : static void signals_release() {
      53             : #ifdef ENABLE_GCOV
      54         423 :     signal(SIGABRT,SIG_DFL);
      55         423 :     signal(SIGSEGV,SIG_DFL);
      56             : #endif
      57         423 : }
      58             : 
      59             : static pid_t _forktest_pid;
      60             : 
      61         745 : static void forktest_init() {
      62         745 :     _forktest_pid = getpid();
      63         745 : }
      64             : 
      65             : #define forktest_only if (_forktest_pid==getpid()) return
      66             : 
      67         544 : static void forktest_gprofdir() {
      68             : #ifdef ENABLE_GPROF
      69             :     if (_forktest_pid!=getpid()) {
      70             :         /* Forked : mkdir/chdir to a subdir for gmon.out */
      71             :         char dirname[20];
      72             :         int result = snprintf(dirname, 20, "%d", getpid());
      73             :         if ((0<result)&&(20>result)) {
      74             :             mkdir("gprof", S_IRWXU);
      75             :             chdir("gprof");
      76             :             mkdir(dirname, S_IRWXU);
      77             :             chdir(dirname);
      78             :         } else {
      79             :             fprintf(stderr,"Unable to create GPROF/gmon.out subdir\n");
      80             :             abort();
      81             :         }
      82             :     }
      83             : #endif /* ENABLE_GPROF */
      84         544 : }
      85             : 
      86             : /* vim:se filetype=c tw=80: */

Generated by: LCOV version 1.16