diff --git a/apps/src/init.c b/apps/src/init.c index f83fd1f7..d46dc841 100644 --- a/apps/src/init.c +++ b/apps/src/init.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -137,13 +138,21 @@ int main() return 1; } - fprintf(new_stderr, "Bye!\n"); + fprintf(new_stderr, "Bye!\n\n"); fclose(new_stderr); - execv("/bin/sym", NULL); + const char* pathname = "/etc"; - perror("execv"); // If we're here, execv failed + printf("Creating directory %s\n", pathname); + + if (mkdir(pathname, 0) < 0) + { + perror("mkdir"); + return 1; + } + + printf("Success!!"); return 1; } diff --git a/libs/libc/include/luna/syscall.h b/libs/libc/include/luna/syscall.h index 6d92d320..a6a86df5 100644 --- a/libs/libc/include/luna/syscall.h +++ b/libs/libc/include/luna/syscall.h @@ -17,6 +17,7 @@ #define SYS_fcntl 13 #define SYS_mprotect 14 #define SYS_clock 15 +#define SYS_mkdir 17 #ifndef __want_syscalls #ifdef __cplusplus diff --git a/libs/libc/include/sys/stat.h b/libs/libc/include/sys/stat.h new file mode 100644 index 00000000..c7813d10 --- /dev/null +++ b/libs/libc/include/sys/stat.h @@ -0,0 +1,18 @@ +#ifndef _SYS_STAT_H +#define _SYS_STAT_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* Creates a new directory at the path pathname. FIXME: For now, mode is ignored. */ + int mkdir(const char* pathname, mode_t mode); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/libs/libc/include/sys/types.h b/libs/libc/include/sys/types.h index 5c96ba2a..421f1e45 100644 --- a/libs/libc/include/sys/types.h +++ b/libs/libc/include/sys/types.h @@ -13,4 +13,7 @@ typedef long int ssize_t; /* The type of an offset into a file. */ typedef long int off_t; +/* The type of a file's mode. */ +typedef unsigned short mode_t; + #endif \ No newline at end of file diff --git a/libs/libc/src/sys/stat.cpp b/libs/libc/src/sys/stat.cpp new file mode 100644 index 00000000..9249739d --- /dev/null +++ b/libs/libc/src/sys/stat.cpp @@ -0,0 +1,11 @@ +#include +#include +#include + +extern "C" +{ + int mkdir(const char* pathname, mode_t) + { + return (int)syscall(SYS_mkdir, pathname); + } +} \ No newline at end of file diff --git a/libs/libc/src/unistd.cpp b/libs/libc/src/unistd.cpp index 86ac5df3..6e5d4490 100644 --- a/libs/libc/src/unistd.cpp +++ b/libs/libc/src/unistd.cpp @@ -38,6 +38,7 @@ extern "C" case SYS_exit: case SYS_close: case SYS_exec: + case SYS_mkdir: case SYS_sleep: result = __luna_syscall1(number, va_arg(ap, arg)); break; case SYS_munmap: case SYS_open: {