This tidy patch makes cwd work on HP-UX. As it stands at the moment it gives an 'invalid argument' exception (although it gave a more meaningful message earlier this morning).
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
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);