On Wed, Feb 3, 2021 at 3:46 PM Eshan Dhawan <eshandhawa...@gmail.com> wrote:
> From: Eshan dhawan <eshandhawa...@gmail.com> > > Signed-off-by: Eshan Dhawan <eshandhawa...@gmail.com> > --- > cpukit/Makefile.am | 1 + > cpukit/posix/src/confstr.c | 103 +++++++++++++ > spec/build/cpukit/librtemscpu.yml | 1 + > spec/build/testsuites/psxtests/grp.yml | 2 + > spec/build/testsuites/psxtests/psxconfstr.yml | 20 +++ > testsuites/psxtests/Makefile.am | 9 ++ > testsuites/psxtests/configure.ac | 1 + > testsuites/psxtests/psxconfstr/init.c | 143 ++++++++++++++++++ > testsuites/psxtests/psxconfstr/psxconfstr.doc | 17 +++ > testsuites/psxtests/psxconfstr/psxconfstr.scn | 4 + > 10 files changed, 301 insertions(+) > create mode 100644 cpukit/posix/src/confstr.c > create mode 100644 spec/build/testsuites/psxtests/psxconfstr.yml > create mode 100644 testsuites/psxtests/psxconfstr/init.c > create mode 100644 testsuites/psxtests/psxconfstr/psxconfstr.doc > create mode 100644 testsuites/psxtests/psxconfstr/psxconfstr.scn > > diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am > index 565aa66ce1..469754ab84 100644 > --- a/cpukit/Makefile.am > +++ b/cpukit/Makefile.am > @@ -511,6 +511,7 @@ librtemscpu_a_SOURCES += posix/src/condsignalsupp.c > librtemscpu_a_SOURCES += posix/src/condtimedwait.c > librtemscpu_a_SOURCES += posix/src/condwait.c > librtemscpu_a_SOURCES += posix/src/condwaitsupp.c > +librtemscpu_a_SOURCES += posix/src/confstr.c > librtemscpu_a_SOURCES += posix/src/_execve.c > librtemscpu_a_SOURCES += posix/src/fork.c > librtemscpu_a_SOURCES += posix/src/key.c > diff --git a/cpukit/posix/src/confstr.c b/cpukit/posix/src/confstr.c > new file mode 100644 > index 0000000000..337c4f471d > --- /dev/null > +++ b/cpukit/posix/src/confstr.c > @@ -0,0 +1,103 @@ > +/*- > + * SPDX-License-Identifier: BSD-3-Clause > + * > + * Copyright (c) 1993 > + * The Regents of the University of California. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 3. Neither the name of the University nor the names of its contributors > + * may be used to endorse or promote products derived from this > software > + * without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE > LIABLE > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > CONSEQUENTIAL > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, > STRICT > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY > WAY > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > + * SUCH DAMAGE. > + */ > + > +#include <sys/cdefs.h> > +/* Reduced to make sense in RTEMS */ > +__SCCSID("@(#)confstr.c 8.1 (Berkeley) 6/4/93"); > +__FBSDID("$FreeBSD$"); > I don't recall if we comment these out or have macros which turn them to nothing. > + > +#include <sys/param.h> > + > +#include <errno.h> > +#include <limits.h> > +#include <string.h> > +#include <unistd.h> > You may not need limits.h. Check. > + > +/* Many programming environment flags have same values > +* this block is added to raise error if the flags value change > +*/ > + > +#if (_CS_V6_ENV != _CS_V7_ENV) > +#error "_CS_V6_XXX and _CS_V7_XXX flag values not equal" > +#endif > This was intended to be representative of a pattern of adding a check to ensure every V6 and V7 constant with the same meaning and return value actually had the same value. This should be repeated for each of these: case _CS_POSIX_V6_ILP32_OFF32_CFLAGS: case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: case _CS_POSIX_V6_ILP32_OFF32_LIBS: case _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS: case _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS: case _CS_POSIX_V6_LPBIG_OFFBIG_LIBS: case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS: case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: case _CS_POSIX_V6_ILP32_OFFBIG_LIBS: case _CS_POSIX_V6_LP64_OFF64_CFLAGS: case _CS_POSIX_V6_LP64_OFF64_LDFLAGS: case _CS_POSIX_V6_LP64_OFF64_LIBS: And the #error should use the right name not XXX. > + > +size_t > +confstr(int name, char *buf, size_t len) > +{ > + const char *p; > + const char UPE[] = "unsupported programming environment"; > + > + switch (name) { > + > + case _CS_PATH: > + errno = EINVAL; > + return (0); > > +/* > + * POSIX/SUS ``Programming Environments'' stuff > + * > + * We don't support more than one programming environment > + * on any platform (yet), so we just return the empty > + * string for the environment we are compiled for, > + * and the string "unsupported programming environment" > + * for anything else. (The Standard says that if these > + * values are used on a system which does not support > + * this environment -- determined via sysconf() -- then > + * the value we return is unspecified. So, we return > + * something which will cause obvious breakage.) > + */ > + > + case _CS_POSIX_V6_ILP32_OFF32_CFLAGS: > + case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: > + case _CS_POSIX_V6_ILP32_OFF32_LIBS: > + case _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS: > + case _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS: > + case _CS_POSIX_V6_LPBIG_OFFBIG_LIBS: > + case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS: > + case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: > + case _CS_POSIX_V6_ILP32_OFFBIG_LIBS: > + case _CS_POSIX_V6_LP64_OFF64_CFLAGS: > + case _CS_POSIX_V6_LP64_OFF64_LDFLAGS: > + case _CS_POSIX_V6_LP64_OFF64_LIBS: > + > + > + p = UPE; > + if (len != 0 && buf != NULL){ > + strlcpy(buf, p, len); > + } > + return (strlen(p) + 1); > + > + default: > + errno = EINVAL; > + return (0); > + } > + /* NOTREACHED */ > +} > diff --git a/spec/build/cpukit/librtemscpu.yml > b/spec/build/cpukit/librtemscpu.yml > index a43dcf0d48..81a86741bd 100644 > --- a/spec/build/cpukit/librtemscpu.yml > +++ b/spec/build/cpukit/librtemscpu.yml > @@ -1005,6 +1005,7 @@ source: > - cpukit/posix/src/condtimedwait.c > - cpukit/posix/src/condwait.c > - cpukit/posix/src/condwaitsupp.c > +- cpukit/posix/src/confstr.c > - cpukit/posix/src/_execve.c > - cpukit/posix/src/fork.c > - cpukit/posix/src/key.c > diff --git a/spec/build/testsuites/psxtests/grp.yml > b/spec/build/testsuites/psxtests/grp.yml > index 47dedac275..9aca26e694 100644 > --- a/spec/build/testsuites/psxtests/grp.yml > +++ b/spec/build/testsuites/psxtests/grp.yml > @@ -89,6 +89,8 @@ links: > uid: psxcond02 > - role: build-dependency > uid: psxconfig01 > +- role: build-dependency > + uid: psxconfstr > - role: build-dependency > uid: psxdevctl01 > - role: build-dependency > diff --git a/spec/build/testsuites/psxtests/psxconfstr.yml > b/spec/build/testsuites/psxtests/psxconfstr.yml > new file mode 100644 > index 0000000000..252fc4601d > --- /dev/null > +++ b/spec/build/testsuites/psxtests/psxconfstr.yml > @@ -0,0 +1,20 @@ > +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause > +build-type: test-program > +cflags: [] > +copyrights: > +- Copyright (C) 2020 Eshan Dhawan (eshandhawa...@gmail.com) > +cppflags: [] > +cxxflags: [] > +enabled-by: true > +features: c cprogram > +includes: [] > +ldflags: [] > +links: [] > +source: > +- testsuites/psxtests/psxconfstr/init.c > +stlib: > +- m > +target: testsuites/psxtests/psxconfstr.exe > +type: build > +use-after: [] > +use-before: [] > diff --git a/testsuites/psxtests/Makefile.am > b/testsuites/psxtests/Makefile.am > index aae5fe764a..246f5b82df 100755 > --- a/testsuites/psxtests/Makefile.am > +++ b/testsuites/psxtests/Makefile.am > @@ -358,6 +358,15 @@ psxconfig01_CPPFLAGS = $(AM_CPPFLAGS) > $(TEST_FLAGS_psxconfig01) \ > $(support_includes) -I$(top_srcdir)/include > endif > > + > +psx_tests += psxconfstr > +psx_screens += psxconfstr/psxconfstr.scn > +psx_docs += psxconfstr/psxconfstr.doc > +psxconfstr_SOURCES = psxconfstr/init.c > +psxconfstr_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_psxconfstr) \ > + $(support_includes) > + > + > if TEST_psxdevctl01 > psx_tests += psxdevctl01 > psx_screens += psxdevctl01/psxdevctl01.scn > diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/ > configure.ac > index c509086abc..96c937cb4d 100644 > --- a/testsuites/psxtests/configure.ac > +++ b/testsuites/psxtests/configure.ac > @@ -80,6 +80,7 @@ RTEMS_TEST_CHECK([psxconcurrency01]) > RTEMS_TEST_CHECK([psxcond01]) > RTEMS_TEST_CHECK([psxcond02]) > RTEMS_TEST_CHECK([psxconfig01]) > +RTEMS_TEST_CHECK([psxconfstr]) > RTEMS_TEST_CHECK([psxdevctl01]) > RTEMS_TEST_CHECK([psxeintr_join]) > RTEMS_TEST_CHECK([psxenosys]) > diff --git a/testsuites/psxtests/psxconfstr/init.c > b/testsuites/psxtests/psxconfstr/init.c > new file mode 100644 > index 0000000000..e38787132b > --- /dev/null > +++ b/testsuites/psxtests/psxconfstr/init.c > @@ -0,0 +1,143 @@ > +/* > + * @file > + * @brief Test suite for confstr method > + */ > + > +/* > + * SPDX-License-Identifier: BSD-2-Clause > + * > + * Copyright (C) 2020 Eshan Dhawan, Sebastian Huber > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS > BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF > THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifdef HAVE_CONFIG_H > +#include "config.h" > +#endif > + > +#include <errno.h> > +#include <stdio.h> > +#include <string.h> > +#include <rtems.h> > +#include <rtems/test.h> > +#include <unistd.h> > +#include <rtems/bspIo.h> > + > +#include "tmacros.h" > +#include "test_support.h" > + > +const char rtems_test_name[] = "PSXCONFSTR"; > + > +/* Forward declaration to avoid warnings */ > +rtems_task Init( rtems_task_argument ignored ); > + > +static char buffer[512]; > + > +static const T_action actions[] = { > + T_report_hash_sha256, > + T_check_task_context, > + T_check_file_descriptors, > + T_check_rtems_barriers, > + T_check_rtems_extensions, > + T_check_rtems_message_queues, > + T_check_rtems_partitions, > + T_check_rtems_periods, > + T_check_rtems_regions, > + T_check_rtems_semaphores, > + T_check_rtems_tasks, > + T_check_rtems_timers, > + T_check_posix_keys > +}; > + > +static const T_config config = { > + .name = "psxconfstr", > + .buf = buffer, > + .putchar = rtems_put_char, > + .buf_size = sizeof(buffer), > + .verbosity = T_VERBOSE, > + .now = T_now_clock, > + .action_count = T_ARRAY_SIZE(actions), > + .actions = actions > +}; > + > +/* init test function begins */ > +T_TEST_CASE(confstr) > +{ > + > +int r; > + char * buf ; > + const char UPE[] = "unsupported programming environment"; > + size_t len1; > + len1 = strlen(UPE) + 1; > + r = confstr(_CS_PATH, buf, sizeof(buf)); > + T_quiet_psx_success(r); > + > + r = confstr(_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, buf, sizeof(buf)); > + T_quiet_eq_int(r, len1); > + > + r = confstr(_CS_POSIX_V6_LP64_OFF64_LDFLAGS, buf, sizeof(buf)); > + T_quiet_eq_int(r, len1); > + > + r = confstr(_CS_POSIX_V7_ILP32_OFF32_CFLAGS, buf, sizeof(buf)); > + T_quiet_eq_int(r, len1); > + > + r = confstr(_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, buf, sizeof(buf)); > + T_quiet_eq_int(r, len1); > + > + r = confstr(_CS_POSIX_V7_LP64_OFF64_LIBS, buf, sizeof(buf)); > + T_quiet_eq_int(r, len1); > + > + r = confstr(_CS_POSIX_V6_LP64_OFF64_CFLAGS, buf, sizeof(buf)); > + T_quiet_eq_int(r, len1); > + > + r = confstr(_CS_PATH, buf, sizeof(buf)); > + T_quiet_psx_success(r); > + > +} > + > +rtems_task Init(rtems_task_argument ignored) > +{ > + int exit_code; > + > + TEST_BEGIN(); > + > + T_register(); > + exit_code = T_main(&config); > + if (exit_code == 0) { > + TEST_END(); > + } > + > + rtems_test_exit(exit_code); > + > +} > +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER > +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER > + > +#define CONFIGURE_MAXIMUM_TASKS 1 > + > +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION > + > +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE > +#define CONFIGURE_INIT > + > +#include <rtems/confdefs.h> > +/* end of file */ > diff --git a/testsuites/psxtests/psxconfstr/psxconfstr.doc > b/testsuites/psxtests/psxconfstr/psxconfstr.doc > new file mode 100644 > index 0000000000..43501791b8 > --- /dev/null > +++ b/testsuites/psxtests/psxconfstr/psxconfstr.doc > @@ -0,0 +1,17 @@ > +# COPYRIGHT (c) 2020 > +# On-Line Applications Research Corporation (OAR). > +# > +# SPDX-License-Identifier: BSD-2-Clause > +# > + > +This file describes the directives and concepts tested by this test set. > + > +test set name: psxconfstr > + > +Directives: > + Confstr() > + > +Concepts: > + > ++ This test exercises the confstr method > + > diff --git a/testsuites/psxtests/psxconfstr/psxconfstr.scn > b/testsuites/psxtests/psxconfstr/psxconfstr.scn > new file mode 100644 > index 0000000000..cb9e49dc72 > --- /dev/null > +++ b/testsuites/psxtests/psxconfstr/psxconfstr.scn > @@ -0,0 +1,4 @@ > +*** BEGIN OF TEST PSXCONFSTR *** > + > +*** END OF TEST PSXCONFSTR *** > + > -- > 2.27.0 > >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel