Ignore:
Timestamp:
Jan 14, 2007, 2:03:44 AM (14 years ago)
Author:
Sam Hocevar
Message:
  • Fix a problem with filedescriptor 17 being reused for other purposes than the debugging channel.
  • Print signal name, eg. SIGABRT instead of just "signal 6".
File:
1 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/zzuf.c

    r1663 r1665  
    5151static void read_children(void);
    5252
     53static char const *sig2str(int);
    5354static char *merge_regex(char *, char *);
    5455static char *merge_file(char *, char *);
     
    481482            }
    482483
    483             for(j = 0; j < 3; j++)
     484            /* We loop in reverse order so that files[0] is done last,
     485             * just in case one of the other dup2()ed fds had the value */
     486            for(j = 3; j--; )
    484487            {
    485488                close(fd[j][0]);
    486                 dup2(fd[j][1], files[j]);
    487                 close(fd[j][1]);
     489                if(fd[j][1] != files[j])
     490                {
     491                    dup2(fd[j][1], files[j]);
     492                    close(fd[j][1]);
     493                }
    488494            }
    489495
     
    589595                       && child_list[i].status == STATUS_SIGTERM))
    590596        {
    591             fprintf(stdout, "zzuf[seed=%i]: signal %i%s\n",
     597            fprintf(stdout, "zzuf[seed=%i]: signal %i%s%s\n",
    592598                    child_list[i].seed, WTERMSIG(status),
     599                    sig2str(WTERMSIG(status)),
    593600                      (WTERMSIG(status) == SIGKILL && maxmem >= 0) ?
    594601                      " (memory exceeded?)" : "");
     
    676683        }
    677684    }
     685}
     686
     687static char const *sig2str(int signum)
     688{
     689    switch(signum)
     690    {
     691        case SIGABRT:  return " (SIGABRT)";
     692        case SIGFPE:   return " (SIGFPE)";
     693        case SIGILL:   return " (SIGILL)";
     694        case SIGQUIT:  return " (SIGQUIT)";
     695        case SIGSEGV:  return " (SIGSEGV)";
     696        case SIGTRAP:  return " (SIGTRAP)";
     697#ifdef SIGSYS
     698        case SIGSYS:   return " (SIGSYS)";
     699#endif
     700#ifdef SIGEMT
     701        case SIGEMT:   return " (SIGEMT)";
     702#endif
     703#ifdef SIGBUS
     704        case SIGBUS:   return " (SIGBUS)";
     705#endif
     706#ifdef SIGXCPU
     707        case SIGXCPU:  return " (SIGXCPU)";
     708#endif
     709#ifdef SIGXFSZ
     710        case SIGXFSZ:  return " (SIGXFSZ)";
     711#endif
     712    }
     713
     714    return "";
    678715}
    679716
Note: See TracChangeset for help on using the changeset viewer.