(root)/
glibc-2.38/
posix/
tst-nice.c
       1  /* Copyright (C) 2003-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <errno.h>
      19  #include <stdio.h>
      20  #include <unistd.h>
      21  
      22  
      23  /* Test that nice() does not incorrectly return 0.  */
      24  static int
      25  do_test (void)
      26  {
      27    int ret;
      28    const int incr = 10;
      29    int old;
      30  
      31    /* Discover current nice value.  */
      32    errno = 0;
      33    old = nice (0);
      34    if (old == -1 && errno != 0)
      35      {
      36        printf ("break: nice(%d) return: %d, %m\n", 0, old);
      37        return 1;
      38      }
      39  
      40    /* Nice ourselves up.  */
      41    errno = 0;
      42    ret = nice (incr);
      43    if (ret == -1 && errno != 0)
      44      {
      45        printf ("break: nice(%d) return: %d, %m\n", incr, ret);
      46        return 1;
      47      }
      48  
      49    /* Check for return value being zero when it shouldn't.  Cannot simply
      50       check for expected value since nice values are capped at 2^n-1.
      51       But we assume that we didn't start at the cap and so should have
      52       increased some.  */
      53    if (ret <= old)
      54      {
      55        printf ("FAIL: retval (%d) of nice(%d) != %d\n", ret, incr, old + incr);
      56        return 1;
      57      }
      58  
      59    /* BZ #18086. Make sure we don't reset errno.  */
      60    errno = EBADF;
      61    if (nice (0) == -1 || errno != EBADF)
      62      {
      63        printf ("FAIL: errno = %i, but wanted EBADF (%i)\n", errno, EBADF);
      64        return 1;
      65      }
      66  
      67  
      68    printf ("PASS: nice(%d) from %d return: %d\n", incr, old, ret);
      69    return 0;
      70  }
      71  
      72  #define TEST_FUNCTION do_test ()
      73  #include "../test-skeleton.c"