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]](../icons/n_left.png)
![[next]](../icons/n_right.png)
![[first]](../icons/n_first.png)
![[last]](../icons/n_last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
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 }