LCOV - code coverage report
Current view: top level - src/common - system.cpp (source / functions) Hit Total Coverage
Test: fuzz_coverage.info Lines: 3 27 11.1 %
Date: 2024-01-03 14:57:27 Functions: 1 7 14.3 %
Branches: 0 24 0.0 %

           Branch data     Line data    Source code
       1                 :            : // Copyright (c) 2009-2010 Satoshi Nakamoto
       2                 :            : // Copyright (c) 2009-present The Bitcoin Core developers
       3                 :            : // Distributed under the MIT software license, see the accompanying
       4                 :            : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       5                 :            : 
       6                 :            : #include <common/system.h>
       7                 :            : 
       8                 :            : #include <logging.h>
       9                 :            : #include <util/string.h>
      10                 :            : #include <util/time.h>
      11                 :            : 
      12                 :            : #ifndef WIN32
      13                 :            : #include <sys/stat.h>
      14                 :            : #else
      15                 :            : #include <compat/compat.h>
      16                 :            : #include <codecvt>
      17                 :            : #endif
      18                 :            : 
      19                 :            : #ifdef HAVE_MALLOPT_ARENA_MAX
      20                 :            : #include <malloc.h>
      21                 :            : #endif
      22                 :            : 
      23                 :            : #include <cstdlib>
      24                 :            : #include <locale>
      25                 :            : #include <stdexcept>
      26                 :            : #include <string>
      27                 :            : #include <thread>
      28                 :            : 
      29                 :            : // Application startup time (used for uptime calculation)
      30                 :          2 : const int64_t nStartupTime = GetTime();
      31                 :            : 
      32                 :            : #ifndef WIN32
      33                 :          0 : std::string ShellEscape(const std::string& arg)
      34                 :            : {
      35                 :          0 :     std::string escaped = arg;
      36 [ #  # ][ #  # ]:          0 :     ReplaceAll(escaped, "'", "'\"'\"'");
                 [ #  # ]
      37 [ #  # ][ #  # ]:          0 :     return "'" + escaped + "'";
      38                 :          0 : }
      39                 :            : #endif
      40                 :            : 
      41                 :            : #if HAVE_SYSTEM
      42                 :          0 : void runCommand(const std::string& strCommand)
      43                 :            : {
      44         [ #  # ]:          0 :     if (strCommand.empty()) return;
      45                 :            : #ifndef WIN32
      46                 :          0 :     int nErr = ::system(strCommand.c_str());
      47                 :            : #else
      48                 :            :     int nErr = ::_wsystem(std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t>().from_bytes(strCommand).c_str());
      49                 :            : #endif
      50         [ #  # ]:          0 :     if (nErr)
      51 [ #  # ][ #  # ]:          0 :         LogPrintf("runCommand error: system(%s) returned %d\n", strCommand, nErr);
                 [ #  # ]
      52                 :          0 : }
      53                 :            : #endif
      54                 :            : 
      55                 :          0 : void SetupEnvironment()
      56                 :            : {
      57                 :            : #ifdef HAVE_MALLOPT_ARENA_MAX
      58                 :            :     // glibc-specific: On 32-bit systems set the number of arenas to 1.
      59                 :            :     // By default, since glibc 2.10, the C library will create up to two heap
      60                 :            :     // arenas per core. This is known to cause excessive virtual address space
      61                 :            :     // usage in our usage. Work around it by setting the maximum number of
      62                 :            :     // arenas to 1.
      63                 :            :     if (sizeof(void*) == 4) {
      64                 :            :         mallopt(M_ARENA_MAX, 1);
      65                 :            :     }
      66                 :            : #endif
      67                 :            :     // On most POSIX systems (e.g. Linux, but not BSD) the environment's locale
      68                 :            :     // may be invalid, in which case the "C.UTF-8" locale is used as fallback.
      69                 :            : #if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
      70                 :            :     try {
      71         [ #  # ]:          0 :         std::locale(""); // Raises a runtime error if current locale is invalid
      72         [ #  # ]:          0 :     } catch (const std::runtime_error&) {
      73                 :          0 :         setenv("LC_ALL", "C.UTF-8", 1);
      74                 :          0 :     }
      75                 :            : #elif defined(WIN32)
      76                 :            :     // Set the default input/output charset is utf-8
      77                 :            :     SetConsoleCP(CP_UTF8);
      78                 :            :     SetConsoleOutputCP(CP_UTF8);
      79                 :            : #endif
      80                 :            : 
      81                 :            : #ifndef WIN32
      82                 :          0 :     constexpr mode_t private_umask = 0077;
      83                 :          0 :     umask(private_umask);
      84                 :            : #endif
      85                 :          0 : }
      86                 :            : 
      87                 :          2 : bool SetupNetworking()
      88                 :            : {
      89                 :            : #ifdef WIN32
      90                 :            :     // Initialize Windows Sockets
      91                 :            :     WSADATA wsadata;
      92                 :            :     int ret = WSAStartup(MAKEWORD(2,2), &wsadata);
      93                 :            :     if (ret != NO_ERROR || LOBYTE(wsadata.wVersion ) != 2 || HIBYTE(wsadata.wVersion) != 2)
      94                 :            :         return false;
      95                 :            : #endif
      96                 :          2 :     return true;
      97                 :            : }
      98                 :            : 
      99                 :          0 : int GetNumCores()
     100                 :            : {
     101                 :          0 :     return std::thread::hardware_concurrency();
     102                 :            : }
     103                 :            : 
     104                 :            : // Obtain the application startup time (used for uptime calculation)
     105                 :          0 : int64_t GetStartupTime()
     106                 :            : {
     107                 :          0 :     return nStartupTime;
     108                 :            : }

Generated by: LCOV version 1.14