Mercurial > hg > CbC > CbC_gcc
view libgo/go/syscall/wait.c @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
/* wait.c -- functions for getting wait status values. Copyright 2011 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. We use C code to extract the wait status so that we can easily be OS-independent. */ #include <stdint.h> #include <sys/wait.h> #include "runtime.h" #ifndef WCOREDUMP #define WCOREDUMP(status) (((status) & 0200) != 0) #endif #ifndef WIFCONTINUED #define WIFCONTINUED(x) 0 #endif extern _Bool Exited (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.Exited"); _Bool Exited (uint32_t *w) { return WIFEXITED (*w) != 0; } extern _Bool Signaled (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.Signaled"); _Bool Signaled (uint32_t *w) { return WIFSIGNALED (*w) != 0; } extern _Bool Stopped (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.Stopped"); _Bool Stopped (uint32_t *w) { return WIFSTOPPED (*w) != 0; } extern _Bool Continued (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.Continued"); _Bool Continued (uint32_t *w __attribute__ ((unused))) { return WIFCONTINUED (*w) != 0; } extern _Bool CoreDump (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.CoreDump"); _Bool CoreDump (uint32_t *w) { return WCOREDUMP (*w) != 0; } extern intgo ExitStatus (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.ExitStatus"); intgo ExitStatus (uint32_t *w) { if (!WIFEXITED (*w)) return -1; return WEXITSTATUS (*w); } extern intgo Signal (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.Signal"); intgo Signal (uint32_t *w) { if (!WIFSIGNALED (*w)) return -1; return WTERMSIG (*w); } extern intgo StopSignal (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.StopSignal"); intgo StopSignal (uint32_t *w) { if (!WIFSTOPPED (*w)) return -1; return WSTOPSIG (*w); } extern intgo TrapCause (uint32_t *w) __asm__ (GOSYM_PREFIX "syscall.WaitStatus.TrapCause"); intgo TrapCause (uint32_t *w __attribute__ ((unused))) { #ifndef __linux__ return -1; #else if (!WIFSTOPPED (*w) || WSTOPSIG (*w) != SIGTRAP) return -1; return *w >> 16; #endif }