diff options
Diffstat (limited to 'src/lib/libkogata/unistd.c')
-rw-r--r-- | src/lib/libkogata/unistd.c | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/src/lib/libkogata/unistd.c b/src/lib/libkogata/unistd.c deleted file mode 100644 index 101e02e..0000000 --- a/src/lib/libkogata/unistd.c +++ /dev/null @@ -1,67 +0,0 @@ -#include <string.h> - -#include <syscall.h> - -#include <unistd.h> - - -char cwd_buf[256]; - -char* getcwd(char* buf, size_t buf_len) { - if (buf_len > strlen(cwd_buf)) { - strcpy(buf, cwd_buf); - return buf; - } else { - return 0; - } -} - -int chdir(const char* path) { - char cwd_buf2[256]; - strcpy(cwd_buf2, cwd_buf); - - if (!pathncat(cwd_buf2, path, 256)) return -1; - - stat_t st; - if (!stat(cwd_buf2, &st)) return -1; - if (!(st.type & FT_DIR)) return -1; - - strcpy(cwd_buf, cwd_buf2); - return 0; -} - -char* pathncat(char* buf, const char* add, size_t buf_len) { - if (strchr(add, ':')) { - if (strlen(add) < buf_len) { - strcpy(buf, add); - return buf; - } else { - return 0; - } - } else { - char* sep_init = strchr(buf, ':'); - if (add[0] == '/') { - if (strlen(add) + (sep_init + 1 - buf) < buf_len) { - strcpy(sep_init + 1, add); - return buf; - } else { - return 0; - } - } else { - //TODO: simplify '..' - char* end = buf + strlen(buf) - 1; - if (*end != '/') end++; - if (end + 1 - buf + strlen(add) < buf_len) { - *end = '/'; - strcpy(end + 1, add); - return buf; - } else { - return 0; - } - } - return 0; - } -} - - -/* vim: set ts=4 sw=4 tw=0 noet :*/ |