libc: Add support for mkdir()

This commit is contained in:
apio 2022-10-16 17:37:29 +02:00
parent f35bbe52b7
commit 6d821d2638
6 changed files with 46 additions and 3 deletions

View File

@ -3,6 +3,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <unistd.h>
@ -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;
}

View File

@ -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

View File

@ -0,0 +1,18 @@
#ifndef _SYS_STAT_H
#define _SYS_STAT_H
#include <sys/types.h>
#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

View File

@ -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

View File

@ -0,0 +1,11 @@
#include <sys/stat.h>
#include <sys/syscall.h>
#include <unistd.h>
extern "C"
{
int mkdir(const char* pathname, mode_t)
{
return (int)syscall(SYS_mkdir, pathname);
}
}

View File

@ -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: {