123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include <bits/errno.h>
- #include <bits/fcntl.h>
- #include <bits/time.h>
- #include <syscall.h>
- /* File path ops, stuff that mostly deals with directories. */
- inline static long sys_chdir(const char* path)
- {
- return syscall1(NR_chdir, (long)path);
- }
- inline static long sys_fchdir(int fd)
- {
- return syscall1(NR_fchdir, fd);
- }
- inline static long sys_getcwd(char* buf, size_t size)
- {
- return syscall2(NR_getcwd, (long)buf, size);
- }
- inline static long sys_chroot(const char* dir)
- {
- return syscall1(NR_chroot, (long)dir);
- }
- inline static long sys_mkdir(const char* path, int mode)
- {
- return syscall3(NR_mkdirat, AT_FDCWD, (long)path, mode);
- }
- inline static long sys_mkdirat(int at, const char* path, int mode)
- {
- return syscall3(NR_mkdirat, at, (long)path, mode);
- }
- inline static long sys_mknod(const char* path, int mode, int dev)
- {
- return syscall4(NR_mknodat, AT_FDCWD, (long)path, mode, dev);
- }
- inline static long sys_mknodat(int at, const char* path, int mode, int dev)
- {
- return syscall4(NR_mknodat, at, (long)path, mode, dev);
- }
- inline static long sys_rmdir(const char* dir)
- {
- return syscall3(NR_unlinkat, AT_FDCWD, (long)dir, AT_REMOVEDIR);
- }
- inline static long sys_rmdirat(int at, const char* dir)
- {
- return syscall3(NR_unlinkat, at, (long)dir, AT_REMOVEDIR);
- }
- inline static long sys_unlink(const char* name)
- {
- return syscall3(NR_unlinkat, AT_FDCWD, (long)name, 0);
- }
- inline static long sys_unlinkat(int at, const char* name, int flags)
- {
- return syscall3(NR_unlinkat, at, (long)name, flags);
- }
- inline static long sys_symlink(const char *target, const char *path)
- {
- return syscall3(NR_symlinkat, (long)target, AT_FDCWD, (long)path);
- }
- inline static long sys_symlinkat(const char *target, int at, const char *path)
- {
- return syscall3(NR_symlinkat, (long)target, at, (long)path);
- }
- inline static long sys_readlink(const char* path, char* buf, long len)
- {
- #ifdef NR_readlinkat
- return syscall4(NR_readlinkat, AT_FDCWD, (long)path, (long)buf, len);
- #else
- return syscall3(NR_readlink, (long)path, (long)buf, len);
- #endif
- }
- inline static long sys_readlinkat(int at, const char* path, char* buf, long len)
- {
- #ifdef NR_readlinkat
- return syscall4(NR_readlinkat, at, (long)path, (long)buf, len);
- #else
- return -ENOSYS;
- #endif
- }
- /* uapi/linux/fs.h */
- #define RENAME_NOREPLACE (1<<0)
- #define RENAME_EXCHANGE (1<<1)
- #define RENAME_WHITEOUT (1<<2)
- inline static long sys_rename(const char* oldpath, const char* newpath)
- {
- return syscall5(NR_renameat2, AT_FDCWD, (long)oldpath,
- AT_FDCWD, (long)newpath, 0);
- }
- inline static long sys_renameat2(int oldat, const char* oldpath,
- int newat, const char* newpath, int flags)
- {
- return syscall5(NR_renameat2, oldat, (long)oldpath,
- newat, (long)newpath, flags);
- }
- inline static long sys_linkat(int oldat, const char* oldpath,
- int newat, const char* newpath, int flags)
- {
- return syscall5(NR_linkat, oldat, (long)oldpath,
- newat, (long)newpath, flags);
- }
|