i guess it's possible to implement it similarly to what we do for errno. eg. # define environ (*get_environ_ptr_ptr())
although it still isn't quite posix compatible, it might be good enough for many applications. whatever approach we take, it probably requires some extra validations in the kernel. (ie. untrust the pointer as it might be user-given now.) On Tue, Nov 5, 2024 at 5:22 PM Marco Casaroli <marco.casar...@midokura.com.invalid> wrote: > > Hello, > > I am sorry if this was already discussed before. I could not find > concrete information in the documentation or the mailing list history. > > According to POSIX specifications [1]: > > > The array is pointed to by the external variable environ, which is defined > > as: > > > > extern char **environ; > > But in NuttX, it is defined differently [2], when > CONFIG_DISABLE_ENVIRON is not set, like: > > > # define environ get_environ_ptr() > > Which calls a function [3] and gets its result. This gives problems if > the apps try to do things like: > > > environ = ...; > > Which is, in fact, fairly common [4, 5, 6]. > > So I have two questions: > > 1. What is the cleanest way to work around the environment update > these apps are trying to do? What are the changes I should make to the > app code so that it can correctly handle setting the environment? > > 2. Is there any way we can update NuttX to actually define environ > like POSIX specifies, so that we can handle these apps without > modifications? > > Thank you very much. > > BR > > // Marco Casaroli > > [1] > https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/basedefs/V1_chap08.html > [2] > https://github.com/apache/nuttx/blob/0fad2ee73f5431cbe34cc02253909f290938cd12/include/stdlib.h#L70 > [3] > https://github.com/apache/nuttx/blob/0fad2ee73f5431cbe34cc02253909f290938cd12/sched/environ/env_getenvironptr.c#L57 > [4] > https://github.com/landley/toybox/blob/c47184b389d5bf97135afbf55aa4a41bc29812eb/lib/env.c#L29 > [5] > https://github.com/landley/toybox/blob/c47184b389d5bf97135afbf55aa4a41bc29812eb/toys/pending/sh.c#L1379 > [6] > https://github.com/mirror/busybox/blob/371fe9f71d445d18be28c82a2a6d82115c8af19d/shell/ash.c#L10574