STRING * Parrot_getenv(PARROT_INTERP, ARGIN(STRING *str_name)) { char * const name = Parrot_str_to_cstring(interp, str_name); const DWORD size = GetEnvironmentVariable(name, NULL, 0); char *buffer = NULL; STRING *retv; if (size == 0) { Parrot_str_free_cstring(name); return NULL; } buffer = (char *)mem_sys_allocate(size); GetEnvironmentVariable(name, buffer, size); Parrot_str_free_cstring(name); retv = Parrot_str_from_platform_cstring(interp, buffer); mem_sys_free(buffer); return retv; }
PARROT_CANNOT_RETURN_NULL STRING * Parrot_file_getcwd(PARROT_INTERP) { STRING *result; char *c_str; #ifdef PATH_MAX c_str = getcwd(NULL, PATH_MAX+1); #else c_str = getcwd(NULL, 0); #endif if (c_str == NULL) THROW("getcwd"); result = Parrot_str_from_platform_cstring(interp, c_str); free(c_str); return result; }