[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] libc: fsync() für LIOv2-Ressourcen implementiert
+ libc: Für Dateideskriptoren, die auf eine LIOv2-Ressource zeigen, ruft
das neue fsync() jetzt einfach lio_sync() auf. Für alles andere gibt
es EBADF zurück.
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/modules/include/unistd.h | 3 +++
src/modules/lib/posix/posix_files.c | 22 ++++++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/src/modules/include/unistd.h b/src/modules/include/unistd.h
index 219a2c7cb..58eaf8dfa 100644
--- a/src/modules/include/unistd.h
+++ b/src/modules/include/unistd.h
@@ -55,6 +55,9 @@ extern "C" {
/// Prüft, ob es sich um ein Terminal handelt
int isatty(int fd);
+/// Schreibt alle ausstehenden Änderungen aus Caches zurück
+int fsync(int fd);
+
/// PID des aktuellen Prozesses auslesen
pid_t getpid(void);
diff --git a/src/modules/lib/posix/posix_files.c b/src/modules/lib/posix/posix_files.c
index 921f064c0..67a251614 100644
--- a/src/modules/lib/posix/posix_files.c
+++ b/src/modules/lib/posix/posix_files.c
@@ -625,6 +625,28 @@ int isatty(int fd)
return 1;
}
+/**
+ * Schreibt alle ausstehenden Änderungen aus Caches zurück.
+ */
+int fsync(int fd)
+{
+ io_resource_t* file = fd_to_file(fd);
+ int ret;
+
+ if (file == NULL || !IS_LIO2(file)) {
+ errno = EBADF;
+ return -1;
+ }
+
+ ret = lio_sync(file->lio2_stream);
+ if (ret < 0) {
+ errno = -ret;
+ return -1;
+ }
+
+ return 0;
+}
+
#ifndef CONFIG_LIBC_NO_STUBS
/**
--
2.16.4