>> 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