[libbluray-devel] Add pread() replacement

Petri Hintukainen git at videolan.org
Thu May 11 14:18:06 CEST 2017


libudfread | branch: master | Petri Hintukainen <phintuka at gmail.com> | Thu May 11 15:16:39 2017 +0300| [d29a734a8189aa2b7e7944ac51ed8567933a6ba2] | committer: Petri Hintukainen

Add pread() replacement

> http://git.videolan.org/gitweb.cgi/libudfread.git/?a=commit;h=d29a734a8189aa2b7e7944ac51ed8567933a6ba2
---

 src/default_blockinput.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/default_blockinput.c b/src/default_blockinput.c
index ac4d671..4daa6a3 100644
--- a/src/default_blockinput.c
+++ b/src/default_blockinput.c
@@ -1,6 +1,6 @@
 /*
  * This file is part of libudfread
- * Copyright (C) 2014-2015 VLC authors and VideoLAN
+ * Copyright (C) 2014-2017 VLC authors and VideoLAN
  *
  * Authors: Petri Hintukainen <phintuka at users.sourceforge.net>
  *
@@ -70,7 +70,30 @@ static ssize_t pread(int fd, void *buf, size_t count, off_t offset)
     }
     return got;
 }
-#endif
+
+#elif defined (NEED_PREAD_IMPL)
+
+#include <pthread.h>
+static ssize_t pread_impl(int fd, void *buf, size_t count, off_t offset)
+{
+    static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
+    ssize_t result;
+
+    pthread_mutex_lock(&lock);
+
+    if (lseek(fd, offset, SEEK_SET) != offset) {
+        result = -1;
+    } else {
+        result = read(fd, buf, count);
+    }
+
+    pthread_mutex_unlock(&lock);
+    return result;
+}
+
+#define pread(a,b,c,d) pread_impl(a,b,c,d)
+
+#endif /* _WIN32 || NEED_PREAD_IMPL */
 
 
 typedef struct default_block_input {



More information about the libbluray-devel mailing list