From 3d2d448af1b16923f5a329b49bb8e658dbad8a06 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 13 Aug 2012 16:38:29 -0700 Subject: [PATCH] Fix nice... ...by switching to the NetBSD implementation. Change-Id: I562b27b237a24ded95804035cc322c7bff12ff59 --- libc/Android.mk | 3 +- libc/unistd/nice.c | 35 -------------- libc/upstream-netbsd/libc/gen/nice.c | 70 ++++++++++++++++++++++++++++ libc/upstream-netbsd/namespace.h | 25 ++++++++++ 4 files changed, 97 insertions(+), 36 deletions(-) delete mode 100644 libc/unistd/nice.c create mode 100644 libc/upstream-netbsd/libc/gen/nice.c create mode 100644 libc/upstream-netbsd/namespace.h diff --git a/libc/Android.mk b/libc/Android.mk index d0c9218ee..c20d29f32 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -31,7 +31,6 @@ libc_common_src_files := \ unistd/killpg.c \ unistd/lseek64.c \ unistd/mmap.c \ - unistd/nice.c \ unistd/open.c \ unistd/openat.c \ unistd/opendir.c \ @@ -338,6 +337,7 @@ libc_common_src_files := \ regex/regfree.c \ libc_upstream_netbsd_src_files := \ + upstream-netbsd/libc/gen/nice.c \ upstream-netbsd/libc/string/strxfrm.c \ # The following files are common, but must be compiled @@ -749,6 +749,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_upstream_netbsd_src_files) LOCAL_CFLAGS := \ $(libc_common_cflags) \ + -I$(LOCAL_PATH)/upstream-netbsd \ -include upstream-netbsd/netbsd-compat.h LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_netbsd diff --git a/libc/unistd/nice.c b/libc/unistd/nice.c deleted file mode 100644 index 09b6469a6..000000000 --- a/libc/unistd/nice.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include - -int nice(int increment) -{ - int priority = getpriority(PRIO_PROCESS, 0); - - return setpriority( PRIO_PROCESS, 0, priority+increment); -} diff --git a/libc/upstream-netbsd/libc/gen/nice.c b/libc/upstream-netbsd/libc/gen/nice.c new file mode 100644 index 000000000..19d671148 --- /dev/null +++ b/libc/upstream-netbsd/libc/gen/nice.c @@ -0,0 +1,70 @@ +/* $NetBSD: nice.c,v 1.13 2011/05/01 02:49:54 christos Exp $ */ + +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)nice.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: nice.c,v 1.13 2011/05/01 02:49:54 christos Exp $"); +#endif +#endif /* LIBC_SCCS and not lint */ + +#include "namespace.h" +#include +#include +#include +#include +#include + +#ifdef __weak_alias +__weak_alias(nice,_nice) +#endif + +/* + * Backwards compatible nice. + */ +int +nice(int incr) +{ + int prio; + + errno = 0; + prio = getpriority(PRIO_PROCESS, 0); + if (prio == -1 && errno) + return -1; + if (setpriority(PRIO_PROCESS, 0, prio + incr) == -1) { + if (errno == EACCES) + errno = EPERM; + return -1; + } + return getpriority(PRIO_PROCESS, 0); +} diff --git a/libc/upstream-netbsd/namespace.h b/libc/upstream-netbsd/namespace.h new file mode 100644 index 000000000..a4d415101 --- /dev/null +++ b/libc/upstream-netbsd/namespace.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 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. + */ + +#ifndef _BIONIC_NETBSD_NAMESPACE_H_included +#define _BIONIC_NETBSD_NAMESPACE_H_included + +// NetBSD uses __weak_alias on a lot of functions. We don't want that. +#if defined(__weak_alias) +#undef __weak_alias +#endif + +#endif