Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ce5625d authored by Elliott Hughes's avatar Elliott Hughes Committed by Gerrit Code Review
Browse files

Merge "Improve toolbox SIGPIPE behavior."

parents 9798023e 5976018b
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int, char **);

@@ -31,11 +33,24 @@ static struct
    { 0, 0 },
};

static void SIGPIPE_handler(int signal) {
    // Those desktop Linux tools that catch SIGPIPE seem to agree that it's
    // a successful way to exit, not a failure. (Which makes sense --- we were
    // told to stop by a reader, rather than failing to continue ourselves.)
    _exit(0);
}

int main(int argc, char **argv)
{
    int i;
    char *name = argv[0];

    // Let's assume that none of this code handles broken pipes. At least ls,
    // ps, and top were broken (though I'd previously added this fix locally
    // to top). We exit rather than use SIG_IGN because tools like top will
    // just keep on writing to nowhere forever if we don't stop them.
    signal(SIGPIPE, SIGPIPE_handler);

    if((argc > 1) && (argv[1][0] == '@')) {
        name = argv[1] + 1;
        argc--;
+0 −6
Original line number Diff line number Diff line
@@ -109,15 +109,9 @@ static int proc_thr_cmp(const void *a, const void *b);
static int numcmp(long long a, long long b);
static void usage(char *cmd);

static void exit_top(int signal) {
  exit(EXIT_FAILURE);
}

int top_main(int argc, char *argv[]) {
    num_used_procs = num_free_procs = 0;

    signal(SIGPIPE, exit_top);

    max_procs = 0;
    delay = 3;
    iterations = -1;