Skip to content

Commit

Permalink
Fix the WIFSTOPPED definition.
Browse files Browse the repository at this point in the history
Although this breaks job control in several shells (including mksh),
this has been broken since the initial commit and no-one's noticed until
now.

Bug: android/ndk#1878
Test: treehugger
Change-Id: Id7c4805965c5e5847db99b57df1af13355adcc22
  • Loading branch information
enh-google authored and travarilo committed Jun 10, 2023
1 parent 9eb2eff commit 5c97cb0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion libc/include/bits/wait.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
#define WIFEXITED(__status) (WTERMSIG(__status) == 0)

/** Returns true if the process was stopped by a signal. */
#define WIFSTOPPED(__status) (WTERMSIG(__status) == 0x7f)
#define WIFSTOPPED(__status) (((__status) & 0xff) == 0x7f)

/** Returns true if the process was terminated by a signal. */
#define WIFSIGNALED(__status) (WTERMSIG((__status)+1) >= 2)
Expand Down
19 changes: 19 additions & 0 deletions tests/sys_wait_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,22 @@ TEST(sys_wait, waitid) {
ASSERT_EQ(66, si.si_status);
ASSERT_EQ(CLD_EXITED, si.si_code);
}

// https://github.com/android/ndk/issues/1878
TEST(sys_wait, macros) {
#if defined(__GLIBC__)
// glibc before 2016 requires an lvalue.
#else
ASSERT_FALSE(WIFEXITED(0x7f));
ASSERT_TRUE(WIFSTOPPED(0x7f));
ASSERT_FALSE(WIFCONTINUED(0x7f));

ASSERT_TRUE(WIFEXITED(0x80));
ASSERT_FALSE(WIFSTOPPED(0x80));
ASSERT_FALSE(WIFCONTINUED(0x80));

ASSERT_FALSE(WIFEXITED(0xffff));
ASSERT_FALSE(WIFSTOPPED(0xffff));
ASSERT_TRUE(WIFCONTINUED(0xffff));
#endif
}

0 comments on commit 5c97cb0

Please sign in to comment.