[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