From bf03a1b30409e2294987cc9664bd6f41e8861b00 Mon Sep 17 00:00:00 2001 From: Pete Delaney Date: Fri, 5 Oct 2012 00:23:50 -0700 Subject: [PATCH] [MIPS] Add support for waitpid. Change-Id: I7b3b90f9a64d40c5aa72c74cac6881f1189c1462 Signed-off-by: Chris Dearman Signed-off-by: Pete Delaney --- ndk/sources/android/libportable/Android.mk | 3 +- .../android/libportable/arch-mips/waitpid.c | 44 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 ndk/sources/android/libportable/arch-mips/waitpid.c diff --git a/ndk/sources/android/libportable/Android.mk b/ndk/sources/android/libportable/Android.mk index 1f691cd80..19501e89c 100644 --- a/ndk/sources/android/libportable/Android.mk +++ b/ndk/sources/android/libportable/Android.mk @@ -46,7 +46,8 @@ libportable_arch_src_files += \ arch-mips/stat.c \ arch-mips/statfs.c \ arch-mips/syscall.c \ - arch-mips/timer.c + arch-mips/timer.c \ + arch-mips/waitpid.c endif ifeq ($(TARGET_ARCH),arm) diff --git a/ndk/sources/android/libportable/arch-mips/waitpid.c b/ndk/sources/android/libportable/arch-mips/waitpid.c new file mode 100644 index 000000000..5b4168efe --- /dev/null +++ b/ndk/sources/android/libportable/arch-mips/waitpid.c @@ -0,0 +1,44 @@ +/* + * Copyright 2012, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +#define PORTABLE_TAG "waitpid_portable" +#include + +pid_t waitpid_portable(pid_t pid, int *status, int options) +{ + pid_t ret; + + ret = waitpid(pid, status, options); + if (status && ret > 0) { + /* + * Status layout is identical so just the signal + * number needs to be changed. + */ + if (WIFSIGNALED(*status)) + *status = (*status & ~0x7f) | map_mips_signum_to_portable(WTERMSIG(*status)); + else if (WIFSTOPPED(*status)) + *status = (*status & ~0xff00) | (map_mips_signum_to_portable(WSTOPSIG(*status)) << 8); + } + + return ret; +}