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

          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   253961973 : SysUtils::getCurrentMillis() {
      45             : #ifndef WIN32
      46             :     timeval current;
      47   253961973 :     gettimeofday(&current, 0);
      48   253961973 :     long nanosecs =
      49   253961973 :         (long) current.tv_sec * 1000L + (long) current.tv_usec / 1000L;
      50   253961973 :     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          37 : SysUtils::getModifiedTime(const std::string& fname) {
     110             :     struct stat result;
     111          37 :     if (stat(fname.c_str(), &result) == 0) {
     112          37 :         return result.st_mtime;
     113             :     }
     114             :     return -1;
     115             : }
     116             : 
     117             : 
     118             : /****************************************************************************/

Generated by: LCOV version 1.14