#include <defs.h>
|
|
#include <string.h>
|
|
#include <syscall.h>
|
|
#include <stdio.h>
|
|
#include <stat.h>
|
|
#include <error.h>
|
|
#include <unistd.h>
|
|
|
|
int
|
|
open(const char *path, uint32_t open_flags) {
|
|
return sys_open(path, open_flags);
|
|
}
|
|
|
|
int
|
|
close(int fd) {
|
|
return sys_close(fd);
|
|
}
|
|
|
|
int
|
|
read(int fd, void *base, size_t len) {
|
|
return sys_read(fd, base, len);
|
|
}
|
|
|
|
int
|
|
write(int fd, void *base, size_t len) {
|
|
return sys_write(fd, base, len);
|
|
}
|
|
|
|
int
|
|
seek(int fd, off_t pos, int whence) {
|
|
return sys_seek(fd, pos, whence);
|
|
}
|
|
|
|
int
|
|
fstat(int fd, struct stat *stat) {
|
|
return sys_fstat(fd, stat);
|
|
}
|
|
|
|
int
|
|
fsync(int fd) {
|
|
return sys_fsync(fd);
|
|
}
|
|
|
|
int
|
|
dup2(int fd1, int fd2) {
|
|
return sys_dup(fd1, fd2);
|
|
}
|
|
|
|
static char
|
|
transmode(struct stat *stat) {
|
|
uint32_t mode = stat->st_mode;
|
|
if (S_ISREG(mode)) return 'r';
|
|
if (S_ISDIR(mode)) return 'd';
|
|
if (S_ISLNK(mode)) return 'l';
|
|
if (S_ISCHR(mode)) return 'c';
|
|
if (S_ISBLK(mode)) return 'b';
|
|
return '-';
|
|
}
|
|
|
|
void
|
|
print_stat(const char *name, int fd, struct stat *stat) {
|
|
cprintf("[%03d] %s\n", fd, name);
|
|
cprintf(" mode : %c\n", transmode(stat));
|
|
cprintf(" links : %lu\n", stat->st_nlinks);
|
|
cprintf(" blocks : %lu\n", stat->st_blocks);
|
|
cprintf(" size : %lu\n", stat->st_size);
|
|
}
|
|
|