---------------------------------------------------------------------------*/
| 1807 | |
| 1808 | /*---------------------------------------------------------------------------*/ |
| 1809 | static I32 |
| 1810 | demzip_prepare_header_for_write( |
| 1811 | demzip_dll_struct* demzip_dll |
| 1812 | ) |
| 1813 | { |
| 1814 | if ((demzip_dll->header.version_major != 1) || (demzip_dll->header.version_minor > 4)) |
| 1815 | { |
| 1816 | sprintf(demzip_dll->error, "unknown LAS version %d.%d", (I32)demzip_dll->header.version_major, (I32)demzip_dll->header.version_minor); |
| 1817 | return 1; |
| 1818 | } |
| 1819 | |
| 1820 | // check counters |
| 1821 | U32 i; |
| 1822 | |
| 1823 | if (demzip_dll->header.point_data_format > 5) |
| 1824 | { |
| 1825 | // legacy counters are zero for new point types |
| 1826 | |
| 1827 | demzip_dll->header.number_of_point_records = 0; |
| 1828 | for (i = 0; i < 5; i++) |
| 1829 | { |
| 1830 | demzip_dll->header.number_of_points_by_return[i] = 0; |
| 1831 | } |
| 1832 | } |
| 1833 | else if (demzip_dll->header.version_minor > 3) |
| 1834 | { |
| 1835 | // legacy counters must be zero or consistent for old point types |
| 1836 | |
| 1837 | if (demzip_dll->header.number_of_point_records != demzip_dll->header.extended_number_of_point_records) |
| 1838 | { |
| 1839 | if (demzip_dll->header.number_of_point_records != 0) |
| 1840 | { |
| 1841 | sprintf(demzip_dll->error, "inconsistent number_of_point_records %u and extended_number_of_point_records %llu", demzip_dll->header.number_of_point_records, demzip_dll->header.extended_number_of_point_records); |
| 1842 | return 1; |
| 1843 | } |
| 1844 | else if (demzip_dll->header.extended_number_of_point_records <= U32_MAX) |
| 1845 | { |
| 1846 | demzip_dll->header.number_of_point_records = (U32)demzip_dll->header.extended_number_of_point_records; |
| 1847 | } |
| 1848 | } |
| 1849 | for (i = 0; i < 5; i++) |
| 1850 | { |
| 1851 | if (demzip_dll->header.number_of_points_by_return[i] != demzip_dll->header.extended_number_of_points_by_return[i]) |
| 1852 | { |
| 1853 | if (demzip_dll->header.number_of_points_by_return[i] != 0) |
| 1854 | { |
| 1855 | sprintf(demzip_dll->error, "inconsistent number_of_points_by_return[%u] %u and extended_number_of_points_by_return[%u] %llu", i, demzip_dll->header.number_of_points_by_return[i], i, demzip_dll->header.extended_number_of_points_by_return[i]); |
| 1856 | return 1; |
| 1857 | } |
| 1858 | else if (demzip_dll->header.extended_number_of_points_by_return[i] <= U32_MAX) |
| 1859 | { |
| 1860 | demzip_dll->header.number_of_points_by_return[i] = (U32)demzip_dll->header.extended_number_of_points_by_return[i]; |
| 1861 | } |
| 1862 | } |
| 1863 | } |
| 1864 | } |
| 1865 | |
| 1866 | return 0; |
no outgoing calls
no test coverage detected