LCOV - code coverage report
Current view: top level - src/utils/common - SysUtils.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 80.0 % 10 8
Test Date: 2024-11-22 15:46:21 Functions: 66.7 % 3 2

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2005-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    SysUtils.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @date    Tue, 29.05.2005
      18              : ///
      19              : // A few system-specific functions
      20              : /****************************************************************************/
      21              : #include <config.h>
      22              : 
      23              : #include <stdlib.h>
      24              : #include <sys/types.h>
      25              : #include <sys/stat.h>
      26              : #include "StringUtils.h"
      27              : #include "SysUtils.h"
      28              : 
      29              : #ifndef WIN32
      30              : #include <sys/time.h>
      31              : #include <unistd.h>
      32              : #else
      33              : #define NOMINMAX
      34              : #include <windows.h>
      35              : #undef NOMINMAX
      36              : #define stat _stat
      37              : #endif
      38              : 
      39              : // ===========================================================================
      40              : // member method definitions
      41              : // ===========================================================================
      42              : 
      43              : long
      44    284053493 : SysUtils::getCurrentMillis() {
      45              : #ifndef WIN32
      46              :     timeval current;
      47    284053493 :     gettimeofday(&current, 0);
      48    284053493 :     long nanosecs =
      49    284053493 :         (long) current.tv_sec * 1000L + (long) current.tv_usec / 1000L;
      50    284053493 :     return nanosecs;
      51              : #else
      52              :     LARGE_INTEGER val, val2;
      53              :     BOOL check = QueryPerformanceCounter(&val);
      54              :     check = QueryPerformanceFrequency(&val2);
      55              :     return (long)(val.QuadPart * 1000 / val2.QuadPart);
      56              : #endif
      57              : }
      58              : 
      59              : 
      60              : #ifdef WIN32
      61              : long
      62              : SysUtils::getWindowsTicks() {
      63              :     return (long) GetTickCount();
      64              : }
      65              : #endif
      66              : 
      67              : 
      68              : unsigned long
      69            0 : SysUtils::runHiddenCommand(const std::string& cmd) {
      70              : #ifdef WIN32
      71              :     // code inspired by http://www.codeproject.com/Articles/2537/Running-console-applications-silently
      72              :     STARTUPINFO StartupInfo;
      73              :     PROCESS_INFORMATION ProcessInfo;
      74              :     unsigned long rc;
      75              : 
      76              :     memset(&StartupInfo, 0, sizeof(StartupInfo));
      77              :     StartupInfo.cb = sizeof(STARTUPINFO);
      78              :     StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
      79              :     StartupInfo.wShowWindow = SW_HIDE;
      80              : 
      81              :     // "/c" option - Do the command then terminate the command window
      82              :     std::string winCmd = "CMD.exe /c " + StringUtils::transcodeToLocal(cmd);
      83              :     char* args = new char[winCmd.size() + 1];
      84              :     args[0] = 0;
      85              :     strcpy(args, winCmd.c_str());
      86              :     if (!CreateProcess(nullptr, args, nullptr, nullptr, FALSE,
      87              :                        CREATE_NEW_CONSOLE, nullptr, nullptr, &StartupInfo, &ProcessInfo)) {
      88              :         delete[] args;
      89              :         return (unsigned long)GetLastError();
      90              :     }
      91              : 
      92              :     WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
      93              :     if (!GetExitCodeProcess(ProcessInfo.hProcess, &rc)) {
      94              :         rc = 0;
      95              :     }
      96              : 
      97              :     CloseHandle(ProcessInfo.hThread);
      98              :     CloseHandle(ProcessInfo.hProcess);
      99              : 
     100              :     delete[] args;
     101              :     return rc;
     102              : #else
     103            0 :     return (unsigned long)system(cmd.c_str());
     104              : #endif
     105              : }
     106              : 
     107              : 
     108              : long long
     109           35 : SysUtils::getModifiedTime(const std::string& fname) {
     110              :     struct stat result;
     111           35 :     if (stat(fname.c_str(), &result) == 0) {
     112           35 :         return result.st_mtime;
     113              :     }
     114              :     return -1;
     115              : }
     116              : 
     117              : 
     118              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1