PARROT_CANNOT_RETURN_NULL STRING * Parrot_file_getcwd(PARROT_INTERP) { DWORD len = GetCurrentDirectoryW(0, NULL); STRING *result; char *c_str; if (!len) THROW("getcwd"); c_str = mem_gc_allocate_n_typed(interp, (len + 1) * 2, char); len = GetCurrentDirectoryW(len, (LPWSTR)c_str); if (!len) { mem_gc_free(interp, c_str); THROW("getcwd"); } result = Parrot_str_new_init(interp, c_str, len * 2, Parrot_utf16_encoding_ptr, 0); mem_gc_free(interp, c_str); return result; }
void Parrot_deinit_encodings(PARROT_INTERP) { ASSERT_ARGS(Parrot_deinit_encodings) mem_gc_free(interp, encodings); encodings = NULL; n_encodings = 0; }