1f891d875be215939629206048f8d491ba9354701robbiew/* 2f891d875be215939629206048f8d491ba9354701robbiew * 3f891d875be215939629206048f8d491ba9354701robbiew * Copyright (c) International Business Machines Corp., 2002 4f891d875be215939629206048f8d491ba9354701robbiew * 5f891d875be215939629206048f8d491ba9354701robbiew * This program is free software; you can redistribute it and/or modify 6f891d875be215939629206048f8d491ba9354701robbiew * it under the terms of the GNU General Public License as published by 7f891d875be215939629206048f8d491ba9354701robbiew * the Free Software Foundation; either version 2 of the License, or 8f891d875be215939629206048f8d491ba9354701robbiew * (at your option) any later version. 9f891d875be215939629206048f8d491ba9354701robbiew * 10f891d875be215939629206048f8d491ba9354701robbiew * This program is distributed in the hope that it will be useful, 11f891d875be215939629206048f8d491ba9354701robbiew * but WITHOUT ANY WARRANTY; without even the implied warranty of 12f891d875be215939629206048f8d491ba9354701robbiew * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13f891d875be215939629206048f8d491ba9354701robbiew * the GNU General Public License for more details. 14f891d875be215939629206048f8d491ba9354701robbiew * 15f891d875be215939629206048f8d491ba9354701robbiew * You should have received a copy of the GNU General Public License 16b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy * along with this program; if not, write to the Free Software Foundation, 17b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18f891d875be215939629206048f8d491ba9354701robbiew */ 19f891d875be215939629206048f8d491ba9354701robbiew 20f891d875be215939629206048f8d491ba9354701robbiew/* 11/20/2002 Port to LTP robbiew@us.ibm.com */ 21f891d875be215939629206048f8d491ba9354701robbiew/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */ 22f891d875be215939629206048f8d491ba9354701robbiew 23f891d875be215939629206048f8d491ba9354701robbiew/* 24f891d875be215939629206048f8d491ba9354701robbiew * NAME 254bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * confstr1.c - test for confstr(3C) - Get configuration-defined string 26f891d875be215939629206048f8d491ba9354701robbiew * values. 27f891d875be215939629206048f8d491ba9354701robbiew * 28f891d875be215939629206048f8d491ba9354701robbiew * CALLS 29f891d875be215939629206048f8d491ba9354701robbiew * confstr(3C) 30f891d875be215939629206048f8d491ba9354701robbiew * 31f891d875be215939629206048f8d491ba9354701robbiew * RESTRICTIONS 32f891d875be215939629206048f8d491ba9354701robbiew * MUST RUN AS ROOT 33f891d875be215939629206048f8d491ba9354701robbiew * 34f891d875be215939629206048f8d491ba9354701robbiew */ 35f891d875be215939629206048f8d491ba9354701robbiew 36970c0e0128f02869cc1501332ec5802f354a0147Cyril Hrubis#define _XOPEN_SOURCE 500 37970c0e0128f02869cc1501332ec5802f354a0147Cyril Hrubis 38f891d875be215939629206048f8d491ba9354701robbiew#include <unistd.h> 39f891d875be215939629206048f8d491ba9354701robbiew#include <stdio.h> 40f891d875be215939629206048f8d491ba9354701robbiew#include <sys/types.h> 41f891d875be215939629206048f8d491ba9354701robbiew#include <errno.h> 42f891d875be215939629206048f8d491ba9354701robbiew 43f891d875be215939629206048f8d491ba9354701robbiew#include "test.h" 44b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy#include "safe_macros.h" 45b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 46b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jystatic struct test_case_t { 47b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy int value; 48b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy char *name; 49b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy} test_cases[] = { 50b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_PATH, "PATH"}, 51b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFF32_CFLAGS, "XBS5_ILP32_OFF32_CFLAGS"}, 52b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFF32_LDFLAGS, "XBS5_ILP32_OFF32_LDFLAGS"}, 53b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFF32_LIBS, "XBS5_ILP32_OFF32_LIBS"}, 54b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFF32_LINTFLAGS, "XBS5_ILP32_OFF32_LINTFLAGS"}, 55b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFFBIG_CFLAGS, "XBS5_ILP32_OFFBIG_CFLAGS"}, 56b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFFBIG_LDFLAGS, "XBS5_ILP32_OFFBIG_LDFLAGS"}, 57b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFFBIG_LIBS, "XBS5_ILP32_OFFBIG_LIBS"}, 58b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_ILP32_OFFBIG_LINTFLAGS, "XBS5_ILP32_OFFBIG_LINTFLAGS"}, 59b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LP64_OFF64_CFLAGS, "XBS5_LP64_OFF64_CFLAGS"}, 60b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LP64_OFF64_LDFLAGS, "XBS5_LP64_OFF64_LDFLAGS"}, 61b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LP64_OFF64_LIBS, "XBS5_LP64_OFF64_LIBS"}, 62b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LP64_OFF64_LINTFLAGS, "XBS5_LP64_OFF64_LINTFLAGS"}, 63b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LPBIG_OFFBIG_CFLAGS, "XBS5_LPBIG_OFFBIG_CFLAGS"}, 64b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LPBIG_OFFBIG_LDFLAGS, "XBS5_LPBIG_OFFBIG_LDFLAGS"}, 65b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LPBIG_OFFBIG_LIBS, "XBS5_LPBIG_OFFBIG_LIBS"}, 66b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy {_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, "XBS5_LPBIG_OFFBIG_LINTFLAGS"}, 67470d54592ac8950441356c66eb771b6c3f510256zenglg.jy {_CS_GNU_LIBC_VERSION, "GNU_LIBC_VERSION"}, 68470d54592ac8950441356c66eb771b6c3f510256zenglg.jy {_CS_GNU_LIBPTHREAD_VERSION, "GNU_LIBPTHREAD_VERSION"}, 69b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy}; 70f891d875be215939629206048f8d491ba9354701robbiew 71fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "confstr01"; 72b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jyint TST_TOTAL = ARRAY_SIZE(test_cases); 7356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 74b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jystatic void setup(void); 75b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jystatic void cleanup(void); 764bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak 77b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jyint main(int argc, char *argv[]) 78f891d875be215939629206048f8d491ba9354701robbiew{ 79b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy int lc; 80f891d875be215939629206048f8d491ba9354701robbiew int i; 81b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy char *buf; 82b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy int len; 83f891d875be215939629206048f8d491ba9354701robbiew 84d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(argc, argv, NULL, NULL); 85b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 86b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy setup(); 87b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 88b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy for (lc = 0; TEST_LOOPING(lc); lc++) { 89b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 90b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy tst_count = 0; 91b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 92b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy for (i = 0; i < TST_TOTAL; i++) { 93b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 94b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy TEST(confstr(test_cases[i].value, NULL, (size_t)0)); 95b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 96b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy if (TEST_RETURN != 0) { 97b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy len = TEST_RETURN; 98b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy buf = SAFE_MALLOC(cleanup, len); 99b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy TEST(confstr(test_cases[i].value, buf, len)); 100b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 101b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy if (TEST_RETURN != len || buf[len-1] != '\0') { 102b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy tst_brkm(TBROK, cleanup, 103b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy "confstr :%s failed", 104b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy test_cases[i].name); 105b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy } else { 106b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy tst_resm(TPASS, "confstr %s = '%s'", 107b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy test_cases[i].name, buf); 108f891d875be215939629206048f8d491ba9354701robbiew } 109b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy free(buf); 110f891d875be215939629206048f8d491ba9354701robbiew } else { 111b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy if (TEST_ERRNO == EINVAL) { 112b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy tst_resm(TCONF, 113b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy "confstr %s not supported", 114b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy test_cases[i].name); 115b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy } else { 116b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy tst_resm(TFAIL, 117b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy "confstr %s failed", 118b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy test_cases[i].name); 119b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy } 120f891d875be215939629206048f8d491ba9354701robbiew } 121f891d875be215939629206048f8d491ba9354701robbiew } 122f891d875be215939629206048f8d491ba9354701robbiew } 123f891d875be215939629206048f8d491ba9354701robbiew 124b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy cleanup(); 125b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 1262c28215423293e443469a07ae7011135d058b671Garrett Cooper tst_exit(); 127b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy} 128b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy 129b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jystatic void setup(void) 130b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy{ 131b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy TEST_PAUSE; 132b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy} 133f891d875be215939629206048f8d491ba9354701robbiew 134b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jystatic void cleanup(void) 135b7c04bbf3b6ab879c5650194249ee9899d776f90zenglg.jy{ 136ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 137