On Thu, Jul 30, 2020 at 11:52 AM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > On 30/07/2020 18:05, Gedare Bloom wrote: > > > On Thu, Jul 30, 2020 at 9:55 AM Sebastian Huber > > <sebastian.hu...@embedded-brains.de> wrote: > >> On 30/07/2020 17:53, Gedare Bloom wrote: > >> > >>> On Thu, Jul 30, 2020 at 9:44 AM Sebastian Huber > >>> <sebastian.hu...@embedded-brains.de> wrote: > >>>> On 30/07/2020 13:36, Aschref Ben-Thabet wrote: > >>>> > >>>>> diff --git a/testsuites/psxtests/psxndbm01/init.c > >>>>> b/testsuites/psxtests/psxndbm01/init.c > >>>>> index a13afa7315..b524aff0df 100644 > >>>>> --- a/testsuites/psxtests/psxndbm01/init.c > >>>>> +++ b/testsuites/psxtests/psxndbm01/init.c > >>>>> @@ -218,7 +218,7 @@ rtems_task Init(rtems_task_argument ignored) > >>>>> > >>>>> puts( "Fetch non-existing record and confirm error." ); > >>>>> test_strings = (char*)malloc(6); > >>>>> - strncpy( test_strings, "Hello", 5 ); > >>>>> + memcpy( test_strings, "Hello", 5 ); > >>>>> > >>>>> test_strings[5] = '\0'; > >>>> In the glibc devel list this approach was suggested for problems like > >>>> this: > >>>> > >>>> *(char *) mempcpy( test_strings, "Hello", 5 ) = '\0'; > >>>> > >>>> https://sourceware.org/legacy-ml/libc-alpha/2000-08/msg00061.html > >>>> > >>> This code is suspect/wrong. that should create a NUL at the start of > >>> the test_strings. I'd rather see the memcpy followed by appending the > >>> NUL. It is easy enough to understand I think. > >> Yes, this was also my impression then I did read this code snippet. > >> Please note that this is memPcpy(), a GNU extension. > > thanks, I had missed that. > > > > I don't think there is an easy generalized way to do the delimiting > > with the standard memcpy. You could do it in one line, if we really > > wanted something like: > > > > ((char *) memcpy (test_strings, "Hello", 5 ))[5] = '\0'; > > > > We could even create a little helper to do it if it is a common pattern. > > The mempcpy() is also available in Newlib. > > The only thing I know is that strncpy() is a useless function. With the > new GCC warnings it is nearly impossible to use correctly. This function > is an historic accident. > > There are several ways to fix the warnings and I think there is no clear > direction. We basically have the option to use the OpenBSD invented > strlcpy() and strlcat() functions or some sort of memcpy() and > mempcpy(). I think the OpenBSD philosophy is that if you put something > in the strl*() and then at least a C-string is created. This may help to > contain software bugs a bit and hinder error propagation. The glibc > developer philosophy is probably that they only care about correct code > and if you make mistakes that you can go to hell. >
I'd prefer strl* when it is specifically two strings being manipulated so that we can leverage the (limited) type checking. The mempcpy could be used when assembling several strings to optimize slightly. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel