diff options
author | Daniel Lange <DLange@git.local> | 2024-01-10 12:40:37 +0100 |
---|---|---|
committer | Daniel Lange <DLange@git.local> | 2024-01-10 12:40:37 +0100 |
commit | 7271b076b82785ffca73ee9e4ae84cabb77018ee (patch) | |
tree | e8270dd60ec096bee8157dbadf029e15ed584592 /TraceScreen.c | |
parent | f288666edc9180a2e81e6655951878124f321df6 (diff) | |
download | debian_htop-7271b076b82785ffca73ee9e4ae84cabb77018ee.tar.gz debian_htop-7271b076b82785ffca73ee9e4ae84cabb77018ee.tar.bz2 debian_htop-7271b076b82785ffca73ee9e4ae84cabb77018ee.zip |
New upstream version 3.3.0upstream/3.3.0upstream
Diffstat (limited to 'TraceScreen.c')
-rw-r--r-- | TraceScreen.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/TraceScreen.c b/TraceScreen.c index 2aa0781..8a69b67 100644 --- a/TraceScreen.c +++ b/TraceScreen.c @@ -62,7 +62,7 @@ void TraceScreen_delete(Object* cast) { } static void TraceScreen_draw(InfoScreen* this) { - InfoScreen_drawTitled(this, "Trace of process %d - %s", this->process->pid, Process_getCommand(this->process)); + InfoScreen_drawTitled(this, "Trace of process %d - %s", Process_getPid(this->process), Process_getCommand(this->process)); } bool TraceScreen_forkTracer(TraceScreen* this) { @@ -89,14 +89,26 @@ bool TraceScreen_forkTracer(TraceScreen* this) { close(fdpair[1]); char buffer[32] = {0}; - xSnprintf(buffer, sizeof(buffer), "%d", this->super.process->pid); - // Use of NULL in variadic functions must have a pointer cast. - // The NULL constant is not required by standard to have a pointer type. - execlp("strace", "strace", "-T", "-tt", "-s", "512", "-p", buffer, (char *)NULL); - - // Should never reach here, unless execlp fails ... - const char* message = "Could not execute 'strace'. Please make sure it is available in your $PATH."; - (void)! write(STDERR_FILENO, message, strlen(message)); + xSnprintf(buffer, sizeof(buffer), "%d", Process_getPid(this->super.process)); + + #if defined(HTOP_FREEBSD) || defined(HTOP_OPENBSD) || defined(HTOP_NETBSD) || defined(HTOP_DRAGONFLYBSD) || defined(HTOP_SOLARIS) + // Use of NULL in variadic functions must have a pointer cast. + // The NULL constant is not required by standard to have a pointer type. + execlp("truss", "truss", "-s", "512", "-p", buffer, (void*)NULL); + + // Should never reach here, unless execlp fails ... + const char* message = "Could not execute 'truss'. Please make sure it is available in your $PATH."; + (void)! write(STDERR_FILENO, message, strlen(message)); + #elif defined(HTOP_LINUX) + execlp("strace", "strace", "-T", "-tt", "-s", "512", "-p", buffer, (void*)NULL); + + // Should never reach here, unless execlp fails ... + const char* message = "Could not execute 'strace'. Please make sure it is available in your $PATH."; + (void)! write(STDERR_FILENO, message, strlen(message)); + #else // HTOP_DARWIN, HTOP_PCP == HTOP_UNSUPPORTED + const char* message = "Tracing unavailable on not supported system."; + (void)! write(STDERR_FILENO, message, strlen(message)); + #endif exit(127); } @@ -164,6 +176,7 @@ static void TraceScreen_updateTrace(InfoScreen* super) { static bool TraceScreen_onKey(InfoScreen* super, int ch) { TraceScreen* this = (TraceScreen*) super; + switch (ch) { case 'f': case KEY_F(8): @@ -178,6 +191,7 @@ static bool TraceScreen_onKey(InfoScreen* super, int ch) { InfoScreen_draw(this); return true; } + this->follow = false; return false; } |