X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=inline;f=tests%2Ftest-getlogin_r.c;h=2a20fd920a08adab5da95f0f520d8d93e0e28095;hb=3615b190ca4b0f20ec469d0bcdb1070e241aa96c;hp=f716ab952b9a7663d35fa0933f7b775415bbd29c;hpb=dd5823d49cf74819742b51ff48044ebe1adbd834;p=gnulib.git diff --git a/tests/test-getlogin_r.c b/tests/test-getlogin_r.c index f716ab952..2a20fd920 100644 --- a/tests/test-getlogin_r.c +++ b/tests/test-getlogin_r.c @@ -1,5 +1,5 @@ /* Test of getting user name. - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ SIGNATURE_CHECK (getlogin_r, int, (char *, size_t)); #include +#include #include #include @@ -34,8 +35,19 @@ main (void) { /* Test with a large enough buffer. */ char buf[1024]; + int err; - ASSERT (getlogin_r (buf, sizeof (buf)) == 0); + err = getlogin_r (buf, sizeof (buf)); + if (err != 0) + { + /* getlogin_r() fails when stdin is not connected to a tty. */ + ASSERT (err == ENOTTY); +#if !defined __hpux /* On HP-UX 11.11 it fails anyway. */ + ASSERT (! isatty (0)); +#endif + fprintf (stderr, "Skipping test: stdin is not a tty.\n"); + return 77; + } /* Compare against the value from the environment. */ #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) @@ -66,7 +78,21 @@ main (void) size_t i; for (i = 0; i <= n; i++) - ASSERT (getlogin_r (smallbuf, i) == ERANGE); + { + err = getlogin_r (smallbuf, i); + if (i == 0) + ASSERT (err == ERANGE || err == EINVAL); + else + ASSERT (err == ERANGE); + } + } + + /* Test with a huge buffer. */ + { + static char hugebuf[70000]; + + ASSERT (getlogin_r (hugebuf, sizeof (hugebuf)) == 0); + ASSERT (strcmp (hugebuf, buf) == 0); } return 0;