root/maint/gnulib/tests/test-getlogin_r.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /* Test of getting user name.
   2    Copyright (C) 2010-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program 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
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* Written by Bruno Haible and Paul Eggert.  */
  18 
  19 #include <config.h>
  20 
  21 #include <unistd.h>
  22 
  23 #include "signature.h"
  24 SIGNATURE_CHECK (getlogin_r, int, (char *, size_t));
  25 
  26 #include "test-getlogin.h"
  27 
  28 int
  29 main (void)
     /* [previous][next][first][last][top][bottom][index][help] */
  30 {
  31   /* Test value.  */
  32   /* Test with a large enough buffer.  */
  33   char buf[1024];
  34   int err = getlogin_r (buf, sizeof buf);
  35 #if defined __sun
  36   if (err == EINVAL)
  37     {
  38       /* This can happen on Solaris 11 OpenIndiana in the MATE desktop.  */
  39       fprintf (stderr, "Skipping test: no entry in /var/adm/utmpx.\n");
  40       exit (77);
  41     }
  42 #endif
  43   test_getlogin_result (buf, err);
  44 
  45   /* Test with a small buffer.  */
  46   {
  47     char smallbuf[1024];
  48     size_t n = strlen (buf);
  49     size_t i;
  50 
  51     for (i = 0; i <= n; i++)
  52       {
  53         err = getlogin_r (smallbuf, i);
  54         if (i == 0)
  55           ASSERT (err == ERANGE || err == EINVAL);
  56         else
  57           ASSERT (err == ERANGE);
  58       }
  59   }
  60 
  61   /* Test with a huge buffer.  */
  62   {
  63     static char hugebuf[70000];
  64 
  65     ASSERT (getlogin_r (hugebuf, sizeof (hugebuf)) == 0);
  66     ASSERT (strcmp (hugebuf, buf) == 0);
  67   }
  68 
  69   return 0;
  70 }

/* [previous][next][first][last][top][bottom][index][help] */