[PATCH v8] Confstr support for RTEMS

Gedare Bloom gedare at rtems.org
Thu Mar 4 06:04:56 UTC 2021


This is reduced/modified from the upstream, I see a little bit of
style problems where neither RTEMS nor BSD style are used. I suggest
double checking the style and consider the maintenance burden, whether
we think this would need an update in the future or not. I did not
open freebsd to compare the source, personally.

On Wed, Mar 3, 2021 at 4:29 PM Joel Sherrill <joel at rtems.org> wrote:
>
> Does anyone object to this? There were no comments and I will shortly merge this if no one speaks up
>
> On Mon, Feb 8, 2021 at 10:26 AM Eshan Dhawan <eshandhawan51 at gmail.com> wrote:
>>
>> From: Eshan dhawan <eshandhawan51 at gmail.com>
>>
>> Closes #3373
>>
>> Signed-off-by: Eshan Dhawan <eshandhawan51 at gmail.com>
>> ---
>>  cpukit/Makefile.am                            |   1 +
>>  cpukit/posix/src/confstr.c                    | 151 ++++++++++++++++++
>>  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         |  97 +++++++++++
>>  testsuites/psxtests/psxconfstr/psxconfstr.doc |  17 ++
>>  testsuites/psxtests/psxconfstr/psxconfstr.scn |   4 +
>>  10 files changed, 303 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..5f18f78096
>> --- /dev/null
>> +++ b/cpukit/posix/src/confstr.c
>> @@ -0,0 +1,151 @@
>> +/*-
>> + * 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$");
>> +
>> +#include <sys/param.h>
>> +
>> +#include <errno.h>
>> +#include <limits.h>
>> +#include <string.h>
>> +#include <unistd.h>
>> +
>> +/* Many programming environment flags have same values
>> +* this block is added to raise error if the flags value change
>> +*/
>> +
>> +#if (_CS_POSIX_V6_ILP32_OFF32_CFLAGS != _CS_POSIX_V7_ILP32_OFF32_CFLAGS)
>> +#error "_CS_POSIX_V6_ILP32_OFF32_CFLAGS and _CS_POSIX_V7_ILP32_OFF32_CFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_ILP32_OFF32_LDFLAGS != _CS_POSIX_V7_ILP32_OFF32_LDFLAGS)
>> +#error "_CS_POSIX_V6_ILP32_OFF32_LDFLAGS and _CS_POSIX_V7_ILP32_OFF32_LDFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_ILP32_OFF32_LIBS!= _CS_POSIX_V7_ILP32_OFF32_LIBS)
>> +#error "_CS_POSIX_V6_ILP32_OFF32_LIBS and _CS_POSIX_V7_ILP32_OFF32_LIBS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS != _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS)
>> +#error "_CS_POSIX_V6_LPBIG_OFFBIG_CFLAG and _CS_POSIX_V7_LPBIG_OFFBIG_CFLAG flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS != _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS)
>> +#error "_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS and _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V7_LPBIG_OFFBIG_LIBS != _CS_POSIX_V7_LPBIG_OFFBIG_LIBS)
>> +#error "_CS_POSIX_V6_LPBIG_OFFBIG_LIBS and _CS_POSIX_V7_LPBIG_OFFBIG_LIBS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS != _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS)
>> +#error "_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS and _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS != _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS)
>> +#error "_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS and _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V7_ILP32_OFFBIG_LIBS != _CS_POSIX_V7_ILP32_OFFBIG_LIBS)
>> +#error "_CS_POSIX_V6_ILP32_OFFBIG_LIBS and _CS_POSIX_V7_ILP32_OFFBIG_LIBS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_LP64_OFF64_CFLAGS != _CS_POSIX_V7_LP64_OFF64_CFLAGS)
>> +#error "_CS_POSIX_V6_LP64_OFF64_CFLAGS and _CS_POSIX_V7_LP64_OFF64_CFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V6_LP64_OFF64_LDFLAGS != _CS_POSIX_V7_LP64_OFF64_LDFLAGS)
>> +#error "_CS_POSIX_V6_LP64_OFF64_LDFLAGS and _CS_POSIX_V7_LP64_OFF64_LDFLAGS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_POSIX_V7_LP64_OFF64_LIBS != _CS_POSIX_V7_LP64_OFF64_LIBS)
>> +#error "_CS_POSIX_V6_LP64_OFF64_LIBS and _CS_POSIX_V7_LP64_OFF64_LIBS flag values not equal"
>> +#endif
>> +
>> +#if (_CS_V6_ENV != _CS_V7_ENV)
>> +#error "_CS_V6_ENV and _CS_V7_ENV flag values not equal"
>> +#endif
>> +
>> +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_V7_ILP32_OFF32_CFLAGS:
>> +    case _CS_POSIX_V7_ILP32_OFF32_LDFLAGS:
>> +    case _CS_POSIX_V7_ILP32_OFF32_LIBS:
>> +    case _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS:
>> +    case _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS:
>> +    case _CS_POSIX_V7_LPBIG_OFFBIG_LIBS:
>> +    case _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS:
>> +    case _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS:
>> +    case _CS_POSIX_V7_ILP32_OFFBIG_LIBS:
>> +    case _CS_POSIX_V7_LP64_OFF64_CFLAGS:
>> +    case _CS_POSIX_V7_LP64_OFF64_LDFLAGS:
>> +    case _CS_POSIX_V7_LP64_OFF64_LIBS:
>> +    case _CS_V7_ENV:
>> +
>> +
>> +      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..31c6e8a476
>> --- /dev/null
>> +++ b/testsuites/psxtests/psxconfstr/init.c
>> @@ -0,0 +1,97 @@
>> +/* SPDX-License-Identifier: BSD-2-Clause */
>> +
>> +/**
>> + *  @file
>> + *  @brief Test suite for confstr method
>> + */
>> +
>> +/*
>> + * Copyright (C) 2020 Eshan Dhawan
>> + *
>> + * 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 <unistd.h>
>> +
>> +#include <rtems/test.h>
>> +#include <rtems/test-info.h>
>> +
>> +const char rtems_test_name[] = "PSXCONFSTR";
>> +
>> +/* 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);
>> +
>> +}
>> +
>> +static rtems_task Init(rtems_task_argument ignored)
>> +{
>> +  rtems_test_run(ignored, TEST_STATE);
>> +}
>> +#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 at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list