diff --git a/libports/src/lib/libc/plugin.cc b/libports/src/lib/libc/plugin.cc index 522775d5f..bfa48daa0 100644 --- a/libports/src/lib/libc/plugin.cc +++ b/libports/src/lib/libc/plugin.cc @@ -110,6 +110,18 @@ bool Plugin::supports_unlink(const char*) return false; } +/** + * Default implementations + */ + +int Plugin::chdir(const char *path) +{ + Libc::File_descriptor *fd = open(path, 0 /* no rights necessary */); + bool success = ((fd != NULL) + and (fchdir(fd) == 0) + and (close(fd) == 0)); + return success ? 0 : -1; +} /** * Generate dummy member function of Plugin class @@ -161,7 +173,6 @@ DUMMY(ssize_t, -1, write, (File_descriptor *, const void *, ::size_t)); /* * Misc */ -DUMMY(int, -1, chdir, (const char*)); DUMMY(void, , freeaddrinfo, (struct ::addrinfo *)); DUMMY(int, -1, getaddrinfo, (const char *, const char *, const struct ::addrinfo *, struct ::addrinfo **)); DUMMY(int, -1, mkdir, (const char*, mode_t)); diff --git a/ports/src/lib/libc_noux/plugin.cc b/ports/src/lib/libc_noux/plugin.cc index c68001f55..e8e7834a3 100644 --- a/ports/src/lib/libc_noux/plugin.cc +++ b/ports/src/lib/libc_noux/plugin.cc @@ -331,6 +331,7 @@ namespace { _stderr(Libc::file_descriptor_allocator()->alloc(this, noux_context(2), 2)) { } + bool supports_chdir(const char *) { return true; } bool supports_open(const char *, int) { return true; } bool supports_stat(const char *) { return true; }