175 lines
4.5 KiB
C
175 lines
4.5 KiB
C
/*
|
|
*
|
|
* Copyright (c) International Business Machines Corp., 2002
|
|
*
|
|
* 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
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
|
* the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
/*
|
|
* http://www.opengroup.org/onlinepubs/009695399/functions/sysconf.html
|
|
*
|
|
* NAME :
|
|
* sysconf01 : test for sysconf( get configurable system variables) sys call.
|
|
*
|
|
* USAGE :
|
|
* sysconf01
|
|
*/
|
|
|
|
#define _GNU_SOURCE 1
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
#include <errno.h>
|
|
#include <unistd.h>
|
|
|
|
#define INVAL_FLAG -1
|
|
|
|
/** LTP Port **/
|
|
#include "test.h"
|
|
|
|
char *TCID = "sysconf01";
|
|
int TST_TOTAL = 56;
|
|
|
|
static void _test_sysconf(long name, const char *strname)
|
|
{
|
|
long retval;
|
|
|
|
/* make sure we reset this as sysconf() will not */
|
|
errno = 0;
|
|
retval = sysconf(name);
|
|
if (retval == -1) {
|
|
|
|
/*
|
|
* The manpage for sysconf(2) specifically states that:
|
|
* 1. If -1 is returned and errno is EINVAL, then the resource
|
|
* name doesn't exist.
|
|
* 2. If errno remains 0, then the limit isn't implemented.
|
|
* 3. Else, something weird happened with the syscall.
|
|
*/
|
|
switch (errno) {
|
|
case EINVAL:
|
|
tst_resm(TCONF, "Resource doesn't exist: %s", strname);
|
|
break;
|
|
case 0:
|
|
tst_resm(TCONF, "Not supported sysconf resource: %s",
|
|
strname);
|
|
break;
|
|
default:
|
|
tst_resm(TFAIL | TERRNO, "Unexpected errno value for "
|
|
"%s", strname);
|
|
break;
|
|
}
|
|
} else
|
|
tst_resm(TPASS, "%s = %li", strname, retval);
|
|
|
|
}
|
|
|
|
#define test_sysconf(name) _test_sysconf(name, #name)
|
|
|
|
int main(void)
|
|
{
|
|
/* 1 - 5 */
|
|
test_sysconf(_SC_CLK_TCK);
|
|
test_sysconf(_SC_ARG_MAX);
|
|
test_sysconf(_SC_CHILD_MAX);
|
|
test_sysconf(_SC_OPEN_MAX);
|
|
test_sysconf(_SC_JOB_CONTROL);
|
|
/* 6 - 10 */
|
|
test_sysconf(_SC_SAVED_IDS);
|
|
test_sysconf(_SC_VERSION);
|
|
test_sysconf(_SC_PASS_MAX);
|
|
test_sysconf(_SC_LOGIN_NAME_MAX);
|
|
test_sysconf(_SC_XOPEN_VERSION);
|
|
/* 11 - 15 */
|
|
test_sysconf(_SC_TZNAME_MAX);
|
|
test_sysconf(_SC_STREAM_MAX);
|
|
test_sysconf(_SC_XOPEN_CRYPT);
|
|
test_sysconf(_SC_XOPEN_ENH_I18N);
|
|
test_sysconf(_SC_XOPEN_SHM);
|
|
/* 16 - 20 */
|
|
test_sysconf(_SC_XOPEN_XCU_VERSION);
|
|
test_sysconf(_SC_ATEXIT_MAX);
|
|
test_sysconf(_SC_2_C_BIND);
|
|
test_sysconf(_SC_2_C_DEV);
|
|
#ifdef _SC_2_C_VERSION
|
|
test_sysconf(_SC_2_C_VERSION);
|
|
#else
|
|
tst_resm(TCONF, "_SC_2_C_VERSION not defined");
|
|
#endif
|
|
/* 21 - 25 */
|
|
test_sysconf(_SC_2_CHAR_TERM);
|
|
test_sysconf(_SC_2_FORT_DEV);
|
|
test_sysconf(_SC_2_FORT_RUN);
|
|
test_sysconf(_SC_2_LOCALEDEF);
|
|
test_sysconf(_SC_2_SW_DEV);
|
|
/* 26 - 30 */
|
|
test_sysconf(_SC_2_UPE);
|
|
test_sysconf(_SC_2_VERSION);
|
|
test_sysconf(_SC_BC_BASE_MAX);
|
|
test_sysconf(_SC_BC_DIM_MAX);
|
|
test_sysconf(_SC_BC_SCALE_MAX);
|
|
/* 31 - 35 */
|
|
test_sysconf(_SC_BC_STRING_MAX);
|
|
test_sysconf(_SC_COLL_WEIGHTS_MAX);
|
|
test_sysconf(_SC_EXPR_NEST_MAX);
|
|
test_sysconf(_SC_LINE_MAX);
|
|
test_sysconf(_SC_RE_DUP_MAX);
|
|
/* 36 - 40 */
|
|
test_sysconf(_SC_XOPEN_UNIX);
|
|
test_sysconf(_SC_PAGESIZE);
|
|
test_sysconf(_SC_PHYS_PAGES);
|
|
test_sysconf(_SC_AVPHYS_PAGES);
|
|
test_sysconf(_SC_AIO_MAX);
|
|
/* 41 - 45 */
|
|
test_sysconf(_SC_AIO_PRIO_DELTA_MAX);
|
|
test_sysconf(_SC_SEMAPHORES);
|
|
test_sysconf(_SC_SEM_NSEMS_MAX);
|
|
test_sysconf(_SC_SEM_VALUE_MAX);
|
|
test_sysconf(_SC_MEMORY_PROTECTION);
|
|
/* 46 - 50 */
|
|
test_sysconf(_SC_FSYNC);
|
|
test_sysconf(_SC_MEMORY_PROTECTION);
|
|
test_sysconf(_SC_TIMERS);
|
|
test_sysconf(_SC_TIMER_MAX);
|
|
test_sysconf(_SC_MAPPED_FILES);
|
|
/* 51 - 55 */
|
|
test_sysconf(_SC_THREAD_PRIORITY_SCHEDULING);
|
|
test_sysconf(_SC_XOPEN_LEGACY);
|
|
test_sysconf(_SC_MEMLOCK);
|
|
test_sysconf(_SC_XBS5_ILP32_OFF32);
|
|
test_sysconf(_SC_XBS5_ILP32_OFFBIG);
|
|
|
|
/* 56 */
|
|
{
|
|
int retval, actual;
|
|
errno = 0;
|
|
retval = sysconf(INVAL_FLAG);
|
|
actual = errno;
|
|
if (retval != -1) {
|
|
tst_resm(TFAIL,
|
|
"sysconf succeeded for invalid flag (%i), "
|
|
" retval=%d errno=%d: %s",
|
|
INVAL_FLAG, retval, actual, strerror(actual));
|
|
} else if (actual != EINVAL) {
|
|
tst_resm(TFAIL,
|
|
"sysconf correctly failed, but expected "
|
|
"errno (%i) != actual (%i)", EINVAL, actual);
|
|
} else
|
|
tst_resm(TPASS, "The invalid sysconf key was trapped "
|
|
"appropriately");
|
|
}
|
|
|
|
tst_exit();
|
|
}
|