diff --git a/kernel/include/std/errno.h b/kernel/include/std/errno.h index a3e79b13..2ff1a8f8 100644 --- a/kernel/include/std/errno.h +++ b/kernel/include/std/errno.h @@ -16,5 +16,6 @@ #define EMFILE 24 #define ENOTTY 25 #define ENOSPC 28 +#define ERANGE 36 #define ENOSYS 38 #define ENOTSUP 95 \ No newline at end of file diff --git a/libs/libc/include/errno.h b/libs/libc/include/errno.h index afa20aef..6fe5b4f6 100644 --- a/libs/libc/include/errno.h +++ b/libs/libc/include/errno.h @@ -21,6 +21,7 @@ extern int errno; #define ENOTTY 25 // Inappropriate ioctl for device #define ENOSPC 28 // No space left on device #define EPIPE 32 // Broken pipe. Not implemented. +#define ERANGE 34 // Numerical result out of range #define ENOSYS 38 // Function not implemented #define ENOTSUP 95 // Operation not supported diff --git a/libs/libc/include/unistd.h b/libs/libc/include/unistd.h index 942302ca..9e3fe966 100644 --- a/libs/libc/include/unistd.h +++ b/libs/libc/include/unistd.h @@ -69,6 +69,9 @@ extern "C" /* Checks if the file descriptor fd refers to a terminal. */ int isatty(int fd); + /* Writes the current process's current working directory to buf. */ + char* getcwd(char* buf, size_t size); + #ifdef __cplusplus } #endif diff --git a/libs/libc/src/string.cpp b/libs/libc/src/string.cpp index 85106fd1..cb57c0af 100644 --- a/libs/libc/src/string.cpp +++ b/libs/libc/src/string.cpp @@ -274,6 +274,7 @@ extern "C" case ENOTTY: return "Inappropriate ioctl for device"; case ENOSPC: return "No space left on device"; case EPIPE: return "Broken pipe"; + case ERANGE: return "Numerical result out of range"; case ENOSYS: return "Function not implemented"; case ENOTSUP: return "Operation not supported"; case 0: return "Success"; diff --git a/libs/libc/src/unistd.cpp b/libs/libc/src/unistd.cpp index 2f64ef22..443b2636 100644 --- a/libs/libc/src/unistd.cpp +++ b/libs/libc/src/unistd.cpp @@ -1,5 +1,8 @@ +#include #include #include +#include +#include #include #include @@ -81,4 +84,16 @@ extern "C" if (result < 0) return 0; return 1; } + + char* getcwd(char* buf, size_t size) + { + const char* dummy_cwd = "/"; // FIXME: Actually retrieve the current working directory from the kernel. + if (size < 2) + { + errno = ERANGE; + return NULL; + } + if (!buf) { buf = (char*)malloc(size); } + strlcpy(buf, dummy_cwd, 2); + } } \ No newline at end of file