>> On 18 Mar 2025, at 12:08, Richard Biener <richard.guent...@gmail.com> wrote:
>> 
>> On Tue, Mar 18, 2025 at 1:07 PM Iain Sandoe <i...@sandoe.co.uk> wrote:
>>> 
>>> 
>>> 
>>>> On 18 Mar 2025, at 12:01, Richard Biener <richard.guent...@gmail.com> 
>>>> wrote:
>>>> 
>>>> On Tue, Mar 18, 2025 at 12:13 PM Iain Sandoe <iains....@gmail.com> wrote:
>>>>> 
>>>>> tested on x86_64/aarch64 Linux and x86_64-darwin, OK for trunk?
>>>>> thanks
>>>>> Iain
>>>>> 
>>>>> --- 8< ---
>>>>> 
>>>>> This adds a configure check for get_current_dir_name and falls back
>>>>> to getcwd() if it is not available on the host.
>>>>> 
>>>>>       PR cobol/119301
>>>>> 
>>>>> gcc/cobol/ChangeLog:
>>>>> 
>>>>>       * util.cc: Check for the availability of get_current_dir_name
>>>>>       and fall back to getcwd() if it is not present on the host.
>>>>> 
>>>>> gcc/ChangeLog:
>>>>> 
>>>>>       * config.in: Regenerate.
>>>>>       * configure: Regenerate.
>>>>>       * configure.ac: Add check for get_current_dir_name.
>>>>> 
>>>>> Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
>>>>> ---
>>>>> gcc/cobol/util.cc | 9 +++++++++
>>>>> gcc/config.in     | 6 ++++++
>>>>> gcc/configure     | 2 +-
>>>>> gcc/configure.ac  | 2 +-
>>>>> 4 files changed, 17 insertions(+), 2 deletions(-)
>>>>> 
>>>>> diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
>>>>> index 9f746a38808..ecef10190eb 100644
>>>>> --- a/gcc/cobol/util.cc
>>>>> +++ b/gcc/cobol/util.cc
>>>>> @@ -72,6 +72,15 @@ extern int yyparse(void);
>>>>> 
>>>>> extern int demonstration_administrator(int N);
>>>>> 
>>>>> +#if !defined (HAVE_GET_CURRENT_DIR_NAME)
>>>>> +static inline char *
>>>>> +get_current_dir_name ()
>>>>> +{
>>>>> +  /* Fall back to getcwd which is also present in libiberty.  */
>>>>> +  return getcwd (nullptr, 0);
>>>> 
>>>> Isn't that getcwd allocates the storage an extension?
>>> 
>>> Hmm.. indeed Posix:
>>> 
>>> "The size argument is the size in bytes of the character array
>>> pointed to by the buf argument. If buf is a null pointer, the
>>> behavior of getcwd() is unspecified."
>>> 
>>> and Linux and Darwin differ (Darwin does allocate, Linux does not).
>>> 
>>>> I see libiberty
>>>> also does this, but IIRC that copy isn't used if the system provides it?
>>> 
>>> Maybe we need a libiberty implementation of get_current_dir_name()
>>> which does the same as the Linux one (and actually the same as the
>>> Darwin getcwd).
>>> 
>>> Open to suggestions ..
>> 
>> char *buf = malloc  (PATH_MAX);
>> return getcwd (buf, PATH_MAX);
>> 
>> ?
>
> I’m fine with that - providing we have an expectation that PATH_MAX
> will be available (with a suitable header include).
> I’ll do some grepping for existing practice.

Note that PATH_MAX is not defined in GNU/Hurd.

You can do something like:

#if defined(__GNU__)
  /* The Hurd doesn't define PATH_MAX.  */
# define PATH_MAX 4096
#endif

Reply via email to