The manual page for getcwd says:
If buf is a NULL pointer, getcwd() obtains size bytes of space using
malloc() (see malloc(3C)). In this case, the pointer returned by
getcwd() can be used as the argument in a subsequent call to free()
(see malloc(3C)). Invoking getcwd() with buf as a null pointer is not
recommended because this functionality may be removed from the HP-UX
operating system in a future release.
It therefore looks like 'getcwd (NULL, 0)' might work from this, but
in fact returns [EINTVAL] The size of the argument is zero.
I've therefore changed it to use an automatic variable (which assumes
that PATH_MAX is constant to conform to c89) and removed the free.
Failing that, the code can be preserved as it is, but replace size
with PATH_MAX+1 (although as the manual page says, this may not
continue to work).
With this and r10855, os.t will pass on HP-UX.
Regards,
Nick
Cheers.
Alberto
> ------------------------------------------------------------------------
>
> Index: src/classes/os.pmc
> ===================================================================
> --- src/classes/os.pmc (revision 10861)
> +++ src/classes/os.pmc (working copy)
> @@ -61,11 +61,12 @@
>
> METHOD STRING* cwd() {
> #ifndef _MSC_VER
> - STRING *scwd;
> - char * cwd = getcwd(NULL, 0);
> + char buf[PATH_MAX+1];
> +
> + char * cwd = getcwd(buf, PATH_MAX+1);
> +
> if (cwd) {
> - scwd = string_from_cstring(interpreter, cwd, strlen(cwd));
> - mem_sys_free(cwd);
> + STRING *scwd = string_from_cstring(interpreter, cwd, strlen(cwd));
> return scwd;
> } else {
> char *errmsg = strerror(errno);
>
>
--
Alberto Simões - Departamento de Informática - Universidade do Minho
Campus de Gualtar - 4710-057 Braga - Portugal