[PATCH 1/2] Confstr Port for RTEMS

Gedare Bloom gedare at rtems.org
Wed Aug 12 19:07:03 UTC 2020


Chris, Christian, Sebastian:

I think it would be best if one of you may have insight on this touching libbsd.

On Wed, Aug 12, 2020 at 11:13 AM Joel Sherrill <joel at rtems.org> wrote:
>
>
> It appears that confstr is already added (with no ifdefs on RTEMS) to libbsd. We discussed that some of these cases make no sense for RTEMS and should just return the UPE (unsupported programming environment" string. We also do not have a "standard path" so shouldn't return one.
>
> But the second patch with a test is not merged.  And is not in sync with what is in confstr.c right now. There is also a spelling error.
>
> Can someone please comment on whether the unmodified BSD version of this is what we want or whether Eshan should update his patch against 6-freebsd-12 to disable the cases that don't make sense.
>
> Either way, we will need a new round of tests.
>
> --joel
>
>
> On Mon, Jul 13, 2020 at 1:10 PM Eshan dhawan <eshandhawan51 at gmail.com> wrote:
>>
>> File added to LIBBSD
>>
>> Closes #3373
>> Signed-off-by: Eshan dhawan <eshandhawan51 at gmail.com>
>> ---
>>  freebsd/lib/libc/gen/confstr.c | 127 +++++++++++++++++++++++++++++++++
>>  libbsd.py                      |   1 +
>>  2 files changed, 128 insertions(+)
>>  create mode 100644 freebsd/lib/libc/gen/confstr.c
>>
>> diff --git a/freebsd/lib/libc/gen/confstr.c b/freebsd/lib/libc/gen/confstr.c
>> new file mode 100644
>> index 00000000..653f581b
>> --- /dev/null
>> +++ b/freebsd/lib/libc/gen/confstr.c
>> @@ -0,0 +1,127 @@
>> +/*-
>> + * 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>
>> +__SCCSID("@(#)confstr.c        8.1 (Berkeley) 6/4/93");
>> +__FBSDID("$FreeBSD$");
>> +
>> +#include <sys/param.h>
>> +
>> +#include <errno.h>
>> +#include <limits.h>
>> +#include <paths.h>
>> +#include <string.h>
>> +#include <unistd.h>
>> +
>> +
>> +size_t
>> +confstr(int name, char *buf, size_t len)
>> +{
>> +       const char *p;
>> +       const char UPE[] = "unsupported programming environment";
>> +
>> +       switch (name) {
>> +#ifndef __rtems__
>> +       case _CS_PATH:
>> +               p = _PATH_STDPATH;
>> +               goto docopy;
>> +#endif
>> +               /*
>> +                * 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:
>> +               /*
>> +                * These two environments are never supported.
>> +                */
>> +               p = UPE;
>> +               goto docopy;
>> +
>> +       case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS:
>> +       case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS:
>> +       case _CS_POSIX_V6_ILP32_OFFBIG_LIBS:
>> +#ifndef __rtems__
>> +       if (sizeof(long) * CHAR_BIT == 32 &&
>> +                   sizeof(off_t) > sizeof(long))
>> +                       p = "";
>> +               else
>> +#endif
>> +                       p = UPE;
>> +               goto docopy;
>> +
>> +       case _CS_POSIX_V6_LP64_OFF64_CFLAGS:
>> +       case _CS_POSIX_V6_LP64_OFF64_LDFLAGS:
>> +       case _CS_POSIX_V6_LP64_OFF64_LIBS:
>> +#ifndef __rtems__
>> +               if (sizeof(long) * CHAR_BIT >= 64 &&
>> +                   sizeof(void *) * CHAR_BIT >= 64 &&
>> +                   sizeof(int) * CHAR_BIT >= 32 &&
>> +                   sizeof(off_t) >= sizeof(long))
>> +                       p = "";
>> +               else
>> +#endif
>> +                       p = UPE;
>> +               goto docopy;
>> +#ifndef __rtems__
>> +       case _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS:
>> +               /* XXX - should have more complete coverage */
>> +               if (sizeof(long) * CHAR_BIT >= 64)
>> +                       p = "_POSIX_V6_LP64_OFF64";
>> +               else
>> +                       p = "_POSIX_V6_ILP32_OFFBIG";
>> +               goto docopy;
>> +#endif
>> +
>> +docopy:
>> +               if (len != 0 && buf != NULL)
>> +                       strlcpy(buf, p, len);
>> +               return (strlen(p) + 1);
>> +
>> +       default:
>> +               errno = EINVAL;
>> +               return (0);
>> +       }
>> +       /* NOTREACHED */
>> +}
>> diff --git a/libbsd.py b/libbsd.py
>> index 812674a6..9beba660 100644
>> --- a/libbsd.py
>> +++ b/libbsd.py
>> @@ -2952,6 +2952,7 @@ class user_space(builder.Module):
>>                  'lib/libc/gen/getdomainname.c',
>>                  'lib/libc/gen/gethostname.c',
>>                  'lib/libc/gen/sethostname.c',
>> +                'lib/libc/gen/confstr.c',
>>                  'lib/libc/inet/inet_addr.c',
>>                  'lib/libc/inet/inet_cidr_ntop.c',
>>                  'lib/libc/inet/inet_cidr_pton.c',
>> --
>> 2.17.1
>>


More information about the devel mailing list