summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibC/CMakeLists.txt1
-rw-r--r--Userland/Libraries/LibC/sys/statvfs.cpp26
-rw-r--r--Userland/Libraries/LibC/sys/statvfs.h36
3 files changed, 63 insertions, 0 deletions
diff --git a/Userland/Libraries/LibC/CMakeLists.txt b/Userland/Libraries/LibC/CMakeLists.txt
index 44f7e46bcc..9df1b2a559 100644
--- a/Userland/Libraries/LibC/CMakeLists.txt
+++ b/Userland/Libraries/LibC/CMakeLists.txt
@@ -46,6 +46,7 @@ set(LIBC_SOURCES
sys/socket.cpp
sys/uio.cpp
sys/wait.cpp
+ sys/statvfs.cpp
termcap.cpp
termios.cpp
time.cpp
diff --git a/Userland/Libraries/LibC/sys/statvfs.cpp b/Userland/Libraries/LibC/sys/statvfs.cpp
new file mode 100644
index 0000000000..d49e38623b
--- /dev/null
+++ b/Userland/Libraries/LibC/sys/statvfs.cpp
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, Justin Mietzner <sw1tchbl4d3@sw1tchbl4d3.com>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <errno.h>
+#include <string.h>
+#include <sys/statvfs.h>
+#include <syscall.h>
+
+extern "C" {
+
+int statvfs(const char* path, struct statvfs* buf)
+{
+ Syscall::SC_statvfs_params params { { path, strlen(path) }, buf };
+ int rc = syscall(SC_statvfs, &params);
+ __RETURN_WITH_ERRNO(rc, rc, -1);
+}
+
+int fstatvfs(int fd, struct statvfs* buf)
+{
+ int rc = syscall(SC_fstatvfs, fd, buf);
+ __RETURN_WITH_ERRNO(rc, rc, -1);
+}
+}
diff --git a/Userland/Libraries/LibC/sys/statvfs.h b/Userland/Libraries/LibC/sys/statvfs.h
new file mode 100644
index 0000000000..4b34479a69
--- /dev/null
+++ b/Userland/Libraries/LibC/sys/statvfs.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2021, Justin Mietzner <sw1tchbl4d3@sw1tchbl4d3.com>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+#define ST_RDONLY 0x1
+#define ST_NOSUID 0x2
+
+struct statvfs {
+ unsigned long f_bsize;
+ unsigned long f_frsize;
+ fsblkcnt_t f_blocks;
+ fsblkcnt_t f_bfree;
+ fsblkcnt_t f_bavail;
+
+ fsfilcnt_t f_files;
+ fsfilcnt_t f_ffree;
+ fsfilcnt_t f_favail;
+
+ unsigned long f_fsid;
+ unsigned long f_flag;
+ unsigned long f_namemax;
+};
+
+int statvfs(const char* path, struct statvfs* buf);
+int fstatvfs(int fd, struct statvfs* buf);
+
+__END_DECLS