blob: fd8464207d304511ee2fa2e01d9a7bfa7117ac0d [file] [log] [blame]
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <syscall_server.h>
void translate_stat(struct stat* native, struct newlib_stat* newlib) {
newlib->st_dev = native->st_dev;
newlib->st_ino = native->st_ino;
newlib->st_mode = native->st_mode;
newlib->st_nlink = native->st_nlink;
newlib->st_uid = native->st_uid;
newlib->st_gid = native->st_gid;
newlib->st_rdev = native->st_rdev;
newlib->st_size = native->st_size;
newlib->st_atim = native->st_atim.tv_nsec;
newlib->st_mtim = native->st_mtim.tv_nsec;
newlib->st_ctim = native->st_ctim.tv_nsec;
newlib->st_blksize = native->st_blksize;
newlib->st_blocks = native->st_blocks;
}
int translate_flags(int newlib_flags) {
int native_flags = 0;
if (newlib_flags & NEWLIB_O_RDONLY) {
native_flags |= O_RDONLY;
newlib_flags &= ~NEWLIB_O_RDONLY;
}
if (newlib_flags & NEWLIB_O_WRONLY) {
native_flags |= O_WRONLY;
newlib_flags &= ~NEWLIB_O_WRONLY;
}
if (newlib_flags & NEWLIB_O_RDWR) {
native_flags |= O_RDWR;
newlib_flags &= ~NEWLIB_O_RDWR;
}
if (newlib_flags & NEWLIB_O_APPEND) {
native_flags |= O_APPEND;
newlib_flags &= ~NEWLIB_O_APPEND;
}
if (newlib_flags & NEWLIB_O_CREAT) {
native_flags |= O_CREAT;
newlib_flags &= ~NEWLIB_O_CREAT;
}
if (newlib_flags & NEWLIB_O_TRUNC) {
native_flags |= O_TRUNC;
newlib_flags &= ~NEWLIB_O_TRUNC;
}
if (newlib_flags & NEWLIB_O_EXCL) {
native_flags |= O_EXCL;
newlib_flags &= ~NEWLIB_O_EXCL;
}
if(newlib_flags != 0)
fprintf(stderr, "Warning: unsupported newlib flags passed to syscall...\n");
return native_flags;
}
int translate_mode(int newlib_mode) {
int native_mode = 0;
if (newlib_mode & NEWLIB_S_IRUSR) {
native_mode |= S_IRUSR;
newlib_mode &= ~NEWLIB_S_IRUSR;
}
if (newlib_mode & NEWLIB_S_IWUSR) {
native_mode |= S_IWUSR;
newlib_mode &= ~NEWLIB_S_IWUSR;
}
if (newlib_mode & NEWLIB_S_IXUSR) {
native_mode |= S_IXUSR;
newlib_mode &= ~NEWLIB_S_IXUSR;
}
if (newlib_mode & NEWLIB_S_IRGRP) {
native_mode |= S_IRGRP;
newlib_mode &= ~NEWLIB_S_IRGRP;
}
if (newlib_mode & NEWLIB_S_IWGRP) {
native_mode |= S_IWGRP;
newlib_mode &= ~NEWLIB_S_IWGRP;
}
if (newlib_mode & NEWLIB_S_IXGRP) {
native_mode |= S_IXGRP;
newlib_mode &= ~NEWLIB_S_IXGRP;
}
if (newlib_mode & NEWLIB_S_IROTH) {
native_mode |= S_IROTH;
newlib_mode &= ~NEWLIB_S_IROTH;
}
if (newlib_mode & NEWLIB_S_IWOTH) {
native_mode |= S_IWOTH;
newlib_mode &= ~NEWLIB_S_IWOTH;
}
if (newlib_mode & NEWLIB_S_IXOTH) {
native_mode |= S_IXOTH;
newlib_mode &= ~NEWLIB_S_IXOTH;
}
if(newlib_mode != 0)
fprintf(stderr, "Warning: unsupported newlib mode passed to syscall...\n");
return native_mode;
}
int translate_whence(int newlib_whence) {
int native_whence = 0;
if (newlib_whence == NEWLIB_SEEK_SET)
native_whence = SEEK_SET;
else if (newlib_whence == NEWLIB_SEEK_CUR)
native_whence = SEEK_CUR;
else if (newlib_whence == NEWLIB_SEEK_END)
native_whence = SEEK_END;
return native_whence;
}