Skip to content

Commit

Permalink
Add MVM_dir_chdir_C_string and fix error messages for normal chdir op
Browse files Browse the repository at this point in the history
Due to an error in the code, MVM_dir_chdir would not give the correct
error number as a string back.

Before: chdir failed: Unknown system error 2
After: chdir failed: no such file or directory
  • Loading branch information
samcv committed Apr 18, 2017
1 parent deb9b48 commit 507b37b
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/io/dirops.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,18 +143,17 @@ MVMString * MVM_dir_cwd(MVMThreadContext *tc) {

return MVM_string_utf8_c8_decode(tc, tc->instance->VMString, path, strlen(path));
}

char * MVM_dir_chdir_C_string(MVMThreadContext *tc, const char *dirstring) {
return uv_chdir(dirstring);
}
/* Change directory. */
void MVM_dir_chdir(MVMThreadContext *tc, MVMString *dir) {
char * const dirstring = MVM_string_utf8_c8_encode_C_string(tc, dir);

if (uv_chdir((const char *)dirstring) != 0) {
int chdir_error = errno;
MVM_free(dirstring);
const char *dirstring = MVM_string_utf8_c8_encode_C_string(tc, dir);
int chdir_error = MVM_dir_chdir_C_string(tc, dirstring);
if (chdir_error) {

This comment has been minimized.

Copy link
@zhuomingliang

zhuomingliang Apr 19, 2017

Member

Here misses MVM_free((void*)dirstring); beforeMVM_exception_throw_adhoc, which will lead to a memory leak. or just move MVM_free((void*)dirstring); to before if (chdir_error) {

This comment has been minimized.

Copy link
@samcv

samcv Apr 19, 2017

Author Member

Thanks 👍

MVM_exception_throw_adhoc(tc, "chdir failed: %s", uv_strerror(chdir_error));
}

MVM_free(dirstring);
MVM_free((void*)dirstring);
}

/* Structure to keep track of directory iteration state. */
Expand Down
1 change: 1 addition & 0 deletions src/io/dirops.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ MVMObject * MVM_dir_open(MVMThreadContext *tc, MVMString *dirname);
MVMString * MVM_dir_read(MVMThreadContext *tc, MVMObject *oshandle);
void MVM_dir_close(MVMThreadContext *tc, MVMObject *oshandle);
MVMString * MVM_dir_cwd(MVMThreadContext *tc);
char * MVM_dir_chdir_C_string(MVMThreadContext *tc, const char *dirstring);
void MVM_dir_chdir(MVMThreadContext *tc, MVMString *dir);

0 comments on commit 507b37b

Please sign in to comment.