[libbluray-devel] Store file pointer in unsigned

Petri Hintukainen git at videolan.org
Sat Jun 24 15:08:02 CEST 2017


libudfread | branch: master | Petri Hintukainen <phintuka at gmail.com> | Sat Jun 24 16:07:24 2017 +0300| [a8654e0fc28baaebc4d0d311c4917e6f27dbda8f] | committer: Petri Hintukainen

Store file pointer in unsigned

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

 src/udfread.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/udfread.c b/src/udfread.c
index 73e7e49..34cfa34 100644
--- a/src/udfread.c
+++ b/src/udfread.c
@@ -1362,7 +1362,7 @@ struct udfread_file {
     struct file_entry *fe;
 
     /* byte stream access */
-    int64_t     pos;
+    uint64_t    pos;
     uint8_t    *block;
     int         block_valid;
 
@@ -1561,7 +1561,7 @@ static ssize_t _read(UDFFILE *p, void *buf, size_t bytes)
             chunk_size = bytes;
         }
         memcpy(buf, p->block + pos_off, chunk_size);
-        p->pos += (int64_t)chunk_size;
+        p->pos += (uint64_t)chunk_size;
         return chunk_size;
     }
 
@@ -1617,20 +1617,20 @@ ssize_t udfread_file_read(UDFFILE *p, void *buf, size_t bytes)
     uint8_t *bufpt = (uint8_t *)buf;
 
     /* sanity checks */
-    if (!p || !buf || p->pos < 0) {
+    if (!p || !buf) {
         return -1;
     }
     if ((ssize_t)bytes < 0 || (int64_t)bytes < 0) {
         return -1;
     }
 
-    if (p->pos >= udfread_file_size(p)) {
+    if (p->pos >= p->fe->length) {
         return 0;
     }
 
     /* limit range to file size */
-    if ((uint64_t)p->pos + bytes > (uint64_t)udfread_file_size(p)) {
-        bytes = udfread_file_size(p) - p->pos;
+    if (p->pos + bytes > p->fe->length) {
+        bytes = p->fe->length - p->pos;
     }
 
     /* small files may be stored inline in file entry */
@@ -1668,7 +1668,7 @@ ssize_t udfread_file_read(UDFFILE *p, void *buf, size_t bytes)
 int64_t udfread_file_tell(UDFFILE *p)
 {
     if (p) {
-        return p->pos;
+        return (int64_t)p->pos;
     }
     return -1;
 }
@@ -1681,7 +1681,7 @@ int64_t udfread_file_seek(UDFFILE *p, int64_t pos, int whence)
 
     switch (whence) {
         case UDF_SEEK_CUR:
-            pos += p->pos;
+            pos = udfread_file_tell(p) + pos;
             break;
         case UDF_SEEK_END:
             pos = udfread_file_size(p) + pos;
@@ -1693,9 +1693,9 @@ int64_t udfread_file_seek(UDFFILE *p, int64_t pos, int whence)
     }
 
     if (pos >= 0 && pos <= udfread_file_size(p)) {
-        p->pos = pos;
+        p->pos = (uint64_t)pos;
         p->block_valid = 0;
-        return p->pos;
+        return udfread_file_tell(p);
     }
 
     return -1;



More information about the libbluray-devel mailing list