[PATCH v5] Confstr support for RTEMS

Eshan Dhawan eshandhawan51 at gmail.com
Fri Feb 5 16:56:35 UTC 2021


On Fri, Feb 5, 2021 at 7:41 PM Joel Sherrill <joel at rtems.org> wrote:

>
>
> On Wed, Feb 3, 2021 at 3:46 PM Eshan Dhawan <eshandhawan51 at gmail.com>
> wrote:
>
>> From: Eshan dhawan <eshandhawan51 at gmail.com>
>>
>> Signed-off-by: Eshan Dhawan <eshandhawan51 at 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.
>
I misunderstood that, I will correct it.

>
>
>
>
>> +
>> +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 (eshandhawan51 at 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
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20210205/329a7c0e/attachment-0001.html>


More information about the devel mailing list