[Liblas-commits] hg-main-tree: handle 64-bit errors

liblas-commits at liblas.org liblas-commits at liblas.org
Fri Mar 25 14:32:10 EDT 2011


details:   http://hg.libpc.orghg-main-tree/rev/6885efaccc7e
changeset: 464:6885efaccc7e
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 25 11:32:02 2011 -0700
description:
handle 64-bit errors

diffstat:

 apps/pc2pc.cpp                  |  12 +++---------
 src/drivers/liblas/Iterator.cpp |  18 ++++++++++++++----
 test/unit/LiblasWriterTest.cpp  |   8 ++------
 3 files changed, 19 insertions(+), 19 deletions(-)

diffs (91 lines):

diff -r 00c1e0355271 -r 6885efaccc7e apps/pc2pc.cpp
--- a/apps/pc2pc.cpp	Fri Mar 25 11:25:06 2011 -0700
+++ b/apps/pc2pc.cpp	Fri Mar 25 11:32:02 2011 -0700
@@ -116,9 +116,7 @@
 
         //writer.setPointFormat( reader.getPointFormatNumber() );
 
-        size_t np = (size_t)numPoints;
-        assert(numPoints == np); // BUG
-        writer.write(np);
+        writer.write(numPoints);
     }
 
     else if (hasOption("oracle"))
@@ -145,9 +143,7 @@
 
         //writer.setPointFormat( reader.getPointFormatNumber() );
 
-        size_t np = (size_t)numPoints;
-        assert(numPoints == np); // BUG
-        writer.write(np);
+        writer.write(numPoints);
 #else
         throw configuration_error("libPC not compiled with Oracle support");
 #endif
@@ -164,9 +160,7 @@
 
         writer.setPointFormat( reader.getPointFormatNumber() );
 
-        size_t np = (size_t)numPoints;
-        assert(numPoints == np); // BUG
-        writer.write(np);
+        writer.write(numPoints);
     }
 
     Utils::closeFile(ofs);
diff -r 00c1e0355271 -r 6885efaccc7e src/drivers/liblas/Iterator.cpp
--- a/src/drivers/liblas/Iterator.cpp	Fri Mar 25 11:25:06 2011 -0700
+++ b/src/drivers/liblas/Iterator.cpp	Fri Mar 25 11:32:02 2011 -0700
@@ -263,12 +263,22 @@
 }
 
 
-boost::uint64_t RandomIterator::seekImpl(boost::uint64_t pos)
+boost::uint64_t RandomIterator::seekImpl(boost::uint64_t newPos64)
 {
-    size_t posx = (size_t)pos; // BUG
-    getExternalReader().Seek(posx);
+    // The liblas reader's seek() call only supports size_t, so we might
+    // not be able to satisfy this request...
 
-    return pos;
+    if (newPos64 > std::numeric_limits<size_t>::max())
+    {
+        throw libpc_error("cannot support seek offsets greater than 32-bits");
+    }
+
+    // safe cast, since we just handled the overflow case
+    size_t newPos = static_cast<size_t>(newPos64);
+
+    getExternalReader().Seek(newPos);
+
+    return newPos;
 }
 
 
diff -r 00c1e0355271 -r 6885efaccc7e test/unit/LiblasWriterTest.cpp
--- a/test/unit/LiblasWriterTest.cpp	Fri Mar 25 11:25:06 2011 -0700
+++ b/test/unit/LiblasWriterTest.cpp	Fri Mar 25 11:32:02 2011 -0700
@@ -70,9 +70,7 @@
         writer.setSystemIdentifier("");
         writer.setGeneratingSoftware("TerraScan");
 
-        size_t np = (size_t)numPoints;
-        assert(numPoints == np); // BUG
-        writer.write(np);
+        writer.write(numPoints);
     }
 
     Utils::closeFile(ofs);
@@ -109,9 +107,7 @@
         writer.setSystemIdentifier("");
         writer.setGeneratingSoftware("TerraScan");
 
-        size_t np = (size_t)numPoints;
-        assert(numPoints == np); // BUG
-        writer.write(np);
+        writer.write(numPoints);
     }
 
     Utils::closeFile(ofs);


More information about the Liblas-commits mailing list