Compare commits

...

2 Commits

Author SHA1 Message Date
6d821d2638 libc: Add support for mkdir() 2022-10-16 17:37:29 +02:00
f35bbe52b7 fnctl: Do not switch on cmd 2022-10-16 17:27:15 +02:00
7 changed files with 48 additions and 9 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

@ -1,5 +1,6 @@
#include <fcntl.h>
#include <stdarg.h>
#include <stdint.h>
#include <sys/syscall.h>
#include <unistd.h>
@ -14,12 +15,7 @@ extern "C"
{
va_list ap;
va_start(ap, cmd);
long result;
switch (cmd)
{
case F_DUPFD: result = syscall(SYS_fcntl, fd, cmd, va_arg(ap, int)); break;
default: result = syscall(SYS_fcntl, fd, cmd, 0); break;
}
long result = syscall(SYS_fcntl, fd, cmd, va_arg(ap, uintptr_t));
va_end(ap);
return (int)result;
}

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