laag-libtiff 4.0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.org +34 -0
  5. data/ext/laag/libtiff/extconf.rb +13 -0
  6. data/laag-libtiff.gemspec +20 -0
  7. data/lib/laag/libtiff.rb +29 -0
  8. data/vendor/gitlab.com/libtiff/libtiff/.appveyor.yml +109 -0
  9. data/vendor/gitlab.com/libtiff/libtiff/.cvsignore +4 -0
  10. data/vendor/gitlab.com/libtiff/libtiff/.travis.yml +34 -0
  11. data/vendor/gitlab.com/libtiff/libtiff/CMakeLists.txt +764 -0
  12. data/vendor/gitlab.com/libtiff/libtiff/COMMITTERS +19 -0
  13. data/vendor/gitlab.com/libtiff/libtiff/COPYRIGHT +21 -0
  14. data/vendor/gitlab.com/libtiff/libtiff/ChangeLog +8073 -0
  15. data/vendor/gitlab.com/libtiff/libtiff/HOWTO-RELEASE +119 -0
  16. data/vendor/gitlab.com/libtiff/libtiff/HOWTO-SECURITY-RELEASE +19 -0
  17. data/vendor/gitlab.com/libtiff/libtiff/Makefile.am +91 -0
  18. data/vendor/gitlab.com/libtiff/libtiff/Makefile.in +995 -0
  19. data/vendor/gitlab.com/libtiff/libtiff/Makefile.vc +58 -0
  20. data/vendor/gitlab.com/libtiff/libtiff/README +61 -0
  21. data/vendor/gitlab.com/libtiff/libtiff/README.vms +12 -0
  22. data/vendor/gitlab.com/libtiff/libtiff/RELEASE-DATE +1 -0
  23. data/vendor/gitlab.com/libtiff/libtiff/SConstruct +171 -0
  24. data/vendor/gitlab.com/libtiff/libtiff/TODO +12 -0
  25. data/vendor/gitlab.com/libtiff/libtiff/VERSION +1 -0
  26. data/vendor/gitlab.com/libtiff/libtiff/aclocal.m4 +1194 -0
  27. data/vendor/gitlab.com/libtiff/libtiff/archive/html/man/bmp2tiff.1.html +121 -0
  28. data/vendor/gitlab.com/libtiff/libtiff/archive/html/man/gif2tiff.1.html +141 -0
  29. data/vendor/gitlab.com/libtiff/libtiff/archive/html/man/ras2tiff.1.html +139 -0
  30. data/vendor/gitlab.com/libtiff/libtiff/archive/html/man/sgi2tiff.1.html +147 -0
  31. data/vendor/gitlab.com/libtiff/libtiff/archive/html/man/tiffsv.1.html +207 -0
  32. data/vendor/gitlab.com/libtiff/libtiff/archive/man/bmp2tiff.1 +85 -0
  33. data/vendor/gitlab.com/libtiff/libtiff/archive/man/gif2tiff.1 +81 -0
  34. data/vendor/gitlab.com/libtiff/libtiff/archive/man/ras2tiff.1 +96 -0
  35. data/vendor/gitlab.com/libtiff/libtiff/archive/man/sgi2tiff.1 +93 -0
  36. data/vendor/gitlab.com/libtiff/libtiff/archive/man/tiffsv.1 +142 -0
  37. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/bmp2tiff.c +937 -0
  38. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/gif2tiff.c +591 -0
  39. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/ras2tiff.c +338 -0
  40. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/rasterfile.h +44 -0
  41. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/sgi2tiff.c +337 -0
  42. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/sgisv.c +318 -0
  43. data/vendor/gitlab.com/libtiff/libtiff/archive/tools/ycbcr.c +168 -0
  44. data/vendor/gitlab.com/libtiff/libtiff/autogen.sh +8 -0
  45. data/vendor/gitlab.com/libtiff/libtiff/build/.cvsignore +1 -0
  46. data/vendor/gitlab.com/libtiff/libtiff/build/CMakeLists.txt +25 -0
  47. data/vendor/gitlab.com/libtiff/libtiff/build/Makefile.am +32 -0
  48. data/vendor/gitlab.com/libtiff/libtiff/build/Makefile.in +680 -0
  49. data/vendor/gitlab.com/libtiff/libtiff/build/README +3 -0
  50. data/vendor/gitlab.com/libtiff/libtiff/build/travis-ci +108 -0
  51. data/vendor/gitlab.com/libtiff/libtiff/commit +233 -0
  52. data/vendor/gitlab.com/libtiff/libtiff/config/compile +347 -0
  53. data/vendor/gitlab.com/libtiff/libtiff/config/config.guess +1526 -0
  54. data/vendor/gitlab.com/libtiff/libtiff/config/config.sub +1658 -0
  55. data/vendor/gitlab.com/libtiff/libtiff/config/depcomp +791 -0
  56. data/vendor/gitlab.com/libtiff/libtiff/config/install-sh +507 -0
  57. data/vendor/gitlab.com/libtiff/libtiff/config/ltmain.sh +11156 -0
  58. data/vendor/gitlab.com/libtiff/libtiff/config/missing +215 -0
  59. data/vendor/gitlab.com/libtiff/libtiff/config/mkinstalldirs +161 -0
  60. data/vendor/gitlab.com/libtiff/libtiff/config/test-driver +127 -0
  61. data/vendor/gitlab.com/libtiff/libtiff/configure +23612 -0
  62. data/vendor/gitlab.com/libtiff/libtiff/configure.ac +1112 -0
  63. data/vendor/gitlab.com/libtiff/libtiff/configure.com +1357 -0
  64. data/vendor/gitlab.com/libtiff/libtiff/contrib/.cvsignore +2 -0
  65. data/vendor/gitlab.com/libtiff/libtiff/contrib/CMakeLists.txt +35 -0
  66. data/vendor/gitlab.com/libtiff/libtiff/contrib/Makefile.am +31 -0
  67. data/vendor/gitlab.com/libtiff/libtiff/contrib/Makefile.in +679 -0
  68. data/vendor/gitlab.com/libtiff/libtiff/contrib/README +2 -0
  69. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/.cvsignore +5 -0
  70. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/CMakeLists.txt +34 -0
  71. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/Makefile.am +39 -0
  72. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/Makefile.in +652 -0
  73. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/Makefile.vc +28 -0
  74. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/README +142 -0
  75. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/addtiffo.c +181 -0
  76. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/tif_overview.c +916 -0
  77. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/tif_ovrcache.c +344 -0
  78. data/vendor/gitlab.com/libtiff/libtiff/contrib/addtiffo/tif_ovrcache.h +103 -0
  79. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/.cvsignore +8 -0
  80. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/CMakeLists.txt +43 -0
  81. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/Makefile.am +46 -0
  82. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/Makefile.in +798 -0
  83. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/README +7 -0
  84. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/tiff-bi.c +91 -0
  85. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/tiff-grayscale.c +147 -0
  86. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/tiff-palette.c +284 -0
  87. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/tiff-rgb.c +201 -0
  88. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/.cvsignore +2 -0
  89. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/CMakeLists.txt +29 -0
  90. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/Makefile.am +47 -0
  91. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/Makefile.in +516 -0
  92. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/README +6 -0
  93. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/patchlevel.h +8 -0
  94. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/xtiff.c +1290 -0
  95. data/vendor/gitlab.com/libtiff/libtiff/contrib/dbs/xtiff/xtifficon.h +21 -0
  96. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/.cvsignore +5 -0
  97. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/CMakeLists.txt +35 -0
  98. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/Makefile.am +40 -0
  99. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/Makefile.in +650 -0
  100. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/README +25 -0
  101. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/iptcutil.c +954 -0
  102. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/test.iptc +0 -0
  103. data/vendor/gitlab.com/libtiff/libtiff/contrib/iptcutil/test.txt +32 -0
  104. data/vendor/gitlab.com/libtiff/libtiff/contrib/mfs/.cvsignore +2 -0
  105. data/vendor/gitlab.com/libtiff/libtiff/contrib/mfs/CMakeLists.txt +27 -0
  106. data/vendor/gitlab.com/libtiff/libtiff/contrib/mfs/Makefile.am +29 -0
  107. data/vendor/gitlab.com/libtiff/libtiff/contrib/mfs/Makefile.in +499 -0
  108. data/vendor/gitlab.com/libtiff/libtiff/contrib/mfs/README +37 -0
  109. data/vendor/gitlab.com/libtiff/libtiff/contrib/mfs/mfs_file.c +586 -0
  110. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/.cvsignore +2 -0
  111. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/CMakeLists.txt +30 -0
  112. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/Makefile.am +32 -0
  113. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/Makefile.in +502 -0
  114. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/README +90 -0
  115. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/tif_imageiter.c +525 -0
  116. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/tif_imageiter.h +64 -0
  117. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/tif_pdsdirread.c +1131 -0
  118. data/vendor/gitlab.com/libtiff/libtiff/contrib/pds/tif_pdsdirwrite.c +971 -0
  119. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/.cvsignore +2 -0
  120. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/CMakeLists.txt +28 -0
  121. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/Makefile.am +30 -0
  122. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/Makefile.in +500 -0
  123. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/README +10 -0
  124. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/ras2tif.c +254 -0
  125. data/vendor/gitlab.com/libtiff/libtiff/contrib/ras/tif2ras.c +344 -0
  126. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/.cvsignore +2 -0
  127. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/CMakeLists.txt +28 -0
  128. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/Makefile.am +30 -0
  129. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/Makefile.in +500 -0
  130. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/README +30 -0
  131. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/tiffstream.cpp +238 -0
  132. data/vendor/gitlab.com/libtiff/libtiff/contrib/stream/tiffstream.h +70 -0
  133. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/.cvsignore +2 -0
  134. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/CMakeLists.txt +32 -0
  135. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/Makefile.am +33 -0
  136. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/Makefile.in +503 -0
  137. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/README +132 -0
  138. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/listtif.c +39 -0
  139. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/maketif.c +77 -0
  140. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/xtif_dir.c +350 -0
  141. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/xtiffio.h +59 -0
  142. data/vendor/gitlab.com/libtiff/libtiff/contrib/tags/xtiffiop.h +72 -0
  143. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/.cvsignore +2 -0
  144. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/CMakeLists.txt +30 -0
  145. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/Makefile.am +32 -0
  146. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/Makefile.in +502 -0
  147. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/Makefile.w95 +134 -0
  148. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/README.Tiffile +31 -0
  149. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/README.tiff2dib +51 -0
  150. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/Tiffile.cpp +449 -0
  151. data/vendor/gitlab.com/libtiff/libtiff/contrib/win_dib/tiff2dib.c +379 -0
  152. data/vendor/gitlab.com/libtiff/libtiff/html/.cvsignore +5 -0
  153. data/vendor/gitlab.com/libtiff/libtiff/html/BigTIFFProposal.html +99 -0
  154. data/vendor/gitlab.com/libtiff/libtiff/html/CMakeLists.txt +87 -0
  155. data/vendor/gitlab.com/libtiff/libtiff/html/Makefile.am +96 -0
  156. data/vendor/gitlab.com/libtiff/libtiff/html/Makefile.in +798 -0
  157. data/vendor/gitlab.com/libtiff/libtiff/html/TIFFTechNote2.html +707 -0
  158. data/vendor/gitlab.com/libtiff/libtiff/html/addingtags.html +292 -0
  159. data/vendor/gitlab.com/libtiff/libtiff/html/bigtiffdesign.html +80 -0
  160. data/vendor/gitlab.com/libtiff/libtiff/html/bigtiffpr.html +77 -0
  161. data/vendor/gitlab.com/libtiff/libtiff/html/bigtiffpr_images/esri.png +0 -0
  162. data/vendor/gitlab.com/libtiff/libtiff/html/bigtiffpr_images/leica.png +0 -0
  163. data/vendor/gitlab.com/libtiff/libtiff/html/bigtiffpr_images/safe.png +0 -0
  164. data/vendor/gitlab.com/libtiff/libtiff/html/bigtiffpr_images/weogeo.png +0 -0
  165. data/vendor/gitlab.com/libtiff/libtiff/html/bugs.html +61 -0
  166. data/vendor/gitlab.com/libtiff/libtiff/html/build.html +737 -0
  167. data/vendor/gitlab.com/libtiff/libtiff/html/contrib.html +209 -0
  168. data/vendor/gitlab.com/libtiff/libtiff/html/document.html +52 -0
  169. data/vendor/gitlab.com/libtiff/libtiff/html/images.html +41 -0
  170. data/vendor/gitlab.com/libtiff/libtiff/html/images/.cvsignore +2 -0
  171. data/vendor/gitlab.com/libtiff/libtiff/html/images/CMakeLists.txt +46 -0
  172. data/vendor/gitlab.com/libtiff/libtiff/html/images/Makefile.am +49 -0
  173. data/vendor/gitlab.com/libtiff/libtiff/html/images/Makefile.in +572 -0
  174. data/vendor/gitlab.com/libtiff/libtiff/html/images/back.gif +0 -0
  175. data/vendor/gitlab.com/libtiff/libtiff/html/images/bali.jpg +0 -0
  176. data/vendor/gitlab.com/libtiff/libtiff/html/images/cat.gif +0 -0
  177. data/vendor/gitlab.com/libtiff/libtiff/html/images/cover.jpg +0 -0
  178. data/vendor/gitlab.com/libtiff/libtiff/html/images/cramps.gif +0 -0
  179. data/vendor/gitlab.com/libtiff/libtiff/html/images/dave.gif +0 -0
  180. data/vendor/gitlab.com/libtiff/libtiff/html/images/info.gif +0 -0
  181. data/vendor/gitlab.com/libtiff/libtiff/html/images/jello.jpg +0 -0
  182. data/vendor/gitlab.com/libtiff/libtiff/html/images/jim.gif +0 -0
  183. data/vendor/gitlab.com/libtiff/libtiff/html/images/note.gif +0 -0
  184. data/vendor/gitlab.com/libtiff/libtiff/html/images/oxford.gif +0 -0
  185. data/vendor/gitlab.com/libtiff/libtiff/html/images/quad.jpg +0 -0
  186. data/vendor/gitlab.com/libtiff/libtiff/html/images/ring.gif +0 -0
  187. data/vendor/gitlab.com/libtiff/libtiff/html/images/smallliz.jpg +0 -0
  188. data/vendor/gitlab.com/libtiff/libtiff/html/images/strike.gif +0 -0
  189. data/vendor/gitlab.com/libtiff/libtiff/html/images/warning.gif +0 -0
  190. data/vendor/gitlab.com/libtiff/libtiff/html/index.html +122 -0
  191. data/vendor/gitlab.com/libtiff/libtiff/html/internals.html +572 -0
  192. data/vendor/gitlab.com/libtiff/libtiff/html/intro.html +68 -0
  193. data/vendor/gitlab.com/libtiff/libtiff/html/libtiff.html +747 -0
  194. data/vendor/gitlab.com/libtiff/libtiff/html/man/.cvsignore +2 -0
  195. data/vendor/gitlab.com/libtiff/libtiff/html/man/CMakeLists.txt +108 -0
  196. data/vendor/gitlab.com/libtiff/libtiff/html/man/HtmlDoc.cmake +50 -0
  197. data/vendor/gitlab.com/libtiff/libtiff/html/man/Makefile.am +122 -0
  198. data/vendor/gitlab.com/libtiff/libtiff/html/man/Makefile.in +642 -0
  199. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFClose.3tiff.html +87 -0
  200. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFDataWidth.3tiff.html +98 -0
  201. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFError.3tiff.html +106 -0
  202. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFieldDataType.3tiff.html +89 -0
  203. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFieldName.3tiff.html +86 -0
  204. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFieldPassCount.3tiff.html +98 -0
  205. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFieldReadCount.3tiff.html +101 -0
  206. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFieldTag.3tiff.html +88 -0
  207. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFieldWriteCount.3tiff.html +108 -0
  208. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFFlush.3tiff.html +113 -0
  209. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFGetField.3tiff.html +1969 -0
  210. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFOpen.3tiff.html +421 -0
  211. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFPrintDirectory.3tiff.html +225 -0
  212. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFRGBAImage.3tiff.html +319 -0
  213. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadDirectory.3tiff.html +218 -0
  214. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadEncodedStrip.3tiff.html +133 -0
  215. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadEncodedTile.3tiff.html +130 -0
  216. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadRGBAImage.3tiff.html +301 -0
  217. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadRGBAStrip.3tiff.html +208 -0
  218. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadRGBATile.3tiff.html +261 -0
  219. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadRawStrip.3tiff.html +109 -0
  220. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadRawTile.3tiff.html +111 -0
  221. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadScanline.3tiff.html +157 -0
  222. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFReadTile.3tiff.html +133 -0
  223. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFSetDirectory.3tiff.html +122 -0
  224. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFSetField.3tiff.html +1865 -0
  225. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWarning.3tiff.html +108 -0
  226. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteDirectory.3tiff.html +176 -0
  227. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteEncodedStrip.3tiff.html +153 -0
  228. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteEncodedTile.3tiff.html +147 -0
  229. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteRawStrip.3tiff.html +144 -0
  230. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteRawTile.3tiff.html +128 -0
  231. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteScanline.3tiff.html +206 -0
  232. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFWriteTile.3tiff.html +115 -0
  233. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFbuffer.3tiff.html +116 -0
  234. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFcodec.3tiff.html +116 -0
  235. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFcolor.3tiff.html +975 -0
  236. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFmemory.3tiff.html +110 -0
  237. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFquery.3tiff.html +148 -0
  238. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFsize.3tiff.html +95 -0
  239. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFstrip.3tiff.html +129 -0
  240. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFswab.3tiff.html +110 -0
  241. data/vendor/gitlab.com/libtiff/libtiff/html/man/TIFFtile.3tiff.html +141 -0
  242. data/vendor/gitlab.com/libtiff/libtiff/html/man/fax2ps.1.html +252 -0
  243. data/vendor/gitlab.com/libtiff/libtiff/html/man/fax2tiff.1.html +607 -0
  244. data/vendor/gitlab.com/libtiff/libtiff/html/man/index.html +64 -0
  245. data/vendor/gitlab.com/libtiff/libtiff/html/man/libtiff.3tiff.html +1150 -0
  246. data/vendor/gitlab.com/libtiff/libtiff/html/man/pal2rgb.1.html +189 -0
  247. data/vendor/gitlab.com/libtiff/libtiff/html/man/ppm2tiff.1.html +141 -0
  248. data/vendor/gitlab.com/libtiff/libtiff/html/man/raw2tiff.1.html +510 -0
  249. data/vendor/gitlab.com/libtiff/libtiff/html/man/rgb2ycbcr.1.html +155 -0
  250. data/vendor/gitlab.com/libtiff/libtiff/html/man/thumbnail.1.html +148 -0
  251. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiff2bw.1.html +161 -0
  252. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiff2pdf.1.html +609 -0
  253. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiff2ps.1.html +639 -0
  254. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiff2rgba.1.html +162 -0
  255. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffcmp.1.html +156 -0
  256. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffcp.1.html +569 -0
  257. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffcrop.1.html +684 -0
  258. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffdither.1.html +196 -0
  259. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffdump.1.html +145 -0
  260. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffgt.1.html +551 -0
  261. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffinfo.1.html +196 -0
  262. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffmedian.1.html +183 -0
  263. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffset.1.html +176 -0
  264. data/vendor/gitlab.com/libtiff/libtiff/html/man/tiffsplit.1.html +102 -0
  265. data/vendor/gitlab.com/libtiff/libtiff/html/misc.html +117 -0
  266. data/vendor/gitlab.com/libtiff/libtiff/html/support.html +655 -0
  267. data/vendor/gitlab.com/libtiff/libtiff/html/tools.html +137 -0
  268. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta007.html +112 -0
  269. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta016.html +122 -0
  270. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta018.html +84 -0
  271. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta024.html +139 -0
  272. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta028.html +146 -0
  273. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta029.html +86 -0
  274. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta031.html +94 -0
  275. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta032.html +90 -0
  276. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta033.html +82 -0
  277. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta034.html +68 -0
  278. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta035.html +63 -0
  279. data/vendor/gitlab.com/libtiff/libtiff/html/v3.4beta036.html +117 -0
  280. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.1.html +75 -0
  281. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.2.html +108 -0
  282. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.3.html +132 -0
  283. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.4.html +88 -0
  284. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.5.html +155 -0
  285. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.6-beta.html +185 -0
  286. data/vendor/gitlab.com/libtiff/libtiff/html/v3.5.7.html +259 -0
  287. data/vendor/gitlab.com/libtiff/libtiff/html/v3.6.0.html +434 -0
  288. data/vendor/gitlab.com/libtiff/libtiff/html/v3.6.1.html +199 -0
  289. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.0.html +144 -0
  290. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.0alpha.html +249 -0
  291. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.0beta.html +162 -0
  292. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.0beta2.html +131 -0
  293. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.1.html +233 -0
  294. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.2.html +222 -0
  295. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.3.html +230 -0
  296. data/vendor/gitlab.com/libtiff/libtiff/html/v3.7.4.html +133 -0
  297. data/vendor/gitlab.com/libtiff/libtiff/html/v3.8.0.html +199 -0
  298. data/vendor/gitlab.com/libtiff/libtiff/html/v3.8.1.html +217 -0
  299. data/vendor/gitlab.com/libtiff/libtiff/html/v3.8.2.html +137 -0
  300. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.0.html +261 -0
  301. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.0beta.html +304 -0
  302. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.1.html +115 -0
  303. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.2.html +122 -0
  304. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.3.html +160 -0
  305. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.4.html +125 -0
  306. data/vendor/gitlab.com/libtiff/libtiff/html/v3.9.5.html +270 -0
  307. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.0.html +269 -0
  308. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.1.html +113 -0
  309. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.2.html +118 -0
  310. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.3.html +125 -0
  311. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.4.html +274 -0
  312. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.4beta.html +291 -0
  313. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.5.html +148 -0
  314. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.6.html +139 -0
  315. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.7.html +411 -0
  316. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.8.html +445 -0
  317. data/vendor/gitlab.com/libtiff/libtiff/html/v4.0.9.html +373 -0
  318. data/vendor/gitlab.com/libtiff/libtiff/libtiff-4.pc.in +11 -0
  319. data/vendor/gitlab.com/libtiff/libtiff/libtiff/.cvsignore +22 -0
  320. data/vendor/gitlab.com/libtiff/libtiff/libtiff/CMakeLists.txt +165 -0
  321. data/vendor/gitlab.com/libtiff/libtiff/libtiff/Makefile.am +154 -0
  322. data/vendor/gitlab.com/libtiff/libtiff/libtiff/Makefile.in +966 -0
  323. data/vendor/gitlab.com/libtiff/libtiff/libtiff/Makefile.lcc +129 -0
  324. data/vendor/gitlab.com/libtiff/libtiff/libtiff/Makefile.vc +102 -0
  325. data/vendor/gitlab.com/libtiff/libtiff/libtiff/SConstruct +73 -0
  326. data/vendor/gitlab.com/libtiff/libtiff/libtiff/libtiff.def +168 -0
  327. data/vendor/gitlab.com/libtiff/libtiff/libtiff/libtiff.map +4 -0
  328. data/vendor/gitlab.com/libtiff/libtiff/libtiff/libtiffxx.map +4 -0
  329. data/vendor/gitlab.com/libtiff/libtiff/libtiff/mkg3states.c +454 -0
  330. data/vendor/gitlab.com/libtiff/libtiff/libtiff/mkspans.c +82 -0
  331. data/vendor/gitlab.com/libtiff/libtiff/libtiff/t4.h +292 -0
  332. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_aux.c +376 -0
  333. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_close.c +140 -0
  334. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_codec.c +165 -0
  335. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_color.c +309 -0
  336. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_compress.c +304 -0
  337. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_config.h-vms +46 -0
  338. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_config.h.cmake.in +261 -0
  339. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_config.h.in +410 -0
  340. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_config.vc.h +137 -0
  341. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_config.wince.h +71 -0
  342. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_dir.c +1767 -0
  343. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_dir.h +309 -0
  344. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_dirinfo.c +1070 -0
  345. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_dirread.c +5803 -0
  346. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_dirwrite.c +3024 -0
  347. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_dumpmode.c +143 -0
  348. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_error.c +88 -0
  349. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_extension.c +118 -0
  350. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_fax3.c +1648 -0
  351. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_fax3.h +540 -0
  352. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_fax3sm.c +1260 -0
  353. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_flush.c +118 -0
  354. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_getimage.c +3048 -0
  355. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_jbig.c +214 -0
  356. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_jpeg.c +2601 -0
  357. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_jpeg_12.c +69 -0
  358. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_luv.c +1765 -0
  359. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_lzma.c +495 -0
  360. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_lzw.c +1218 -0
  361. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_next.c +189 -0
  362. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_ojpeg.c +2563 -0
  363. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_open.c +725 -0
  364. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_packbits.c +311 -0
  365. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_pixarlog.c +1485 -0
  366. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_predict.c +881 -0
  367. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_predict.h +79 -0
  368. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_print.c +722 -0
  369. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_read.c +1572 -0
  370. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_stream.cxx +430 -0
  371. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_strip.c +389 -0
  372. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_swab.c +312 -0
  373. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_thunder.c +208 -0
  374. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_tile.c +322 -0
  375. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_unix.c +386 -0
  376. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_version.c +40 -0
  377. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_vms.c +611 -0
  378. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_warning.c +89 -0
  379. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_win32.c +476 -0
  380. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_wince.c +293 -0
  381. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_write.c +834 -0
  382. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tif_zip.c +476 -0
  383. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiff.h +681 -0
  384. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffconf.h-vms +99 -0
  385. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffconf.h.cmake.in +130 -0
  386. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffconf.h.in +127 -0
  387. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffconf.vc.h +161 -0
  388. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffconf.wince.h +121 -0
  389. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffio.h +560 -0
  390. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffio.hxx +49 -0
  391. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffiop.h +445 -0
  392. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffvers.h +9 -0
  393. data/vendor/gitlab.com/libtiff/libtiff/libtiff/tiffvers.h.in +9 -0
  394. data/vendor/gitlab.com/libtiff/libtiff/libtiff/uvcode.h +180 -0
  395. data/vendor/gitlab.com/libtiff/libtiff/m4/acinclude.m4 +851 -0
  396. data/vendor/gitlab.com/libtiff/libtiff/m4/ice_find_athena.m4 +187 -0
  397. data/vendor/gitlab.com/libtiff/libtiff/m4/libtool.m4 +8388 -0
  398. data/vendor/gitlab.com/libtiff/libtiff/m4/ltoptions.m4 +437 -0
  399. data/vendor/gitlab.com/libtiff/libtiff/m4/ltsugar.m4 +124 -0
  400. data/vendor/gitlab.com/libtiff/libtiff/m4/ltversion.m4 +23 -0
  401. data/vendor/gitlab.com/libtiff/libtiff/m4/lt~obsolete.m4 +99 -0
  402. data/vendor/gitlab.com/libtiff/libtiff/man/.cvsignore +3 -0
  403. data/vendor/gitlab.com/libtiff/libtiff/man/CMakeLists.txt +97 -0
  404. data/vendor/gitlab.com/libtiff/libtiff/man/Makefile.am +94 -0
  405. data/vendor/gitlab.com/libtiff/libtiff/man/Makefile.in +684 -0
  406. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFClose.3tiff +53 -0
  407. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFDataWidth.3tiff +74 -0
  408. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFError.3tiff +69 -0
  409. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFieldDataType.3tiff +53 -0
  410. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFieldName.3tiff +52 -0
  411. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFieldPassCount.3tiff +73 -0
  412. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFieldReadCount.3tiff +77 -0
  413. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFieldTag.3tiff +56 -0
  414. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFieldWriteCount.3tiff +88 -0
  415. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFFlush.3tiff +64 -0
  416. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFGetField.3tiff +229 -0
  417. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFOpen.3tiff +279 -0
  418. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFPrintDirectory.3tiff +70 -0
  419. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFRGBAImage.3tiff +286 -0
  420. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadDirectory.3tiff +164 -0
  421. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadEncodedStrip.3tiff +78 -0
  422. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadEncodedTile.3tiff +76 -0
  423. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadRGBAImage.3tiff +218 -0
  424. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadRGBAStrip.3tiff +170 -0
  425. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadRGBATile.3tiff +171 -0
  426. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadRawStrip.3tiff +64 -0
  427. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadRawTile.3tiff +65 -0
  428. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadScanline.3tiff +94 -0
  429. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFReadTile.3tiff +84 -0
  430. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFSetDirectory.3tiff +79 -0
  431. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFSetField.3tiff +217 -0
  432. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWarning.3tiff +70 -0
  433. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteDirectory.3tiff +138 -0
  434. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteEncodedStrip.3tiff +102 -0
  435. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteEncodedTile.3tiff +96 -0
  436. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteRawStrip.3tiff +96 -0
  437. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteRawTile.3tiff +84 -0
  438. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteScanline.3tiff +154 -0
  439. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFWriteTile.3tiff +77 -0
  440. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFbuffer.3tiff +77 -0
  441. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFcodec.3tiff +82 -0
  442. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFcolor.3tiff +268 -0
  443. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFmemory.3tiff +90 -0
  444. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFquery.3tiff +142 -0
  445. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFsize.3tiff +59 -0
  446. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFstrip.3tiff +99 -0
  447. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFswab.3tiff +80 -0
  448. data/vendor/gitlab.com/libtiff/libtiff/man/TIFFtile.3tiff +131 -0
  449. data/vendor/gitlab.com/libtiff/libtiff/man/fax2ps.1 +159 -0
  450. data/vendor/gitlab.com/libtiff/libtiff/man/fax2tiff.1 +286 -0
  451. data/vendor/gitlab.com/libtiff/libtiff/man/libtiff.3tiff +545 -0
  452. data/vendor/gitlab.com/libtiff/libtiff/man/pal2rgb.1 +111 -0
  453. data/vendor/gitlab.com/libtiff/libtiff/man/ppm2tiff.1 +105 -0
  454. data/vendor/gitlab.com/libtiff/libtiff/man/raw2tiff.1 +196 -0
  455. data/vendor/gitlab.com/libtiff/libtiff/man/rgb2ycbcr.1 +99 -0
  456. data/vendor/gitlab.com/libtiff/libtiff/man/thumbnail.1 +90 -0
  457. data/vendor/gitlab.com/libtiff/libtiff/man/tiff2bw.1 +94 -0
  458. data/vendor/gitlab.com/libtiff/libtiff/man/tiff2pdf.1 +254 -0
  459. data/vendor/gitlab.com/libtiff/libtiff/man/tiff2ps.1 +294 -0
  460. data/vendor/gitlab.com/libtiff/libtiff/man/tiff2rgba.1 +97 -0
  461. data/vendor/gitlab.com/libtiff/libtiff/man/tiffcmp.1 +87 -0
  462. data/vendor/gitlab.com/libtiff/libtiff/man/tiffcp.1 +317 -0
  463. data/vendor/gitlab.com/libtiff/libtiff/man/tiffcrop.1 +571 -0
  464. data/vendor/gitlab.com/libtiff/libtiff/man/tiffdither.1 +135 -0
  465. data/vendor/gitlab.com/libtiff/libtiff/man/tiffdump.1 +81 -0
  466. data/vendor/gitlab.com/libtiff/libtiff/man/tiffgt.1 +245 -0
  467. data/vendor/gitlab.com/libtiff/libtiff/man/tiffinfo.1 +88 -0
  468. data/vendor/gitlab.com/libtiff/libtiff/man/tiffmedian.1 +112 -0
  469. data/vendor/gitlab.com/libtiff/libtiff/man/tiffset.1 +99 -0
  470. data/vendor/gitlab.com/libtiff/libtiff/man/tiffsplit.1 +69 -0
  471. data/vendor/gitlab.com/libtiff/libtiff/nmake.opt +229 -0
  472. data/vendor/gitlab.com/libtiff/libtiff/port/.cvsignore +7 -0
  473. data/vendor/gitlab.com/libtiff/libtiff/port/CMakeLists.txt +60 -0
  474. data/vendor/gitlab.com/libtiff/libtiff/port/Makefile.am +35 -0
  475. data/vendor/gitlab.com/libtiff/libtiff/port/Makefile.in +656 -0
  476. data/vendor/gitlab.com/libtiff/libtiff/port/Makefile.vc +44 -0
  477. data/vendor/gitlab.com/libtiff/libtiff/port/dummy.c +12 -0
  478. data/vendor/gitlab.com/libtiff/libtiff/port/getopt.c +125 -0
  479. data/vendor/gitlab.com/libtiff/libtiff/port/lfind.c +62 -0
  480. data/vendor/gitlab.com/libtiff/libtiff/port/libport.h +60 -0
  481. data/vendor/gitlab.com/libtiff/libtiff/port/snprintf.c +38 -0
  482. data/vendor/gitlab.com/libtiff/libtiff/port/strcasecmp.c +51 -0
  483. data/vendor/gitlab.com/libtiff/libtiff/port/strtoul.c +109 -0
  484. data/vendor/gitlab.com/libtiff/libtiff/port/strtoull.c +116 -0
  485. data/vendor/gitlab.com/libtiff/libtiff/test/.cvsignore +12 -0
  486. data/vendor/gitlab.com/libtiff/libtiff/test/CMakeLists.txt +382 -0
  487. data/vendor/gitlab.com/libtiff/libtiff/test/Makefile.am +334 -0
  488. data/vendor/gitlab.com/libtiff/libtiff/test/Makefile.in +1987 -0
  489. data/vendor/gitlab.com/libtiff/libtiff/test/TiffSplitTest.cmake +34 -0
  490. data/vendor/gitlab.com/libtiff/libtiff/test/TiffTest.cmake +63 -0
  491. data/vendor/gitlab.com/libtiff/libtiff/test/TiffTestCommon.cmake +108 -0
  492. data/vendor/gitlab.com/libtiff/libtiff/test/ascii_tag.c +177 -0
  493. data/vendor/gitlab.com/libtiff/libtiff/test/check_tag.c +91 -0
  494. data/vendor/gitlab.com/libtiff/libtiff/test/common.sh +122 -0
  495. data/vendor/gitlab.com/libtiff/libtiff/test/custom_dir.c +247 -0
  496. data/vendor/gitlab.com/libtiff/libtiff/test/images/README.txt +29 -0
  497. data/vendor/gitlab.com/libtiff/libtiff/test/images/logluv-3c-16b.tiff +0 -0
  498. data/vendor/gitlab.com/libtiff/libtiff/test/images/minisblack-1c-16b.tiff +0 -0
  499. data/vendor/gitlab.com/libtiff/libtiff/test/images/minisblack-1c-8b.pgm +0 -0
  500. data/vendor/gitlab.com/libtiff/libtiff/test/images/minisblack-1c-8b.tiff +0 -0
  501. data/vendor/gitlab.com/libtiff/libtiff/test/images/minisblack-2c-8b-alpha.tiff +0 -0
  502. data/vendor/gitlab.com/libtiff/libtiff/test/images/miniswhite-1c-1b.pbm +0 -0
  503. data/vendor/gitlab.com/libtiff/libtiff/test/images/miniswhite-1c-1b.tiff +0 -0
  504. data/vendor/gitlab.com/libtiff/libtiff/test/images/palette-1c-1b.tiff +0 -0
  505. data/vendor/gitlab.com/libtiff/libtiff/test/images/palette-1c-4b.tiff +0 -0
  506. data/vendor/gitlab.com/libtiff/libtiff/test/images/palette-1c-8b.tiff +0 -0
  507. data/vendor/gitlab.com/libtiff/libtiff/test/images/quad-lzw-compat.tiff +0 -0
  508. data/vendor/gitlab.com/libtiff/libtiff/test/images/quad-tile.jpg.tiff +0 -0
  509. data/vendor/gitlab.com/libtiff/libtiff/test/images/rgb-3c-16b.tiff +0 -0
  510. data/vendor/gitlab.com/libtiff/libtiff/test/images/rgb-3c-8b.ppm +0 -0
  511. data/vendor/gitlab.com/libtiff/libtiff/test/images/rgb-3c-8b.tiff +0 -0
  512. data/vendor/gitlab.com/libtiff/libtiff/test/long_tag.c +156 -0
  513. data/vendor/gitlab.com/libtiff/libtiff/test/ppm2tiff_pbm.sh +7 -0
  514. data/vendor/gitlab.com/libtiff/libtiff/test/ppm2tiff_pgm.sh +7 -0
  515. data/vendor/gitlab.com/libtiff/libtiff/test/ppm2tiff_ppm.sh +7 -0
  516. data/vendor/gitlab.com/libtiff/libtiff/test/raw_decode.c +304 -0
  517. data/vendor/gitlab.com/libtiff/libtiff/test/rewrite_tag.c +344 -0
  518. data/vendor/gitlab.com/libtiff/libtiff/test/short_tag.c +205 -0
  519. data/vendor/gitlab.com/libtiff/libtiff/test/strip.c +290 -0
  520. data/vendor/gitlab.com/libtiff/libtiff/test/strip_rw.c +157 -0
  521. data/vendor/gitlab.com/libtiff/libtiff/test/test_arrays.c +829 -0
  522. data/vendor/gitlab.com/libtiff/libtiff/test/test_arrays.h +63 -0
  523. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2bw-palette-1c-8b.sh +7 -0
  524. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2bw-quad-lzw-compat.sh +7 -0
  525. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2bw-rgb-3c-8b.sh +7 -0
  526. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2pdf.sh +6 -0
  527. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2ps-EPS1.sh +6 -0
  528. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2ps-PS1.sh +6 -0
  529. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2ps-PS2.sh +6 -0
  530. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2ps-PS3.sh +6 -0
  531. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-logluv-3c-16b.sh +7 -0
  532. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-minisblack-1c-16b.sh +7 -0
  533. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-minisblack-1c-8b.sh +7 -0
  534. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-minisblack-2c-8b-alpha.sh +7 -0
  535. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-miniswhite-1c-1b.sh +7 -0
  536. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-palette-1c-1b.sh +7 -0
  537. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-palette-1c-4b.sh +7 -0
  538. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-palette-1c-8b.sh +7 -0
  539. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-quad-tile.jpg.sh +7 -0
  540. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-rgb-3c-16b.sh +7 -0
  541. data/vendor/gitlab.com/libtiff/libtiff/test/tiff2rgba-rgb-3c-8b.sh +7 -0
  542. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-g3-1d-fill.sh +7 -0
  543. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-g3-1d.sh +6 -0
  544. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-g3-2d-fill.sh +7 -0
  545. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-g3-2d.sh +6 -0
  546. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-g3.sh +6 -0
  547. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-g4.sh +6 -0
  548. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-logluv.sh +7 -0
  549. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-lzw-compat.sh +6 -0
  550. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-split-join.sh +16 -0
  551. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-split.sh +13 -0
  552. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcp-thumbnail.sh +10 -0
  553. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-logluv-3c-16b.sh +7 -0
  554. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-minisblack-1c-16b.sh +7 -0
  555. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-minisblack-1c-8b.sh +7 -0
  556. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-minisblack-2c-8b-alpha.sh +7 -0
  557. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-miniswhite-1c-1b.sh +7 -0
  558. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-palette-1c-1b.sh +7 -0
  559. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-palette-1c-4b.sh +7 -0
  560. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-palette-1c-8b.sh +7 -0
  561. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-quad-tile.jpg.sh +7 -0
  562. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-rgb-3c-16b.sh +7 -0
  563. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-R90-rgb-3c-8b.sh +7 -0
  564. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-logluv-3c-16b.sh +7 -0
  565. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-minisblack-1c-16b.sh +7 -0
  566. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-minisblack-1c-8b.sh +7 -0
  567. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-minisblack-2c-8b-alpha.sh +7 -0
  568. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-miniswhite-1c-1b.sh +7 -0
  569. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-palette-1c-1b.sh +7 -0
  570. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-palette-1c-4b.sh +7 -0
  571. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-palette-1c-8b.sh +7 -0
  572. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-quad-tile.jpg.sh +7 -0
  573. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-rgb-3c-16b.sh +7 -0
  574. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-doubleflip-rgb-3c-8b.sh +7 -0
  575. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-logluv-3c-16b.sh +7 -0
  576. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-minisblack-1c-16b.sh +7 -0
  577. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-minisblack-1c-8b.sh +7 -0
  578. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-minisblack-2c-8b-alpha.sh +7 -0
  579. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-miniswhite-1c-1b.sh +7 -0
  580. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-palette-1c-1b.sh +7 -0
  581. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-palette-1c-4b.sh +7 -0
  582. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-palette-1c-8b.sh +7 -0
  583. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-quad-tile.jpg.sh +7 -0
  584. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-rgb-3c-16b.sh +7 -0
  585. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extract-rgb-3c-8b.sh +7 -0
  586. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-logluv-3c-16b.sh +7 -0
  587. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-minisblack-1c-16b.sh +7 -0
  588. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-minisblack-1c-8b.sh +7 -0
  589. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-minisblack-2c-8b-alpha.sh +7 -0
  590. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-miniswhite-1c-1b.sh +7 -0
  591. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-palette-1c-1b.sh +7 -0
  592. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-palette-1c-4b.sh +7 -0
  593. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-palette-1c-8b.sh +7 -0
  594. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-quad-tile.jpg.sh +7 -0
  595. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-rgb-3c-16b.sh +7 -0
  596. data/vendor/gitlab.com/libtiff/libtiff/test/tiffcrop-extractz14-rgb-3c-8b.sh +7 -0
  597. data/vendor/gitlab.com/libtiff/libtiff/test/tiffdump.sh +6 -0
  598. data/vendor/gitlab.com/libtiff/libtiff/test/tiffinfo.sh +6 -0
  599. data/vendor/gitlab.com/libtiff/libtiff/test/tifftest.h +42 -0
  600. data/vendor/gitlab.com/libtiff/libtiff/tiff.spec +68 -0
  601. data/vendor/gitlab.com/libtiff/libtiff/tools/.cvsignore +27 -0
  602. data/vendor/gitlab.com/libtiff/libtiff/tools/CMakeLists.txt +125 -0
  603. data/vendor/gitlab.com/libtiff/libtiff/tools/Makefile.am +138 -0
  604. data/vendor/gitlab.com/libtiff/libtiff/tools/Makefile.in +955 -0
  605. data/vendor/gitlab.com/libtiff/libtiff/tools/Makefile.lcc +133 -0
  606. data/vendor/gitlab.com/libtiff/libtiff/tools/Makefile.vc +52 -0
  607. data/vendor/gitlab.com/libtiff/libtiff/tools/fax2ps.c +463 -0
  608. data/vendor/gitlab.com/libtiff/libtiff/tools/fax2tiff.c +491 -0
  609. data/vendor/gitlab.com/libtiff/libtiff/tools/pal2rgb.c +438 -0
  610. data/vendor/gitlab.com/libtiff/libtiff/tools/ppm2tiff.c +397 -0
  611. data/vendor/gitlab.com/libtiff/libtiff/tools/raw2tiff.c +690 -0
  612. data/vendor/gitlab.com/libtiff/libtiff/tools/rgb2ycbcr.c +397 -0
  613. data/vendor/gitlab.com/libtiff/libtiff/tools/thumbnail.c +691 -0
  614. data/vendor/gitlab.com/libtiff/libtiff/tools/tiff2bw.c +501 -0
  615. data/vendor/gitlab.com/libtiff/libtiff/tools/tiff2pdf.c +5594 -0
  616. data/vendor/gitlab.com/libtiff/libtiff/tools/tiff2ps.c +3106 -0
  617. data/vendor/gitlab.com/libtiff/libtiff/tools/tiff2rgba.c +569 -0
  618. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffcmp.c +659 -0
  619. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffcp.c +1913 -0
  620. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffcrop.c +9231 -0
  621. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffdither.c +347 -0
  622. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffdump.c +889 -0
  623. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffgt.c +486 -0
  624. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffinfo.c +488 -0
  625. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffinfoce.c +472 -0
  626. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffmedian.c +918 -0
  627. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffset.c +356 -0
  628. data/vendor/gitlab.com/libtiff/libtiff/tools/tiffsplit.c +305 -0
  629. metadata +692 -0
@@ -0,0 +1,3024 @@
1
+ /* $Id: tif_dirwrite.c,v 1.89 2017-08-23 13:33:42 erouault Exp $ */
2
+
3
+ /*
4
+ * Copyright (c) 1988-1997 Sam Leffler
5
+ * Copyright (c) 1991-1997 Silicon Graphics, Inc.
6
+ *
7
+ * Permission to use, copy, modify, distribute, and sell this software and
8
+ * its documentation for any purpose is hereby granted without fee, provided
9
+ * that (i) the above copyright notices and this permission notice appear in
10
+ * all copies of the software and related documentation, and (ii) the names of
11
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
12
+ * publicity relating to the software without the specific, prior written
13
+ * permission of Sam Leffler and Silicon Graphics.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18
+ *
19
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24
+ * OF THIS SOFTWARE.
25
+ */
26
+
27
+ /*
28
+ * TIFF Library.
29
+ *
30
+ * Directory Write Support Routines.
31
+ */
32
+ #include "tiffiop.h"
33
+ #include <float.h>
34
+
35
+ #ifdef HAVE_IEEEFP
36
+ #define TIFFCvtNativeToIEEEFloat(tif, n, fp)
37
+ #define TIFFCvtNativeToIEEEDouble(tif, n, dp)
38
+ #else
39
+ extern void TIFFCvtNativeToIEEEFloat(TIFF* tif, uint32 n, float* fp);
40
+ extern void TIFFCvtNativeToIEEEDouble(TIFF* tif, uint32 n, double* dp);
41
+ #endif
42
+
43
+ static int TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff);
44
+
45
+ static int TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value);
46
+ #if 0
47
+ static int TIFFWriteDirectoryTagSampleformatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value);
48
+ #endif
49
+
50
+ static int TIFFWriteDirectoryTagAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value);
51
+ static int TIFFWriteDirectoryTagUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value);
52
+ #ifdef notdef
53
+ static int TIFFWriteDirectoryTagByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value);
54
+ #endif
55
+ static int TIFFWriteDirectoryTagByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value);
56
+ #if 0
57
+ static int TIFFWriteDirectoryTagBytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value);
58
+ #endif
59
+ #ifdef notdef
60
+ static int TIFFWriteDirectoryTagSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value);
61
+ #endif
62
+ static int TIFFWriteDirectoryTagSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value);
63
+ #if 0
64
+ static int TIFFWriteDirectoryTagSbytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value);
65
+ #endif
66
+ static int TIFFWriteDirectoryTagShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value);
67
+ static int TIFFWriteDirectoryTagShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value);
68
+ static int TIFFWriteDirectoryTagShortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value);
69
+ #ifdef notdef
70
+ static int TIFFWriteDirectoryTagSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value);
71
+ #endif
72
+ static int TIFFWriteDirectoryTagSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value);
73
+ #if 0
74
+ static int TIFFWriteDirectoryTagSshortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value);
75
+ #endif
76
+ static int TIFFWriteDirectoryTagLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value);
77
+ static int TIFFWriteDirectoryTagLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value);
78
+ #if 0
79
+ static int TIFFWriteDirectoryTagLongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value);
80
+ #endif
81
+ #ifdef notdef
82
+ static int TIFFWriteDirectoryTagSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value);
83
+ #endif
84
+ static int TIFFWriteDirectoryTagSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value);
85
+ #if 0
86
+ static int TIFFWriteDirectoryTagSlongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value);
87
+ #endif
88
+ #ifdef notdef
89
+ static int TIFFWriteDirectoryTagLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value);
90
+ #endif
91
+ static int TIFFWriteDirectoryTagLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
92
+ #ifdef notdef
93
+ static int TIFFWriteDirectoryTagSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value);
94
+ #endif
95
+ static int TIFFWriteDirectoryTagSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value);
96
+ static int TIFFWriteDirectoryTagRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value);
97
+ static int TIFFWriteDirectoryTagRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value);
98
+ static int TIFFWriteDirectoryTagSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value);
99
+ #ifdef notdef
100
+ static int TIFFWriteDirectoryTagFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value);
101
+ #endif
102
+ static int TIFFWriteDirectoryTagFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value);
103
+ #if 0
104
+ static int TIFFWriteDirectoryTagFloatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value);
105
+ #endif
106
+ #ifdef notdef
107
+ static int TIFFWriteDirectoryTagDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value);
108
+ #endif
109
+ static int TIFFWriteDirectoryTagDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value);
110
+ #if 0
111
+ static int TIFFWriteDirectoryTagDoublePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value);
112
+ #endif
113
+ static int TIFFWriteDirectoryTagIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value);
114
+ #ifdef notdef
115
+ static int TIFFWriteDirectoryTagIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
116
+ #endif
117
+ static int TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value);
118
+ static int TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
119
+ static int TIFFWriteDirectoryTagIfdIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
120
+ #ifdef notdef
121
+ static int TIFFWriteDirectoryTagShortLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
122
+ #endif
123
+ static int TIFFWriteDirectoryTagColormap(TIFF* tif, uint32* ndir, TIFFDirEntry* dir);
124
+ static int TIFFWriteDirectoryTagTransferfunction(TIFF* tif, uint32* ndir, TIFFDirEntry* dir);
125
+ static int TIFFWriteDirectoryTagSubifd(TIFF* tif, uint32* ndir, TIFFDirEntry* dir);
126
+
127
+ static int TIFFWriteDirectoryTagCheckedAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value);
128
+ static int TIFFWriteDirectoryTagCheckedUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value);
129
+ #ifdef notdef
130
+ static int TIFFWriteDirectoryTagCheckedByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value);
131
+ #endif
132
+ static int TIFFWriteDirectoryTagCheckedByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value);
133
+ #ifdef notdef
134
+ static int TIFFWriteDirectoryTagCheckedSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value);
135
+ #endif
136
+ static int TIFFWriteDirectoryTagCheckedSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value);
137
+ static int TIFFWriteDirectoryTagCheckedShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value);
138
+ static int TIFFWriteDirectoryTagCheckedShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value);
139
+ #ifdef notdef
140
+ static int TIFFWriteDirectoryTagCheckedSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value);
141
+ #endif
142
+ static int TIFFWriteDirectoryTagCheckedSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value);
143
+ static int TIFFWriteDirectoryTagCheckedLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value);
144
+ static int TIFFWriteDirectoryTagCheckedLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value);
145
+ #ifdef notdef
146
+ static int TIFFWriteDirectoryTagCheckedSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value);
147
+ #endif
148
+ static int TIFFWriteDirectoryTagCheckedSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value);
149
+ #ifdef notdef
150
+ static int TIFFWriteDirectoryTagCheckedLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value);
151
+ #endif
152
+ static int TIFFWriteDirectoryTagCheckedLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
153
+ #ifdef notdef
154
+ static int TIFFWriteDirectoryTagCheckedSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value);
155
+ #endif
156
+ static int TIFFWriteDirectoryTagCheckedSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value);
157
+ static int TIFFWriteDirectoryTagCheckedRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value);
158
+ static int TIFFWriteDirectoryTagCheckedRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value);
159
+ static int TIFFWriteDirectoryTagCheckedSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value);
160
+ #ifdef notdef
161
+ static int TIFFWriteDirectoryTagCheckedFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value);
162
+ #endif
163
+ static int TIFFWriteDirectoryTagCheckedFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value);
164
+ #ifdef notdef
165
+ static int TIFFWriteDirectoryTagCheckedDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value);
166
+ #endif
167
+ static int TIFFWriteDirectoryTagCheckedDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value);
168
+ static int TIFFWriteDirectoryTagCheckedIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value);
169
+ static int TIFFWriteDirectoryTagCheckedIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value);
170
+
171
+ static int TIFFWriteDirectoryTagData(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 datatype, uint32 count, uint32 datalength, void* data);
172
+
173
+ static int TIFFLinkDirectory(TIFF*);
174
+
175
+ /*
176
+ * Write the contents of the current directory
177
+ * to the specified file. This routine doesn't
178
+ * handle overwriting a directory with auxiliary
179
+ * storage that's been changed.
180
+ */
181
+ int
182
+ TIFFWriteDirectory(TIFF* tif)
183
+ {
184
+ return TIFFWriteDirectorySec(tif,TRUE,TRUE,NULL);
185
+ }
186
+
187
+ /*
188
+ * Similar to TIFFWriteDirectory(), writes the directory out
189
+ * but leaves all data structures in memory so that it can be
190
+ * written again. This will make a partially written TIFF file
191
+ * readable before it is successfully completed/closed.
192
+ */
193
+ int
194
+ TIFFCheckpointDirectory(TIFF* tif)
195
+ {
196
+ int rc;
197
+ /* Setup the strips arrays, if they haven't already been. */
198
+ if (tif->tif_dir.td_stripoffset == NULL)
199
+ (void) TIFFSetupStrips(tif);
200
+ rc = TIFFWriteDirectorySec(tif,TRUE,FALSE,NULL);
201
+ (void) TIFFSetWriteOffset(tif, TIFFSeekFile(tif, 0, SEEK_END));
202
+ return rc;
203
+ }
204
+
205
+ int
206
+ TIFFWriteCustomDirectory(TIFF* tif, uint64* pdiroff)
207
+ {
208
+ return TIFFWriteDirectorySec(tif,FALSE,FALSE,pdiroff);
209
+ }
210
+
211
+ /*
212
+ * Similar to TIFFWriteDirectory(), but if the directory has already
213
+ * been written once, it is relocated to the end of the file, in case it
214
+ * has changed in size. Note that this will result in the loss of the
215
+ * previously used directory space.
216
+ */
217
+ int
218
+ TIFFRewriteDirectory( TIFF *tif )
219
+ {
220
+ static const char module[] = "TIFFRewriteDirectory";
221
+
222
+ /* We don't need to do anything special if it hasn't been written. */
223
+ if( tif->tif_diroff == 0 )
224
+ return TIFFWriteDirectory( tif );
225
+
226
+ /*
227
+ * Find and zero the pointer to this directory, so that TIFFLinkDirectory
228
+ * will cause it to be added after this directories current pre-link.
229
+ */
230
+
231
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
232
+ {
233
+ if (tif->tif_header.classic.tiff_diroff == tif->tif_diroff)
234
+ {
235
+ tif->tif_header.classic.tiff_diroff = 0;
236
+ tif->tif_diroff = 0;
237
+
238
+ TIFFSeekFile(tif,4,SEEK_SET);
239
+ if (!WriteOK(tif, &(tif->tif_header.classic.tiff_diroff),4))
240
+ {
241
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
242
+ "Error updating TIFF header");
243
+ return (0);
244
+ }
245
+ }
246
+ else
247
+ {
248
+ uint32 nextdir;
249
+ nextdir = tif->tif_header.classic.tiff_diroff;
250
+ while(1) {
251
+ uint16 dircount;
252
+ uint32 nextnextdir;
253
+
254
+ if (!SeekOK(tif, nextdir) ||
255
+ !ReadOK(tif, &dircount, 2)) {
256
+ TIFFErrorExt(tif->tif_clientdata, module,
257
+ "Error fetching directory count");
258
+ return (0);
259
+ }
260
+ if (tif->tif_flags & TIFF_SWAB)
261
+ TIFFSwabShort(&dircount);
262
+ (void) TIFFSeekFile(tif,
263
+ nextdir+2+dircount*12, SEEK_SET);
264
+ if (!ReadOK(tif, &nextnextdir, 4)) {
265
+ TIFFErrorExt(tif->tif_clientdata, module,
266
+ "Error fetching directory link");
267
+ return (0);
268
+ }
269
+ if (tif->tif_flags & TIFF_SWAB)
270
+ TIFFSwabLong(&nextnextdir);
271
+ if (nextnextdir==tif->tif_diroff)
272
+ {
273
+ uint32 m;
274
+ m=0;
275
+ (void) TIFFSeekFile(tif,
276
+ nextdir+2+dircount*12, SEEK_SET);
277
+ if (!WriteOK(tif, &m, 4)) {
278
+ TIFFErrorExt(tif->tif_clientdata, module,
279
+ "Error writing directory link");
280
+ return (0);
281
+ }
282
+ tif->tif_diroff=0;
283
+ break;
284
+ }
285
+ nextdir=nextnextdir;
286
+ }
287
+ }
288
+ }
289
+ else
290
+ {
291
+ if (tif->tif_header.big.tiff_diroff == tif->tif_diroff)
292
+ {
293
+ tif->tif_header.big.tiff_diroff = 0;
294
+ tif->tif_diroff = 0;
295
+
296
+ TIFFSeekFile(tif,8,SEEK_SET);
297
+ if (!WriteOK(tif, &(tif->tif_header.big.tiff_diroff),8))
298
+ {
299
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
300
+ "Error updating TIFF header");
301
+ return (0);
302
+ }
303
+ }
304
+ else
305
+ {
306
+ uint64 nextdir;
307
+ nextdir = tif->tif_header.big.tiff_diroff;
308
+ while(1) {
309
+ uint64 dircount64;
310
+ uint16 dircount;
311
+ uint64 nextnextdir;
312
+
313
+ if (!SeekOK(tif, nextdir) ||
314
+ !ReadOK(tif, &dircount64, 8)) {
315
+ TIFFErrorExt(tif->tif_clientdata, module,
316
+ "Error fetching directory count");
317
+ return (0);
318
+ }
319
+ if (tif->tif_flags & TIFF_SWAB)
320
+ TIFFSwabLong8(&dircount64);
321
+ if (dircount64>0xFFFF)
322
+ {
323
+ TIFFErrorExt(tif->tif_clientdata, module,
324
+ "Sanity check on tag count failed, likely corrupt TIFF");
325
+ return (0);
326
+ }
327
+ dircount=(uint16)dircount64;
328
+ (void) TIFFSeekFile(tif,
329
+ nextdir+8+dircount*20, SEEK_SET);
330
+ if (!ReadOK(tif, &nextnextdir, 8)) {
331
+ TIFFErrorExt(tif->tif_clientdata, module,
332
+ "Error fetching directory link");
333
+ return (0);
334
+ }
335
+ if (tif->tif_flags & TIFF_SWAB)
336
+ TIFFSwabLong8(&nextnextdir);
337
+ if (nextnextdir==tif->tif_diroff)
338
+ {
339
+ uint64 m;
340
+ m=0;
341
+ (void) TIFFSeekFile(tif,
342
+ nextdir+8+dircount*20, SEEK_SET);
343
+ if (!WriteOK(tif, &m, 8)) {
344
+ TIFFErrorExt(tif->tif_clientdata, module,
345
+ "Error writing directory link");
346
+ return (0);
347
+ }
348
+ tif->tif_diroff=0;
349
+ break;
350
+ }
351
+ nextdir=nextnextdir;
352
+ }
353
+ }
354
+ }
355
+
356
+ /*
357
+ * Now use TIFFWriteDirectory() normally.
358
+ */
359
+
360
+ return TIFFWriteDirectory( tif );
361
+ }
362
+
363
+ static int
364
+ TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff)
365
+ {
366
+ static const char module[] = "TIFFWriteDirectorySec";
367
+ uint32 ndir;
368
+ TIFFDirEntry* dir;
369
+ uint32 dirsize;
370
+ void* dirmem;
371
+ uint32 m;
372
+ if (tif->tif_mode == O_RDONLY)
373
+ return (1);
374
+
375
+ _TIFFFillStriles( tif );
376
+
377
+ /*
378
+ * Clear write state so that subsequent images with
379
+ * different characteristics get the right buffers
380
+ * setup for them.
381
+ */
382
+ if (imagedone)
383
+ {
384
+ if (tif->tif_flags & TIFF_POSTENCODE)
385
+ {
386
+ tif->tif_flags &= ~TIFF_POSTENCODE;
387
+ if (!(*tif->tif_postencode)(tif))
388
+ {
389
+ TIFFErrorExt(tif->tif_clientdata,module,
390
+ "Error post-encoding before directory write");
391
+ return (0);
392
+ }
393
+ }
394
+ (*tif->tif_close)(tif); /* shutdown encoder */
395
+ /*
396
+ * Flush any data that might have been written
397
+ * by the compression close+cleanup routines. But
398
+ * be careful not to write stuff if we didn't add data
399
+ * in the previous steps as the "rawcc" data may well be
400
+ * a previously read tile/strip in mixed read/write mode.
401
+ */
402
+ if (tif->tif_rawcc > 0
403
+ && (tif->tif_flags & TIFF_BEENWRITING) != 0 )
404
+ {
405
+ if( !TIFFFlushData1(tif) )
406
+ {
407
+ TIFFErrorExt(tif->tif_clientdata, module,
408
+ "Error flushing data before directory write");
409
+ return (0);
410
+ }
411
+ }
412
+ if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
413
+ {
414
+ _TIFFfree(tif->tif_rawdata);
415
+ tif->tif_rawdata = NULL;
416
+ tif->tif_rawcc = 0;
417
+ tif->tif_rawdatasize = 0;
418
+ tif->tif_rawdataoff = 0;
419
+ tif->tif_rawdataloaded = 0;
420
+ }
421
+ tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP);
422
+ }
423
+ dir=NULL;
424
+ dirmem=NULL;
425
+ dirsize=0;
426
+ while (1)
427
+ {
428
+ ndir=0;
429
+ if (isimage)
430
+ {
431
+ if (TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS))
432
+ {
433
+ if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_IMAGEWIDTH,tif->tif_dir.td_imagewidth))
434
+ goto bad;
435
+ if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_IMAGELENGTH,tif->tif_dir.td_imagelength))
436
+ goto bad;
437
+ }
438
+ if (TIFFFieldSet(tif,FIELD_TILEDIMENSIONS))
439
+ {
440
+ if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_TILEWIDTH,tif->tif_dir.td_tilewidth))
441
+ goto bad;
442
+ if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_TILELENGTH,tif->tif_dir.td_tilelength))
443
+ goto bad;
444
+ }
445
+ if (TIFFFieldSet(tif,FIELD_RESOLUTION))
446
+ {
447
+ if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_XRESOLUTION,tif->tif_dir.td_xresolution))
448
+ goto bad;
449
+ if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_YRESOLUTION,tif->tif_dir.td_yresolution))
450
+ goto bad;
451
+ }
452
+ if (TIFFFieldSet(tif,FIELD_POSITION))
453
+ {
454
+ if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_XPOSITION,tif->tif_dir.td_xposition))
455
+ goto bad;
456
+ if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_YPOSITION,tif->tif_dir.td_yposition))
457
+ goto bad;
458
+ }
459
+ if (TIFFFieldSet(tif,FIELD_SUBFILETYPE))
460
+ {
461
+ if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,TIFFTAG_SUBFILETYPE,tif->tif_dir.td_subfiletype))
462
+ goto bad;
463
+ }
464
+ if (TIFFFieldSet(tif,FIELD_BITSPERSAMPLE))
465
+ {
466
+ if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_BITSPERSAMPLE,tif->tif_dir.td_bitspersample))
467
+ goto bad;
468
+ }
469
+ if (TIFFFieldSet(tif,FIELD_COMPRESSION))
470
+ {
471
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_COMPRESSION,tif->tif_dir.td_compression))
472
+ goto bad;
473
+ }
474
+ if (TIFFFieldSet(tif,FIELD_PHOTOMETRIC))
475
+ {
476
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_PHOTOMETRIC,tif->tif_dir.td_photometric))
477
+ goto bad;
478
+ }
479
+ if (TIFFFieldSet(tif,FIELD_THRESHHOLDING))
480
+ {
481
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_THRESHHOLDING,tif->tif_dir.td_threshholding))
482
+ goto bad;
483
+ }
484
+ if (TIFFFieldSet(tif,FIELD_FILLORDER))
485
+ {
486
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_FILLORDER,tif->tif_dir.td_fillorder))
487
+ goto bad;
488
+ }
489
+ if (TIFFFieldSet(tif,FIELD_ORIENTATION))
490
+ {
491
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_ORIENTATION,tif->tif_dir.td_orientation))
492
+ goto bad;
493
+ }
494
+ if (TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL))
495
+ {
496
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_SAMPLESPERPIXEL,tif->tif_dir.td_samplesperpixel))
497
+ goto bad;
498
+ }
499
+ if (TIFFFieldSet(tif,FIELD_ROWSPERSTRIP))
500
+ {
501
+ if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_ROWSPERSTRIP,tif->tif_dir.td_rowsperstrip))
502
+ goto bad;
503
+ }
504
+ if (TIFFFieldSet(tif,FIELD_MINSAMPLEVALUE))
505
+ {
506
+ if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_MINSAMPLEVALUE,tif->tif_dir.td_minsamplevalue))
507
+ goto bad;
508
+ }
509
+ if (TIFFFieldSet(tif,FIELD_MAXSAMPLEVALUE))
510
+ {
511
+ if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_MAXSAMPLEVALUE,tif->tif_dir.td_maxsamplevalue))
512
+ goto bad;
513
+ }
514
+ if (TIFFFieldSet(tif,FIELD_PLANARCONFIG))
515
+ {
516
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_PLANARCONFIG,tif->tif_dir.td_planarconfig))
517
+ goto bad;
518
+ }
519
+ if (TIFFFieldSet(tif,FIELD_RESOLUTIONUNIT))
520
+ {
521
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_RESOLUTIONUNIT,tif->tif_dir.td_resolutionunit))
522
+ goto bad;
523
+ }
524
+ if (TIFFFieldSet(tif,FIELD_PAGENUMBER))
525
+ {
526
+ if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_PAGENUMBER,2,&tif->tif_dir.td_pagenumber[0]))
527
+ goto bad;
528
+ }
529
+ if (TIFFFieldSet(tif,FIELD_STRIPBYTECOUNTS))
530
+ {
531
+ if (!isTiled(tif))
532
+ {
533
+ if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount))
534
+ goto bad;
535
+ }
536
+ else
537
+ {
538
+ if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount))
539
+ goto bad;
540
+ }
541
+ }
542
+ if (TIFFFieldSet(tif,FIELD_STRIPOFFSETS))
543
+ {
544
+ if (!isTiled(tif))
545
+ {
546
+ /* td_stripoffset might be NULL in an odd OJPEG case. See
547
+ * tif_dirread.c around line 3634.
548
+ * XXX: OJPEG hack.
549
+ * If a) compression is OJPEG, b) it's not a tiled TIFF,
550
+ * and c) the number of strips is 1,
551
+ * then we tolerate the absence of stripoffsets tag,
552
+ * because, presumably, all required data is in the
553
+ * JpegInterchangeFormat stream.
554
+ * We can get here when using tiffset on such a file.
555
+ * See http://bugzilla.maptools.org/show_bug.cgi?id=2500
556
+ */
557
+ if (tif->tif_dir.td_stripoffset != NULL &&
558
+ !TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset))
559
+ goto bad;
560
+ }
561
+ else
562
+ {
563
+ if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset))
564
+ goto bad;
565
+ }
566
+ }
567
+ if (TIFFFieldSet(tif,FIELD_COLORMAP))
568
+ {
569
+ if (!TIFFWriteDirectoryTagColormap(tif,&ndir,dir))
570
+ goto bad;
571
+ }
572
+ if (TIFFFieldSet(tif,FIELD_EXTRASAMPLES))
573
+ {
574
+ if (tif->tif_dir.td_extrasamples)
575
+ {
576
+ uint16 na;
577
+ uint16* nb;
578
+ TIFFGetFieldDefaulted(tif,TIFFTAG_EXTRASAMPLES,&na,&nb);
579
+ if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_EXTRASAMPLES,na,nb))
580
+ goto bad;
581
+ }
582
+ }
583
+ if (TIFFFieldSet(tif,FIELD_SAMPLEFORMAT))
584
+ {
585
+ if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_SAMPLEFORMAT,tif->tif_dir.td_sampleformat))
586
+ goto bad;
587
+ }
588
+ if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE))
589
+ {
590
+ if (!TIFFWriteDirectoryTagSampleformatArray(tif,&ndir,dir,TIFFTAG_SMINSAMPLEVALUE,tif->tif_dir.td_samplesperpixel,tif->tif_dir.td_sminsamplevalue))
591
+ goto bad;
592
+ }
593
+ if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE))
594
+ {
595
+ if (!TIFFWriteDirectoryTagSampleformatArray(tif,&ndir,dir,TIFFTAG_SMAXSAMPLEVALUE,tif->tif_dir.td_samplesperpixel,tif->tif_dir.td_smaxsamplevalue))
596
+ goto bad;
597
+ }
598
+ if (TIFFFieldSet(tif,FIELD_IMAGEDEPTH))
599
+ {
600
+ if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,TIFFTAG_IMAGEDEPTH,tif->tif_dir.td_imagedepth))
601
+ goto bad;
602
+ }
603
+ if (TIFFFieldSet(tif,FIELD_TILEDEPTH))
604
+ {
605
+ if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,TIFFTAG_TILEDEPTH,tif->tif_dir.td_tiledepth))
606
+ goto bad;
607
+ }
608
+ if (TIFFFieldSet(tif,FIELD_HALFTONEHINTS))
609
+ {
610
+ if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_HALFTONEHINTS,2,&tif->tif_dir.td_halftonehints[0]))
611
+ goto bad;
612
+ }
613
+ if (TIFFFieldSet(tif,FIELD_YCBCRSUBSAMPLING))
614
+ {
615
+ if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_YCBCRSUBSAMPLING,2,&tif->tif_dir.td_ycbcrsubsampling[0]))
616
+ goto bad;
617
+ }
618
+ if (TIFFFieldSet(tif,FIELD_YCBCRPOSITIONING))
619
+ {
620
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_YCBCRPOSITIONING,tif->tif_dir.td_ycbcrpositioning))
621
+ goto bad;
622
+ }
623
+ if (TIFFFieldSet(tif,FIELD_REFBLACKWHITE))
624
+ {
625
+ if (!TIFFWriteDirectoryTagRationalArray(tif,&ndir,dir,TIFFTAG_REFERENCEBLACKWHITE,6,tif->tif_dir.td_refblackwhite))
626
+ goto bad;
627
+ }
628
+ if (TIFFFieldSet(tif,FIELD_TRANSFERFUNCTION))
629
+ {
630
+ if (!TIFFWriteDirectoryTagTransferfunction(tif,&ndir,dir))
631
+ goto bad;
632
+ }
633
+ if (TIFFFieldSet(tif,FIELD_INKNAMES))
634
+ {
635
+ if (!TIFFWriteDirectoryTagAscii(tif,&ndir,dir,TIFFTAG_INKNAMES,tif->tif_dir.td_inknameslen,tif->tif_dir.td_inknames))
636
+ goto bad;
637
+ }
638
+ if (TIFFFieldSet(tif,FIELD_SUBIFD))
639
+ {
640
+ if (!TIFFWriteDirectoryTagSubifd(tif,&ndir,dir))
641
+ goto bad;
642
+ }
643
+ {
644
+ uint32 n;
645
+ for (n=0; n<tif->tif_nfields; n++) {
646
+ const TIFFField* o;
647
+ o = tif->tif_fields[n];
648
+ if ((o->field_bit>=FIELD_CODEC)&&(TIFFFieldSet(tif,o->field_bit)))
649
+ {
650
+ switch (o->get_field_type)
651
+ {
652
+ case TIFF_SETGET_ASCII:
653
+ {
654
+ uint32 pa;
655
+ char* pb;
656
+ assert(o->field_type==TIFF_ASCII);
657
+ assert(o->field_readcount==TIFF_VARIABLE);
658
+ assert(o->field_passcount==0);
659
+ TIFFGetField(tif,o->field_tag,&pb);
660
+ pa=(uint32)(strlen(pb));
661
+ if (!TIFFWriteDirectoryTagAscii(tif,&ndir,dir,(uint16)o->field_tag,pa,pb))
662
+ goto bad;
663
+ }
664
+ break;
665
+ case TIFF_SETGET_UINT16:
666
+ {
667
+ uint16 p;
668
+ assert(o->field_type==TIFF_SHORT);
669
+ assert(o->field_readcount==1);
670
+ assert(o->field_passcount==0);
671
+ TIFFGetField(tif,o->field_tag,&p);
672
+ if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,(uint16)o->field_tag,p))
673
+ goto bad;
674
+ }
675
+ break;
676
+ case TIFF_SETGET_UINT32:
677
+ {
678
+ uint32 p;
679
+ assert(o->field_type==TIFF_LONG);
680
+ assert(o->field_readcount==1);
681
+ assert(o->field_passcount==0);
682
+ TIFFGetField(tif,o->field_tag,&p);
683
+ if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,(uint16)o->field_tag,p))
684
+ goto bad;
685
+ }
686
+ break;
687
+ case TIFF_SETGET_C32_UINT8:
688
+ {
689
+ uint32 pa;
690
+ void* pb;
691
+ assert(o->field_type==TIFF_UNDEFINED);
692
+ assert(o->field_readcount==TIFF_VARIABLE2);
693
+ assert(o->field_passcount==1);
694
+ TIFFGetField(tif,o->field_tag,&pa,&pb);
695
+ if (!TIFFWriteDirectoryTagUndefinedArray(tif,&ndir,dir,(uint16)o->field_tag,pa,pb))
696
+ goto bad;
697
+ }
698
+ break;
699
+ default:
700
+ assert(0); /* we should never get here */
701
+ break;
702
+ }
703
+ }
704
+ }
705
+ }
706
+ }
707
+ for (m=0; m<(uint32)(tif->tif_dir.td_customValueCount); m++)
708
+ {
709
+ uint16 tag = (uint16)tif->tif_dir.td_customValues[m].info->field_tag;
710
+ uint32 count = tif->tif_dir.td_customValues[m].count;
711
+ switch (tif->tif_dir.td_customValues[m].info->field_type)
712
+ {
713
+ case TIFF_ASCII:
714
+ if (!TIFFWriteDirectoryTagAscii(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
715
+ goto bad;
716
+ break;
717
+ case TIFF_UNDEFINED:
718
+ if (!TIFFWriteDirectoryTagUndefinedArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
719
+ goto bad;
720
+ break;
721
+ case TIFF_BYTE:
722
+ if (!TIFFWriteDirectoryTagByteArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
723
+ goto bad;
724
+ break;
725
+ case TIFF_SBYTE:
726
+ if (!TIFFWriteDirectoryTagSbyteArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
727
+ goto bad;
728
+ break;
729
+ case TIFF_SHORT:
730
+ if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
731
+ goto bad;
732
+ break;
733
+ case TIFF_SSHORT:
734
+ if (!TIFFWriteDirectoryTagSshortArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
735
+ goto bad;
736
+ break;
737
+ case TIFF_LONG:
738
+ if (!TIFFWriteDirectoryTagLongArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
739
+ goto bad;
740
+ break;
741
+ case TIFF_SLONG:
742
+ if (!TIFFWriteDirectoryTagSlongArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
743
+ goto bad;
744
+ break;
745
+ case TIFF_LONG8:
746
+ if (!TIFFWriteDirectoryTagLong8Array(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
747
+ goto bad;
748
+ break;
749
+ case TIFF_SLONG8:
750
+ if (!TIFFWriteDirectoryTagSlong8Array(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
751
+ goto bad;
752
+ break;
753
+ case TIFF_RATIONAL:
754
+ if (!TIFFWriteDirectoryTagRationalArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
755
+ goto bad;
756
+ break;
757
+ case TIFF_SRATIONAL:
758
+ if (!TIFFWriteDirectoryTagSrationalArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
759
+ goto bad;
760
+ break;
761
+ case TIFF_FLOAT:
762
+ if (!TIFFWriteDirectoryTagFloatArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
763
+ goto bad;
764
+ break;
765
+ case TIFF_DOUBLE:
766
+ if (!TIFFWriteDirectoryTagDoubleArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
767
+ goto bad;
768
+ break;
769
+ case TIFF_IFD:
770
+ if (!TIFFWriteDirectoryTagIfdArray(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
771
+ goto bad;
772
+ break;
773
+ case TIFF_IFD8:
774
+ if (!TIFFWriteDirectoryTagIfdIfd8Array(tif,&ndir,dir,tag,count,tif->tif_dir.td_customValues[m].value))
775
+ goto bad;
776
+ break;
777
+ default:
778
+ assert(0); /* we should never get here */
779
+ break;
780
+ }
781
+ }
782
+ if (dir!=NULL)
783
+ break;
784
+ dir=_TIFFmalloc(ndir*sizeof(TIFFDirEntry));
785
+ if (dir==NULL)
786
+ {
787
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
788
+ goto bad;
789
+ }
790
+ if (isimage)
791
+ {
792
+ if ((tif->tif_diroff==0)&&(!TIFFLinkDirectory(tif)))
793
+ goto bad;
794
+ }
795
+ else
796
+ tif->tif_diroff=(TIFFSeekFile(tif,0,SEEK_END)+1)&(~((toff_t)1));
797
+ if (pdiroff!=NULL)
798
+ *pdiroff=tif->tif_diroff;
799
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
800
+ dirsize=2+ndir*12+4;
801
+ else
802
+ dirsize=8+ndir*20+8;
803
+ tif->tif_dataoff=tif->tif_diroff+dirsize;
804
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
805
+ tif->tif_dataoff=(uint32)tif->tif_dataoff;
806
+ if ((tif->tif_dataoff<tif->tif_diroff)||(tif->tif_dataoff<(uint64)dirsize))
807
+ {
808
+ TIFFErrorExt(tif->tif_clientdata,module,"Maximum TIFF file size exceeded");
809
+ goto bad;
810
+ }
811
+ if (tif->tif_dataoff&1)
812
+ tif->tif_dataoff++;
813
+ if (isimage)
814
+ tif->tif_curdir++;
815
+ }
816
+ if (isimage)
817
+ {
818
+ if (TIFFFieldSet(tif,FIELD_SUBIFD)&&(tif->tif_subifdoff==0))
819
+ {
820
+ uint32 na;
821
+ TIFFDirEntry* nb;
822
+ for (na=0, nb=dir; ; na++, nb++)
823
+ {
824
+ if( na == ndir )
825
+ {
826
+ TIFFErrorExt(tif->tif_clientdata,module,
827
+ "Cannot find SubIFD tag");
828
+ goto bad;
829
+ }
830
+ if (nb->tdir_tag==TIFFTAG_SUBIFD)
831
+ break;
832
+ }
833
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
834
+ tif->tif_subifdoff=tif->tif_diroff+2+na*12+8;
835
+ else
836
+ tif->tif_subifdoff=tif->tif_diroff+8+na*20+12;
837
+ }
838
+ }
839
+ dirmem=_TIFFmalloc(dirsize);
840
+ if (dirmem==NULL)
841
+ {
842
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
843
+ goto bad;
844
+ }
845
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
846
+ {
847
+ uint8* n;
848
+ uint32 nTmp;
849
+ TIFFDirEntry* o;
850
+ n=dirmem;
851
+ *(uint16*)n=(uint16)ndir;
852
+ if (tif->tif_flags&TIFF_SWAB)
853
+ TIFFSwabShort((uint16*)n);
854
+ n+=2;
855
+ o=dir;
856
+ for (m=0; m<ndir; m++)
857
+ {
858
+ *(uint16*)n=o->tdir_tag;
859
+ if (tif->tif_flags&TIFF_SWAB)
860
+ TIFFSwabShort((uint16*)n);
861
+ n+=2;
862
+ *(uint16*)n=o->tdir_type;
863
+ if (tif->tif_flags&TIFF_SWAB)
864
+ TIFFSwabShort((uint16*)n);
865
+ n+=2;
866
+ nTmp = (uint32)o->tdir_count;
867
+ _TIFFmemcpy(n,&nTmp,4);
868
+ if (tif->tif_flags&TIFF_SWAB)
869
+ TIFFSwabLong((uint32*)n);
870
+ n+=4;
871
+ /* This is correct. The data has been */
872
+ /* swabbed previously in TIFFWriteDirectoryTagData */
873
+ _TIFFmemcpy(n,&o->tdir_offset,4);
874
+ n+=4;
875
+ o++;
876
+ }
877
+ nTmp = (uint32)tif->tif_nextdiroff;
878
+ if (tif->tif_flags&TIFF_SWAB)
879
+ TIFFSwabLong(&nTmp);
880
+ _TIFFmemcpy(n,&nTmp,4);
881
+ }
882
+ else
883
+ {
884
+ uint8* n;
885
+ TIFFDirEntry* o;
886
+ n=dirmem;
887
+ *(uint64*)n=ndir;
888
+ if (tif->tif_flags&TIFF_SWAB)
889
+ TIFFSwabLong8((uint64*)n);
890
+ n+=8;
891
+ o=dir;
892
+ for (m=0; m<ndir; m++)
893
+ {
894
+ *(uint16*)n=o->tdir_tag;
895
+ if (tif->tif_flags&TIFF_SWAB)
896
+ TIFFSwabShort((uint16*)n);
897
+ n+=2;
898
+ *(uint16*)n=o->tdir_type;
899
+ if (tif->tif_flags&TIFF_SWAB)
900
+ TIFFSwabShort((uint16*)n);
901
+ n+=2;
902
+ _TIFFmemcpy(n,&o->tdir_count,8);
903
+ if (tif->tif_flags&TIFF_SWAB)
904
+ TIFFSwabLong8((uint64*)n);
905
+ n+=8;
906
+ _TIFFmemcpy(n,&o->tdir_offset,8);
907
+ n+=8;
908
+ o++;
909
+ }
910
+ _TIFFmemcpy(n,&tif->tif_nextdiroff,8);
911
+ if (tif->tif_flags&TIFF_SWAB)
912
+ TIFFSwabLong8((uint64*)n);
913
+ }
914
+ _TIFFfree(dir);
915
+ dir=NULL;
916
+ if (!SeekOK(tif,tif->tif_diroff))
917
+ {
918
+ TIFFErrorExt(tif->tif_clientdata,module,"IO error writing directory");
919
+ goto bad;
920
+ }
921
+ if (!WriteOK(tif,dirmem,(tmsize_t)dirsize))
922
+ {
923
+ TIFFErrorExt(tif->tif_clientdata,module,"IO error writing directory");
924
+ goto bad;
925
+ }
926
+ _TIFFfree(dirmem);
927
+ if (imagedone)
928
+ {
929
+ TIFFFreeDirectory(tif);
930
+ tif->tif_flags &= ~TIFF_DIRTYDIRECT;
931
+ tif->tif_flags &= ~TIFF_DIRTYSTRIP;
932
+ (*tif->tif_cleanup)(tif);
933
+ /*
934
+ * Reset directory-related state for subsequent
935
+ * directories.
936
+ */
937
+ TIFFCreateDirectory(tif);
938
+ }
939
+ return(1);
940
+ bad:
941
+ if (dir!=NULL)
942
+ _TIFFfree(dir);
943
+ if (dirmem!=NULL)
944
+ _TIFFfree(dirmem);
945
+ return(0);
946
+ }
947
+
948
+ static float TIFFClampDoubleToFloat( double val )
949
+ {
950
+ if( val > FLT_MAX )
951
+ return FLT_MAX;
952
+ if( val < -FLT_MAX )
953
+ return -FLT_MAX;
954
+ return (float)val;
955
+ }
956
+
957
+ static int8 TIFFClampDoubleToInt8( double val )
958
+ {
959
+ if( val > 127 )
960
+ return 127;
961
+ if( val < -128 || val != val )
962
+ return -128;
963
+ return (int8)val;
964
+ }
965
+
966
+ static int16 TIFFClampDoubleToInt16( double val )
967
+ {
968
+ if( val > 32767 )
969
+ return 32767;
970
+ if( val < -32768 || val != val )
971
+ return -32768;
972
+ return (int16)val;
973
+ }
974
+
975
+ static int32 TIFFClampDoubleToInt32( double val )
976
+ {
977
+ if( val > 0x7FFFFFFF )
978
+ return 0x7FFFFFFF;
979
+ if( val < -0x7FFFFFFF-1 || val != val )
980
+ return -0x7FFFFFFF-1;
981
+ return (int32)val;
982
+ }
983
+
984
+ static uint8 TIFFClampDoubleToUInt8( double val )
985
+ {
986
+ if( val < 0 )
987
+ return 0;
988
+ if( val > 255 || val != val )
989
+ return 255;
990
+ return (uint8)val;
991
+ }
992
+
993
+ static uint16 TIFFClampDoubleToUInt16( double val )
994
+ {
995
+ if( val < 0 )
996
+ return 0;
997
+ if( val > 65535 || val != val )
998
+ return 65535;
999
+ return (uint16)val;
1000
+ }
1001
+
1002
+ static uint32 TIFFClampDoubleToUInt32( double val )
1003
+ {
1004
+ if( val < 0 )
1005
+ return 0;
1006
+ if( val > 0xFFFFFFFFU || val != val )
1007
+ return 0xFFFFFFFFU;
1008
+ return (uint32)val;
1009
+ }
1010
+
1011
+ static int
1012
+ TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value)
1013
+ {
1014
+ static const char module[] = "TIFFWriteDirectoryTagSampleformatArray";
1015
+ void* conv;
1016
+ uint32 i;
1017
+ int ok;
1018
+ conv = _TIFFmalloc(count*sizeof(double));
1019
+ if (conv == NULL)
1020
+ {
1021
+ TIFFErrorExt(tif->tif_clientdata, module, "Out of memory");
1022
+ return (0);
1023
+ }
1024
+
1025
+ switch (tif->tif_dir.td_sampleformat)
1026
+ {
1027
+ case SAMPLEFORMAT_IEEEFP:
1028
+ if (tif->tif_dir.td_bitspersample<=32)
1029
+ {
1030
+ for (i = 0; i < count; ++i)
1031
+ ((float*)conv)[i] = TIFFClampDoubleToFloat(value[i]);
1032
+ ok = TIFFWriteDirectoryTagFloatArray(tif,ndir,dir,tag,count,(float*)conv);
1033
+ }
1034
+ else
1035
+ {
1036
+ ok = TIFFWriteDirectoryTagDoubleArray(tif,ndir,dir,tag,count,value);
1037
+ }
1038
+ break;
1039
+ case SAMPLEFORMAT_INT:
1040
+ if (tif->tif_dir.td_bitspersample<=8)
1041
+ {
1042
+ for (i = 0; i < count; ++i)
1043
+ ((int8*)conv)[i] = TIFFClampDoubleToInt8(value[i]);
1044
+ ok = TIFFWriteDirectoryTagSbyteArray(tif,ndir,dir,tag,count,(int8*)conv);
1045
+ }
1046
+ else if (tif->tif_dir.td_bitspersample<=16)
1047
+ {
1048
+ for (i = 0; i < count; ++i)
1049
+ ((int16*)conv)[i] = TIFFClampDoubleToInt16(value[i]);
1050
+ ok = TIFFWriteDirectoryTagSshortArray(tif,ndir,dir,tag,count,(int16*)conv);
1051
+ }
1052
+ else
1053
+ {
1054
+ for (i = 0; i < count; ++i)
1055
+ ((int32*)conv)[i] = TIFFClampDoubleToInt32(value[i]);
1056
+ ok = TIFFWriteDirectoryTagSlongArray(tif,ndir,dir,tag,count,(int32*)conv);
1057
+ }
1058
+ break;
1059
+ case SAMPLEFORMAT_UINT:
1060
+ if (tif->tif_dir.td_bitspersample<=8)
1061
+ {
1062
+ for (i = 0; i < count; ++i)
1063
+ ((uint8*)conv)[i] = TIFFClampDoubleToUInt8(value[i]);
1064
+ ok = TIFFWriteDirectoryTagByteArray(tif,ndir,dir,tag,count,(uint8*)conv);
1065
+ }
1066
+ else if (tif->tif_dir.td_bitspersample<=16)
1067
+ {
1068
+ for (i = 0; i < count; ++i)
1069
+ ((uint16*)conv)[i] = TIFFClampDoubleToUInt16(value[i]);
1070
+ ok = TIFFWriteDirectoryTagShortArray(tif,ndir,dir,tag,count,(uint16*)conv);
1071
+ }
1072
+ else
1073
+ {
1074
+ for (i = 0; i < count; ++i)
1075
+ ((uint32*)conv)[i] = TIFFClampDoubleToUInt32(value[i]);
1076
+ ok = TIFFWriteDirectoryTagLongArray(tif,ndir,dir,tag,count,(uint32*)conv);
1077
+ }
1078
+ break;
1079
+ default:
1080
+ ok = 0;
1081
+ }
1082
+
1083
+ _TIFFfree(conv);
1084
+ return (ok);
1085
+ }
1086
+
1087
+ #if 0
1088
+ static int
1089
+ TIFFWriteDirectoryTagSampleformatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value)
1090
+ {
1091
+ switch (tif->tif_dir.td_sampleformat)
1092
+ {
1093
+ case SAMPLEFORMAT_IEEEFP:
1094
+ if (tif->tif_dir.td_bitspersample<=32)
1095
+ return(TIFFWriteDirectoryTagFloatPerSample(tif,ndir,dir,tag,(float)value));
1096
+ else
1097
+ return(TIFFWriteDirectoryTagDoublePerSample(tif,ndir,dir,tag,value));
1098
+ case SAMPLEFORMAT_INT:
1099
+ if (tif->tif_dir.td_bitspersample<=8)
1100
+ return(TIFFWriteDirectoryTagSbytePerSample(tif,ndir,dir,tag,(int8)value));
1101
+ else if (tif->tif_dir.td_bitspersample<=16)
1102
+ return(TIFFWriteDirectoryTagSshortPerSample(tif,ndir,dir,tag,(int16)value));
1103
+ else
1104
+ return(TIFFWriteDirectoryTagSlongPerSample(tif,ndir,dir,tag,(int32)value));
1105
+ case SAMPLEFORMAT_UINT:
1106
+ if (tif->tif_dir.td_bitspersample<=8)
1107
+ return(TIFFWriteDirectoryTagBytePerSample(tif,ndir,dir,tag,(uint8)value));
1108
+ else if (tif->tif_dir.td_bitspersample<=16)
1109
+ return(TIFFWriteDirectoryTagShortPerSample(tif,ndir,dir,tag,(uint16)value));
1110
+ else
1111
+ return(TIFFWriteDirectoryTagLongPerSample(tif,ndir,dir,tag,(uint32)value));
1112
+ default:
1113
+ return(1);
1114
+ }
1115
+ }
1116
+ #endif
1117
+
1118
+ static int
1119
+ TIFFWriteDirectoryTagAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value)
1120
+ {
1121
+ if (dir==NULL)
1122
+ {
1123
+ (*ndir)++;
1124
+ return(1);
1125
+ }
1126
+ return(TIFFWriteDirectoryTagCheckedAscii(tif,ndir,dir,tag,count,value));
1127
+ }
1128
+
1129
+ static int
1130
+ TIFFWriteDirectoryTagUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value)
1131
+ {
1132
+ if (dir==NULL)
1133
+ {
1134
+ (*ndir)++;
1135
+ return(1);
1136
+ }
1137
+ return(TIFFWriteDirectoryTagCheckedUndefinedArray(tif,ndir,dir,tag,count,value));
1138
+ }
1139
+
1140
+ #ifdef notdef
1141
+ static int
1142
+ TIFFWriteDirectoryTagByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value)
1143
+ {
1144
+ if (dir==NULL)
1145
+ {
1146
+ (*ndir)++;
1147
+ return(1);
1148
+ }
1149
+ return(TIFFWriteDirectoryTagCheckedByte(tif,ndir,dir,tag,value));
1150
+ }
1151
+ #endif
1152
+
1153
+ static int
1154
+ TIFFWriteDirectoryTagByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value)
1155
+ {
1156
+ if (dir==NULL)
1157
+ {
1158
+ (*ndir)++;
1159
+ return(1);
1160
+ }
1161
+ return(TIFFWriteDirectoryTagCheckedByteArray(tif,ndir,dir,tag,count,value));
1162
+ }
1163
+
1164
+ #if 0
1165
+ static int
1166
+ TIFFWriteDirectoryTagBytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value)
1167
+ {
1168
+ static const char module[] = "TIFFWriteDirectoryTagBytePerSample";
1169
+ uint8* m;
1170
+ uint8* na;
1171
+ uint16 nb;
1172
+ int o;
1173
+ if (dir==NULL)
1174
+ {
1175
+ (*ndir)++;
1176
+ return(1);
1177
+ }
1178
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(uint8));
1179
+ if (m==NULL)
1180
+ {
1181
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1182
+ return(0);
1183
+ }
1184
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1185
+ *na=value;
1186
+ o=TIFFWriteDirectoryTagCheckedByteArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1187
+ _TIFFfree(m);
1188
+ return(o);
1189
+ }
1190
+ #endif
1191
+
1192
+ #ifdef notdef
1193
+ static int
1194
+ TIFFWriteDirectoryTagSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value)
1195
+ {
1196
+ if (dir==NULL)
1197
+ {
1198
+ (*ndir)++;
1199
+ return(1);
1200
+ }
1201
+ return(TIFFWriteDirectoryTagCheckedSbyte(tif,ndir,dir,tag,value));
1202
+ }
1203
+ #endif
1204
+
1205
+ static int
1206
+ TIFFWriteDirectoryTagSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value)
1207
+ {
1208
+ if (dir==NULL)
1209
+ {
1210
+ (*ndir)++;
1211
+ return(1);
1212
+ }
1213
+ return(TIFFWriteDirectoryTagCheckedSbyteArray(tif,ndir,dir,tag,count,value));
1214
+ }
1215
+
1216
+ #if 0
1217
+ static int
1218
+ TIFFWriteDirectoryTagSbytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value)
1219
+ {
1220
+ static const char module[] = "TIFFWriteDirectoryTagSbytePerSample";
1221
+ int8* m;
1222
+ int8* na;
1223
+ uint16 nb;
1224
+ int o;
1225
+ if (dir==NULL)
1226
+ {
1227
+ (*ndir)++;
1228
+ return(1);
1229
+ }
1230
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(int8));
1231
+ if (m==NULL)
1232
+ {
1233
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1234
+ return(0);
1235
+ }
1236
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1237
+ *na=value;
1238
+ o=TIFFWriteDirectoryTagCheckedSbyteArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1239
+ _TIFFfree(m);
1240
+ return(o);
1241
+ }
1242
+ #endif
1243
+
1244
+ static int
1245
+ TIFFWriteDirectoryTagShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value)
1246
+ {
1247
+ if (dir==NULL)
1248
+ {
1249
+ (*ndir)++;
1250
+ return(1);
1251
+ }
1252
+ return(TIFFWriteDirectoryTagCheckedShort(tif,ndir,dir,tag,value));
1253
+ }
1254
+
1255
+ static int
1256
+ TIFFWriteDirectoryTagShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value)
1257
+ {
1258
+ if (dir==NULL)
1259
+ {
1260
+ (*ndir)++;
1261
+ return(1);
1262
+ }
1263
+ return(TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,count,value));
1264
+ }
1265
+
1266
+ static int
1267
+ TIFFWriteDirectoryTagShortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value)
1268
+ {
1269
+ static const char module[] = "TIFFWriteDirectoryTagShortPerSample";
1270
+ uint16* m;
1271
+ uint16* na;
1272
+ uint16 nb;
1273
+ int o;
1274
+ if (dir==NULL)
1275
+ {
1276
+ (*ndir)++;
1277
+ return(1);
1278
+ }
1279
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(uint16));
1280
+ if (m==NULL)
1281
+ {
1282
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1283
+ return(0);
1284
+ }
1285
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1286
+ *na=value;
1287
+ o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1288
+ _TIFFfree(m);
1289
+ return(o);
1290
+ }
1291
+
1292
+ #ifdef notdef
1293
+ static int
1294
+ TIFFWriteDirectoryTagSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value)
1295
+ {
1296
+ if (dir==NULL)
1297
+ {
1298
+ (*ndir)++;
1299
+ return(1);
1300
+ }
1301
+ return(TIFFWriteDirectoryTagCheckedSshort(tif,ndir,dir,tag,value));
1302
+ }
1303
+ #endif
1304
+
1305
+ static int
1306
+ TIFFWriteDirectoryTagSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value)
1307
+ {
1308
+ if (dir==NULL)
1309
+ {
1310
+ (*ndir)++;
1311
+ return(1);
1312
+ }
1313
+ return(TIFFWriteDirectoryTagCheckedSshortArray(tif,ndir,dir,tag,count,value));
1314
+ }
1315
+
1316
+ #if 0
1317
+ static int
1318
+ TIFFWriteDirectoryTagSshortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value)
1319
+ {
1320
+ static const char module[] = "TIFFWriteDirectoryTagSshortPerSample";
1321
+ int16* m;
1322
+ int16* na;
1323
+ uint16 nb;
1324
+ int o;
1325
+ if (dir==NULL)
1326
+ {
1327
+ (*ndir)++;
1328
+ return(1);
1329
+ }
1330
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(int16));
1331
+ if (m==NULL)
1332
+ {
1333
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1334
+ return(0);
1335
+ }
1336
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1337
+ *na=value;
1338
+ o=TIFFWriteDirectoryTagCheckedSshortArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1339
+ _TIFFfree(m);
1340
+ return(o);
1341
+ }
1342
+ #endif
1343
+
1344
+ static int
1345
+ TIFFWriteDirectoryTagLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value)
1346
+ {
1347
+ if (dir==NULL)
1348
+ {
1349
+ (*ndir)++;
1350
+ return(1);
1351
+ }
1352
+ return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value));
1353
+ }
1354
+
1355
+ static int
1356
+ TIFFWriteDirectoryTagLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value)
1357
+ {
1358
+ if (dir==NULL)
1359
+ {
1360
+ (*ndir)++;
1361
+ return(1);
1362
+ }
1363
+ return(TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,value));
1364
+ }
1365
+
1366
+ #if 0
1367
+ static int
1368
+ TIFFWriteDirectoryTagLongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value)
1369
+ {
1370
+ static const char module[] = "TIFFWriteDirectoryTagLongPerSample";
1371
+ uint32* m;
1372
+ uint32* na;
1373
+ uint16 nb;
1374
+ int o;
1375
+ if (dir==NULL)
1376
+ {
1377
+ (*ndir)++;
1378
+ return(1);
1379
+ }
1380
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(uint32));
1381
+ if (m==NULL)
1382
+ {
1383
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1384
+ return(0);
1385
+ }
1386
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1387
+ *na=value;
1388
+ o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1389
+ _TIFFfree(m);
1390
+ return(o);
1391
+ }
1392
+ #endif
1393
+
1394
+ #ifdef notdef
1395
+ static int
1396
+ TIFFWriteDirectoryTagSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value)
1397
+ {
1398
+ if (dir==NULL)
1399
+ {
1400
+ (*ndir)++;
1401
+ return(1);
1402
+ }
1403
+ return(TIFFWriteDirectoryTagCheckedSlong(tif,ndir,dir,tag,value));
1404
+ }
1405
+ #endif
1406
+
1407
+ static int
1408
+ TIFFWriteDirectoryTagSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value)
1409
+ {
1410
+ if (dir==NULL)
1411
+ {
1412
+ (*ndir)++;
1413
+ return(1);
1414
+ }
1415
+ return(TIFFWriteDirectoryTagCheckedSlongArray(tif,ndir,dir,tag,count,value));
1416
+ }
1417
+
1418
+ #if 0
1419
+ static int
1420
+ TIFFWriteDirectoryTagSlongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value)
1421
+ {
1422
+ static const char module[] = "TIFFWriteDirectoryTagSlongPerSample";
1423
+ int32* m;
1424
+ int32* na;
1425
+ uint16 nb;
1426
+ int o;
1427
+ if (dir==NULL)
1428
+ {
1429
+ (*ndir)++;
1430
+ return(1);
1431
+ }
1432
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(int32));
1433
+ if (m==NULL)
1434
+ {
1435
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1436
+ return(0);
1437
+ }
1438
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1439
+ *na=value;
1440
+ o=TIFFWriteDirectoryTagCheckedSlongArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1441
+ _TIFFfree(m);
1442
+ return(o);
1443
+ }
1444
+ #endif
1445
+
1446
+ #ifdef notdef
1447
+ static int
1448
+ TIFFWriteDirectoryTagLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value)
1449
+ {
1450
+ if (dir==NULL)
1451
+ {
1452
+ (*ndir)++;
1453
+ return(1);
1454
+ }
1455
+ return(TIFFWriteDirectoryTagCheckedLong8(tif,ndir,dir,tag,value));
1456
+ }
1457
+ #endif
1458
+
1459
+ static int
1460
+ TIFFWriteDirectoryTagLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
1461
+ {
1462
+ if (dir==NULL)
1463
+ {
1464
+ (*ndir)++;
1465
+ return(1);
1466
+ }
1467
+ return(TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,tag,count,value));
1468
+ }
1469
+
1470
+ #ifdef notdef
1471
+ static int
1472
+ TIFFWriteDirectoryTagSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value)
1473
+ {
1474
+ if (dir==NULL)
1475
+ {
1476
+ (*ndir)++;
1477
+ return(1);
1478
+ }
1479
+ return(TIFFWriteDirectoryTagCheckedSlong8(tif,ndir,dir,tag,value));
1480
+ }
1481
+ #endif
1482
+
1483
+ static int
1484
+ TIFFWriteDirectoryTagSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value)
1485
+ {
1486
+ if (dir==NULL)
1487
+ {
1488
+ (*ndir)++;
1489
+ return(1);
1490
+ }
1491
+ return(TIFFWriteDirectoryTagCheckedSlong8Array(tif,ndir,dir,tag,count,value));
1492
+ }
1493
+
1494
+ static int
1495
+ TIFFWriteDirectoryTagRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value)
1496
+ {
1497
+ if (dir==NULL)
1498
+ {
1499
+ (*ndir)++;
1500
+ return(1);
1501
+ }
1502
+ return(TIFFWriteDirectoryTagCheckedRational(tif,ndir,dir,tag,value));
1503
+ }
1504
+
1505
+ static int
1506
+ TIFFWriteDirectoryTagRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value)
1507
+ {
1508
+ if (dir==NULL)
1509
+ {
1510
+ (*ndir)++;
1511
+ return(1);
1512
+ }
1513
+ return(TIFFWriteDirectoryTagCheckedRationalArray(tif,ndir,dir,tag,count,value));
1514
+ }
1515
+
1516
+ static int
1517
+ TIFFWriteDirectoryTagSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value)
1518
+ {
1519
+ if (dir==NULL)
1520
+ {
1521
+ (*ndir)++;
1522
+ return(1);
1523
+ }
1524
+ return(TIFFWriteDirectoryTagCheckedSrationalArray(tif,ndir,dir,tag,count,value));
1525
+ }
1526
+
1527
+ #ifdef notdef
1528
+ static int TIFFWriteDirectoryTagFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value)
1529
+ {
1530
+ if (dir==NULL)
1531
+ {
1532
+ (*ndir)++;
1533
+ return(1);
1534
+ }
1535
+ return(TIFFWriteDirectoryTagCheckedFloat(tif,ndir,dir,tag,value));
1536
+ }
1537
+ #endif
1538
+
1539
+ static int TIFFWriteDirectoryTagFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value)
1540
+ {
1541
+ if (dir==NULL)
1542
+ {
1543
+ (*ndir)++;
1544
+ return(1);
1545
+ }
1546
+ return(TIFFWriteDirectoryTagCheckedFloatArray(tif,ndir,dir,tag,count,value));
1547
+ }
1548
+
1549
+ #if 0
1550
+ static int TIFFWriteDirectoryTagFloatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value)
1551
+ {
1552
+ static const char module[] = "TIFFWriteDirectoryTagFloatPerSample";
1553
+ float* m;
1554
+ float* na;
1555
+ uint16 nb;
1556
+ int o;
1557
+ if (dir==NULL)
1558
+ {
1559
+ (*ndir)++;
1560
+ return(1);
1561
+ }
1562
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(float));
1563
+ if (m==NULL)
1564
+ {
1565
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1566
+ return(0);
1567
+ }
1568
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1569
+ *na=value;
1570
+ o=TIFFWriteDirectoryTagCheckedFloatArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1571
+ _TIFFfree(m);
1572
+ return(o);
1573
+ }
1574
+ #endif
1575
+
1576
+ #ifdef notdef
1577
+ static int TIFFWriteDirectoryTagDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value)
1578
+ {
1579
+ if (dir==NULL)
1580
+ {
1581
+ (*ndir)++;
1582
+ return(1);
1583
+ }
1584
+ return(TIFFWriteDirectoryTagCheckedDouble(tif,ndir,dir,tag,value));
1585
+ }
1586
+ #endif
1587
+
1588
+ static int TIFFWriteDirectoryTagDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value)
1589
+ {
1590
+ if (dir==NULL)
1591
+ {
1592
+ (*ndir)++;
1593
+ return(1);
1594
+ }
1595
+ return(TIFFWriteDirectoryTagCheckedDoubleArray(tif,ndir,dir,tag,count,value));
1596
+ }
1597
+
1598
+ #if 0
1599
+ static int TIFFWriteDirectoryTagDoublePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value)
1600
+ {
1601
+ static const char module[] = "TIFFWriteDirectoryTagDoublePerSample";
1602
+ double* m;
1603
+ double* na;
1604
+ uint16 nb;
1605
+ int o;
1606
+ if (dir==NULL)
1607
+ {
1608
+ (*ndir)++;
1609
+ return(1);
1610
+ }
1611
+ m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(double));
1612
+ if (m==NULL)
1613
+ {
1614
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1615
+ return(0);
1616
+ }
1617
+ for (na=m, nb=0; nb<tif->tif_dir.td_samplesperpixel; na++, nb++)
1618
+ *na=value;
1619
+ o=TIFFWriteDirectoryTagCheckedDoubleArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m);
1620
+ _TIFFfree(m);
1621
+ return(o);
1622
+ }
1623
+ #endif
1624
+
1625
+ static int
1626
+ TIFFWriteDirectoryTagIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value)
1627
+ {
1628
+ if (dir==NULL)
1629
+ {
1630
+ (*ndir)++;
1631
+ return(1);
1632
+ }
1633
+ return(TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,tag,count,value));
1634
+ }
1635
+
1636
+ #ifdef notdef
1637
+ static int
1638
+ TIFFWriteDirectoryTagIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
1639
+ {
1640
+ if (dir==NULL)
1641
+ {
1642
+ (*ndir)++;
1643
+ return(1);
1644
+ }
1645
+ return(TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,tag,count,value));
1646
+ }
1647
+ #endif
1648
+
1649
+ static int
1650
+ TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value)
1651
+ {
1652
+ if (dir==NULL)
1653
+ {
1654
+ (*ndir)++;
1655
+ return(1);
1656
+ }
1657
+ if (value<=0xFFFF)
1658
+ return(TIFFWriteDirectoryTagCheckedShort(tif,ndir,dir,tag,(uint16)value));
1659
+ else
1660
+ return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value));
1661
+ }
1662
+
1663
+ /************************************************************************/
1664
+ /* TIFFWriteDirectoryTagLongLong8Array() */
1665
+ /* */
1666
+ /* Write out LONG8 array as LONG8 for BigTIFF or LONG for */
1667
+ /* Classic TIFF with some checking. */
1668
+ /************************************************************************/
1669
+
1670
+ static int
1671
+ TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
1672
+ {
1673
+ static const char module[] = "TIFFWriteDirectoryTagLongLong8Array";
1674
+ uint64* ma;
1675
+ uint32 mb;
1676
+ uint32* p;
1677
+ uint32* q;
1678
+ int o;
1679
+
1680
+ /* is this just a counting pass? */
1681
+ if (dir==NULL)
1682
+ {
1683
+ (*ndir)++;
1684
+ return(1);
1685
+ }
1686
+
1687
+ /* We always write LONG8 for BigTIFF, no checking needed. */
1688
+ if( tif->tif_flags&TIFF_BIGTIFF )
1689
+ return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,
1690
+ tag,count,value);
1691
+
1692
+ /*
1693
+ ** For classic tiff we want to verify everything is in range for LONG
1694
+ ** and convert to long format.
1695
+ */
1696
+
1697
+ p = _TIFFmalloc(count*sizeof(uint32));
1698
+ if (p==NULL)
1699
+ {
1700
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1701
+ return(0);
1702
+ }
1703
+
1704
+ for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
1705
+ {
1706
+ if (*ma>0xFFFFFFFF)
1707
+ {
1708
+ TIFFErrorExt(tif->tif_clientdata,module,
1709
+ "Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file.");
1710
+ _TIFFfree(p);
1711
+ return(0);
1712
+ }
1713
+ *q= (uint32)(*ma);
1714
+ }
1715
+
1716
+ o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p);
1717
+ _TIFFfree(p);
1718
+
1719
+ return(o);
1720
+ }
1721
+
1722
+ /************************************************************************/
1723
+ /* TIFFWriteDirectoryTagIfdIfd8Array() */
1724
+ /* */
1725
+ /* Write either IFD8 or IFD array depending on file type. */
1726
+ /************************************************************************/
1727
+
1728
+ static int
1729
+ TIFFWriteDirectoryTagIfdIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
1730
+ {
1731
+ static const char module[] = "TIFFWriteDirectoryTagIfdIfd8Array";
1732
+ uint64* ma;
1733
+ uint32 mb;
1734
+ uint32* p;
1735
+ uint32* q;
1736
+ int o;
1737
+
1738
+ /* is this just a counting pass? */
1739
+ if (dir==NULL)
1740
+ {
1741
+ (*ndir)++;
1742
+ return(1);
1743
+ }
1744
+
1745
+ /* We always write IFD8 for BigTIFF, no checking needed. */
1746
+ if( tif->tif_flags&TIFF_BIGTIFF )
1747
+ return TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,
1748
+ tag,count,value);
1749
+
1750
+ /*
1751
+ ** For classic tiff we want to verify everything is in range for IFD
1752
+ ** and convert to long format.
1753
+ */
1754
+
1755
+ p = _TIFFmalloc(count*sizeof(uint32));
1756
+ if (p==NULL)
1757
+ {
1758
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1759
+ return(0);
1760
+ }
1761
+
1762
+ for (q=p, ma=value, mb=0; mb<count; ma++, mb++, q++)
1763
+ {
1764
+ if (*ma>0xFFFFFFFF)
1765
+ {
1766
+ TIFFErrorExt(tif->tif_clientdata,module,
1767
+ "Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file.");
1768
+ _TIFFfree(p);
1769
+ return(0);
1770
+ }
1771
+ *q= (uint32)(*ma);
1772
+ }
1773
+
1774
+ o=TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,tag,count,p);
1775
+ _TIFFfree(p);
1776
+
1777
+ return(o);
1778
+ }
1779
+
1780
+ #ifdef notdef
1781
+ static int
1782
+ TIFFWriteDirectoryTagShortLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
1783
+ {
1784
+ static const char module[] = "TIFFWriteDirectoryTagShortLongLong8Array";
1785
+ uint64* ma;
1786
+ uint32 mb;
1787
+ uint8 n;
1788
+ int o;
1789
+ if (dir==NULL)
1790
+ {
1791
+ (*ndir)++;
1792
+ return(1);
1793
+ }
1794
+ n=0;
1795
+ for (ma=value, mb=0; mb<count; ma++, mb++)
1796
+ {
1797
+ if ((n==0)&&(*ma>0xFFFF))
1798
+ n=1;
1799
+ if ((n==1)&&(*ma>0xFFFFFFFF))
1800
+ {
1801
+ n=2;
1802
+ break;
1803
+ }
1804
+ }
1805
+ if (n==0)
1806
+ {
1807
+ uint16* p;
1808
+ uint16* q;
1809
+ p=_TIFFmalloc(count*sizeof(uint16));
1810
+ if (p==NULL)
1811
+ {
1812
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1813
+ return(0);
1814
+ }
1815
+ for (ma=value, mb=0, q=p; mb<count; ma++, mb++, q++)
1816
+ *q=(uint16)(*ma);
1817
+ o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,count,p);
1818
+ _TIFFfree(p);
1819
+ }
1820
+ else if (n==1)
1821
+ {
1822
+ uint32* p;
1823
+ uint32* q;
1824
+ p=_TIFFmalloc(count*sizeof(uint32));
1825
+ if (p==NULL)
1826
+ {
1827
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1828
+ return(0);
1829
+ }
1830
+ for (ma=value, mb=0, q=p; mb<count; ma++, mb++, q++)
1831
+ *q=(uint32)(*ma);
1832
+ o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p);
1833
+ _TIFFfree(p);
1834
+ }
1835
+ else
1836
+ {
1837
+ assert(n==2);
1838
+ o=TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,tag,count,value);
1839
+ }
1840
+ return(o);
1841
+ }
1842
+ #endif
1843
+ static int
1844
+ TIFFWriteDirectoryTagColormap(TIFF* tif, uint32* ndir, TIFFDirEntry* dir)
1845
+ {
1846
+ static const char module[] = "TIFFWriteDirectoryTagColormap";
1847
+ uint32 m;
1848
+ uint16* n;
1849
+ int o;
1850
+ if (dir==NULL)
1851
+ {
1852
+ (*ndir)++;
1853
+ return(1);
1854
+ }
1855
+ m=(1<<tif->tif_dir.td_bitspersample);
1856
+ n=_TIFFmalloc(3*m*sizeof(uint16));
1857
+ if (n==NULL)
1858
+ {
1859
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1860
+ return(0);
1861
+ }
1862
+ _TIFFmemcpy(&n[0],tif->tif_dir.td_colormap[0],m*sizeof(uint16));
1863
+ _TIFFmemcpy(&n[m],tif->tif_dir.td_colormap[1],m*sizeof(uint16));
1864
+ _TIFFmemcpy(&n[2*m],tif->tif_dir.td_colormap[2],m*sizeof(uint16));
1865
+ o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,TIFFTAG_COLORMAP,3*m,n);
1866
+ _TIFFfree(n);
1867
+ return(o);
1868
+ }
1869
+
1870
+ static int
1871
+ TIFFWriteDirectoryTagTransferfunction(TIFF* tif, uint32* ndir, TIFFDirEntry* dir)
1872
+ {
1873
+ static const char module[] = "TIFFWriteDirectoryTagTransferfunction";
1874
+ uint32 m;
1875
+ uint16 n;
1876
+ uint16* o;
1877
+ int p;
1878
+ if (dir==NULL)
1879
+ {
1880
+ (*ndir)++;
1881
+ return(1);
1882
+ }
1883
+ m=(1<<tif->tif_dir.td_bitspersample);
1884
+ n=tif->tif_dir.td_samplesperpixel-tif->tif_dir.td_extrasamples;
1885
+ /*
1886
+ * Check if the table can be written as a single column,
1887
+ * or if it must be written as 3 columns. Note that we
1888
+ * write a 3-column tag if there are 2 samples/pixel and
1889
+ * a single column of data won't suffice--hmm.
1890
+ */
1891
+ if (n>3)
1892
+ n=3;
1893
+ if (n==3)
1894
+ {
1895
+ if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16)))
1896
+ n=2;
1897
+ }
1898
+ if (n==2)
1899
+ {
1900
+ if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16)))
1901
+ n=1;
1902
+ }
1903
+ if (n==0)
1904
+ n=1;
1905
+ o=_TIFFmalloc(n*m*sizeof(uint16));
1906
+ if (o==NULL)
1907
+ {
1908
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1909
+ return(0);
1910
+ }
1911
+ _TIFFmemcpy(&o[0],tif->tif_dir.td_transferfunction[0],m*sizeof(uint16));
1912
+ if (n>1)
1913
+ _TIFFmemcpy(&o[m],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16));
1914
+ if (n>2)
1915
+ _TIFFmemcpy(&o[2*m],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16));
1916
+ p=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,TIFFTAG_TRANSFERFUNCTION,n*m,o);
1917
+ _TIFFfree(o);
1918
+ return(p);
1919
+ }
1920
+
1921
+ static int
1922
+ TIFFWriteDirectoryTagSubifd(TIFF* tif, uint32* ndir, TIFFDirEntry* dir)
1923
+ {
1924
+ static const char module[] = "TIFFWriteDirectoryTagSubifd";
1925
+ uint64 m;
1926
+ int n;
1927
+ if (tif->tif_dir.td_nsubifd==0)
1928
+ return(1);
1929
+ if (dir==NULL)
1930
+ {
1931
+ (*ndir)++;
1932
+ return(1);
1933
+ }
1934
+ m=tif->tif_dataoff;
1935
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
1936
+ {
1937
+ uint32* o;
1938
+ uint64* pa;
1939
+ uint32* pb;
1940
+ uint16 p;
1941
+ o=_TIFFmalloc(tif->tif_dir.td_nsubifd*sizeof(uint32));
1942
+ if (o==NULL)
1943
+ {
1944
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
1945
+ return(0);
1946
+ }
1947
+ pa=tif->tif_dir.td_subifd;
1948
+ pb=o;
1949
+ for (p=0; p < tif->tif_dir.td_nsubifd; p++)
1950
+ {
1951
+ assert(pa != 0);
1952
+
1953
+ /* Could happen if an classicTIFF has a SubIFD of type LONG8 (which is illegal) */
1954
+ if( *pa > 0xFFFFFFFFUL)
1955
+ {
1956
+ TIFFErrorExt(tif->tif_clientdata,module,"Illegal value for SubIFD tag");
1957
+ _TIFFfree(o);
1958
+ return(0);
1959
+ }
1960
+ *pb++=(uint32)(*pa++);
1961
+ }
1962
+ n=TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,TIFFTAG_SUBIFD,tif->tif_dir.td_nsubifd,o);
1963
+ _TIFFfree(o);
1964
+ }
1965
+ else
1966
+ n=TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,TIFFTAG_SUBIFD,tif->tif_dir.td_nsubifd,tif->tif_dir.td_subifd);
1967
+ if (!n)
1968
+ return(0);
1969
+ /*
1970
+ * Total hack: if this directory includes a SubIFD
1971
+ * tag then force the next <n> directories to be
1972
+ * written as ``sub directories'' of this one. This
1973
+ * is used to write things like thumbnails and
1974
+ * image masks that one wants to keep out of the
1975
+ * normal directory linkage access mechanism.
1976
+ */
1977
+ tif->tif_flags|=TIFF_INSUBIFD;
1978
+ tif->tif_nsubifd=tif->tif_dir.td_nsubifd;
1979
+ if (tif->tif_dir.td_nsubifd==1)
1980
+ tif->tif_subifdoff=0;
1981
+ else
1982
+ tif->tif_subifdoff=m;
1983
+ return(1);
1984
+ }
1985
+
1986
+ static int
1987
+ TIFFWriteDirectoryTagCheckedAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value)
1988
+ {
1989
+ assert(sizeof(char)==1);
1990
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_ASCII,count,count,value));
1991
+ }
1992
+
1993
+ static int
1994
+ TIFFWriteDirectoryTagCheckedUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value)
1995
+ {
1996
+ assert(sizeof(uint8)==1);
1997
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_UNDEFINED,count,count,value));
1998
+ }
1999
+
2000
+ #ifdef notdef
2001
+ static int
2002
+ TIFFWriteDirectoryTagCheckedByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value)
2003
+ {
2004
+ assert(sizeof(uint8)==1);
2005
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_BYTE,1,1,&value));
2006
+ }
2007
+ #endif
2008
+
2009
+ static int
2010
+ TIFFWriteDirectoryTagCheckedByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value)
2011
+ {
2012
+ assert(sizeof(uint8)==1);
2013
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_BYTE,count,count,value));
2014
+ }
2015
+
2016
+ #ifdef notdef
2017
+ static int
2018
+ TIFFWriteDirectoryTagCheckedSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value)
2019
+ {
2020
+ assert(sizeof(int8)==1);
2021
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SBYTE,1,1,&value));
2022
+ }
2023
+ #endif
2024
+
2025
+ static int
2026
+ TIFFWriteDirectoryTagCheckedSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value)
2027
+ {
2028
+ assert(sizeof(int8)==1);
2029
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SBYTE,count,count,value));
2030
+ }
2031
+
2032
+ static int
2033
+ TIFFWriteDirectoryTagCheckedShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value)
2034
+ {
2035
+ uint16 m;
2036
+ assert(sizeof(uint16)==2);
2037
+ m=value;
2038
+ if (tif->tif_flags&TIFF_SWAB)
2039
+ TIFFSwabShort(&m);
2040
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SHORT,1,2,&m));
2041
+ }
2042
+
2043
+ static int
2044
+ TIFFWriteDirectoryTagCheckedShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value)
2045
+ {
2046
+ assert(count<0x80000000);
2047
+ assert(sizeof(uint16)==2);
2048
+ if (tif->tif_flags&TIFF_SWAB)
2049
+ TIFFSwabArrayOfShort(value,count);
2050
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SHORT,count,count*2,value));
2051
+ }
2052
+
2053
+ #ifdef notdef
2054
+ static int
2055
+ TIFFWriteDirectoryTagCheckedSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value)
2056
+ {
2057
+ int16 m;
2058
+ assert(sizeof(int16)==2);
2059
+ m=value;
2060
+ if (tif->tif_flags&TIFF_SWAB)
2061
+ TIFFSwabShort((uint16*)(&m));
2062
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SSHORT,1,2,&m));
2063
+ }
2064
+ #endif
2065
+
2066
+ static int
2067
+ TIFFWriteDirectoryTagCheckedSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value)
2068
+ {
2069
+ assert(count<0x80000000);
2070
+ assert(sizeof(int16)==2);
2071
+ if (tif->tif_flags&TIFF_SWAB)
2072
+ TIFFSwabArrayOfShort((uint16*)value,count);
2073
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SSHORT,count,count*2,value));
2074
+ }
2075
+
2076
+ static int
2077
+ TIFFWriteDirectoryTagCheckedLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value)
2078
+ {
2079
+ uint32 m;
2080
+ assert(sizeof(uint32)==4);
2081
+ m=value;
2082
+ if (tif->tif_flags&TIFF_SWAB)
2083
+ TIFFSwabLong(&m);
2084
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG,1,4,&m));
2085
+ }
2086
+
2087
+ static int
2088
+ TIFFWriteDirectoryTagCheckedLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value)
2089
+ {
2090
+ assert(count<0x40000000);
2091
+ assert(sizeof(uint32)==4);
2092
+ if (tif->tif_flags&TIFF_SWAB)
2093
+ TIFFSwabArrayOfLong(value,count);
2094
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG,count,count*4,value));
2095
+ }
2096
+
2097
+ #ifdef notdef
2098
+ static int
2099
+ TIFFWriteDirectoryTagCheckedSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value)
2100
+ {
2101
+ int32 m;
2102
+ assert(sizeof(int32)==4);
2103
+ m=value;
2104
+ if (tif->tif_flags&TIFF_SWAB)
2105
+ TIFFSwabLong((uint32*)(&m));
2106
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG,1,4,&m));
2107
+ }
2108
+ #endif
2109
+
2110
+ static int
2111
+ TIFFWriteDirectoryTagCheckedSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value)
2112
+ {
2113
+ assert(count<0x40000000);
2114
+ assert(sizeof(int32)==4);
2115
+ if (tif->tif_flags&TIFF_SWAB)
2116
+ TIFFSwabArrayOfLong((uint32*)value,count);
2117
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG,count,count*4,value));
2118
+ }
2119
+
2120
+ #ifdef notdef
2121
+ static int
2122
+ TIFFWriteDirectoryTagCheckedLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value)
2123
+ {
2124
+ uint64 m;
2125
+ assert(sizeof(uint64)==8);
2126
+ if( !(tif->tif_flags&TIFF_BIGTIFF) ) {
2127
+ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedLong8","LONG8 not allowed for ClassicTIFF");
2128
+ return(0);
2129
+ }
2130
+ m=value;
2131
+ if (tif->tif_flags&TIFF_SWAB)
2132
+ TIFFSwabLong8(&m);
2133
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG8,1,8,&m));
2134
+ }
2135
+ #endif
2136
+
2137
+ static int
2138
+ TIFFWriteDirectoryTagCheckedLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
2139
+ {
2140
+ assert(count<0x20000000);
2141
+ assert(sizeof(uint64)==8);
2142
+ if( !(tif->tif_flags&TIFF_BIGTIFF) ) {
2143
+ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedLong8Array","LONG8 not allowed for ClassicTIFF");
2144
+ return(0);
2145
+ }
2146
+ if (tif->tif_flags&TIFF_SWAB)
2147
+ TIFFSwabArrayOfLong8(value,count);
2148
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG8,count,count*8,value));
2149
+ }
2150
+
2151
+ #ifdef notdef
2152
+ static int
2153
+ TIFFWriteDirectoryTagCheckedSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value)
2154
+ {
2155
+ int64 m;
2156
+ assert(sizeof(int64)==8);
2157
+ if( !(tif->tif_flags&TIFF_BIGTIFF) ) {
2158
+ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedSlong8","SLONG8 not allowed for ClassicTIFF");
2159
+ return(0);
2160
+ }
2161
+ m=value;
2162
+ if (tif->tif_flags&TIFF_SWAB)
2163
+ TIFFSwabLong8((uint64*)(&m));
2164
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG8,1,8,&m));
2165
+ }
2166
+ #endif
2167
+
2168
+ static int
2169
+ TIFFWriteDirectoryTagCheckedSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value)
2170
+ {
2171
+ assert(count<0x20000000);
2172
+ assert(sizeof(int64)==8);
2173
+ if( !(tif->tif_flags&TIFF_BIGTIFF) ) {
2174
+ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedSlong8Array","SLONG8 not allowed for ClassicTIFF");
2175
+ return(0);
2176
+ }
2177
+ if (tif->tif_flags&TIFF_SWAB)
2178
+ TIFFSwabArrayOfLong8((uint64*)value,count);
2179
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG8,count,count*8,value));
2180
+ }
2181
+
2182
+ static int
2183
+ TIFFWriteDirectoryTagCheckedRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value)
2184
+ {
2185
+ static const char module[] = "TIFFWriteDirectoryTagCheckedRational";
2186
+ uint32 m[2];
2187
+ assert(sizeof(uint32)==4);
2188
+ if( value < 0 )
2189
+ {
2190
+ TIFFErrorExt(tif->tif_clientdata,module,"Negative value is illegal");
2191
+ return 0;
2192
+ }
2193
+ else if( value != value )
2194
+ {
2195
+ TIFFErrorExt(tif->tif_clientdata,module,"Not-a-number value is illegal");
2196
+ return 0;
2197
+ }
2198
+ else if (value==0.0)
2199
+ {
2200
+ m[0]=0;
2201
+ m[1]=1;
2202
+ }
2203
+ else if (value <= 0xFFFFFFFFU && value==(double)(uint32)value)
2204
+ {
2205
+ m[0]=(uint32)value;
2206
+ m[1]=1;
2207
+ }
2208
+ else if (value<1.0)
2209
+ {
2210
+ m[0]=(uint32)(value*0xFFFFFFFF);
2211
+ m[1]=0xFFFFFFFF;
2212
+ }
2213
+ else
2214
+ {
2215
+ m[0]=0xFFFFFFFF;
2216
+ m[1]=(uint32)(0xFFFFFFFF/value);
2217
+ }
2218
+ if (tif->tif_flags&TIFF_SWAB)
2219
+ {
2220
+ TIFFSwabLong(&m[0]);
2221
+ TIFFSwabLong(&m[1]);
2222
+ }
2223
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_RATIONAL,1,8,&m[0]));
2224
+ }
2225
+
2226
+ static int
2227
+ TIFFWriteDirectoryTagCheckedRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value)
2228
+ {
2229
+ static const char module[] = "TIFFWriteDirectoryTagCheckedRationalArray";
2230
+ uint32* m;
2231
+ float* na;
2232
+ uint32* nb;
2233
+ uint32 nc;
2234
+ int o;
2235
+ assert(sizeof(uint32)==4);
2236
+ m=_TIFFmalloc(count*2*sizeof(uint32));
2237
+ if (m==NULL)
2238
+ {
2239
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
2240
+ return(0);
2241
+ }
2242
+ for (na=value, nb=m, nc=0; nc<count; na++, nb+=2, nc++)
2243
+ {
2244
+ if (*na<=0.0 || *na != *na)
2245
+ {
2246
+ nb[0]=0;
2247
+ nb[1]=1;
2248
+ }
2249
+ else if (*na >= 0 && *na <= (float)0xFFFFFFFFU &&
2250
+ *na==(float)(uint32)(*na))
2251
+ {
2252
+ nb[0]=(uint32)(*na);
2253
+ nb[1]=1;
2254
+ }
2255
+ else if (*na<1.0)
2256
+ {
2257
+ nb[0]=(uint32)((double)(*na)*0xFFFFFFFF);
2258
+ nb[1]=0xFFFFFFFF;
2259
+ }
2260
+ else
2261
+ {
2262
+ nb[0]=0xFFFFFFFF;
2263
+ nb[1]=(uint32)((double)0xFFFFFFFF/(*na));
2264
+ }
2265
+ }
2266
+ if (tif->tif_flags&TIFF_SWAB)
2267
+ TIFFSwabArrayOfLong(m,count*2);
2268
+ o=TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_RATIONAL,count,count*8,&m[0]);
2269
+ _TIFFfree(m);
2270
+ return(o);
2271
+ }
2272
+
2273
+ static int
2274
+ TIFFWriteDirectoryTagCheckedSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value)
2275
+ {
2276
+ static const char module[] = "TIFFWriteDirectoryTagCheckedSrationalArray";
2277
+ int32* m;
2278
+ float* na;
2279
+ int32* nb;
2280
+ uint32 nc;
2281
+ int o;
2282
+ assert(sizeof(int32)==4);
2283
+ m=_TIFFmalloc(count*2*sizeof(int32));
2284
+ if (m==NULL)
2285
+ {
2286
+ TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
2287
+ return(0);
2288
+ }
2289
+ for (na=value, nb=m, nc=0; nc<count; na++, nb+=2, nc++)
2290
+ {
2291
+ if (*na<0.0)
2292
+ {
2293
+ if (*na==(int32)(*na))
2294
+ {
2295
+ nb[0]=(int32)(*na);
2296
+ nb[1]=1;
2297
+ }
2298
+ else if (*na>-1.0)
2299
+ {
2300
+ nb[0]=-(int32)((double)(-*na)*0x7FFFFFFF);
2301
+ nb[1]=0x7FFFFFFF;
2302
+ }
2303
+ else
2304
+ {
2305
+ nb[0]=-0x7FFFFFFF;
2306
+ nb[1]=(int32)((double)0x7FFFFFFF/(-*na));
2307
+ }
2308
+ }
2309
+ else
2310
+ {
2311
+ if (*na==(int32)(*na))
2312
+ {
2313
+ nb[0]=(int32)(*na);
2314
+ nb[1]=1;
2315
+ }
2316
+ else if (*na<1.0)
2317
+ {
2318
+ nb[0]=(int32)((double)(*na)*0x7FFFFFFF);
2319
+ nb[1]=0x7FFFFFFF;
2320
+ }
2321
+ else
2322
+ {
2323
+ nb[0]=0x7FFFFFFF;
2324
+ nb[1]=(int32)((double)0x7FFFFFFF/(*na));
2325
+ }
2326
+ }
2327
+ }
2328
+ if (tif->tif_flags&TIFF_SWAB)
2329
+ TIFFSwabArrayOfLong((uint32*)m,count*2);
2330
+ o=TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SRATIONAL,count,count*8,&m[0]);
2331
+ _TIFFfree(m);
2332
+ return(o);
2333
+ }
2334
+
2335
+ #ifdef notdef
2336
+ static int
2337
+ TIFFWriteDirectoryTagCheckedFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value)
2338
+ {
2339
+ float m;
2340
+ assert(sizeof(float)==4);
2341
+ m=value;
2342
+ TIFFCvtNativeToIEEEFloat(tif,1,&m);
2343
+ if (tif->tif_flags&TIFF_SWAB)
2344
+ TIFFSwabFloat(&m);
2345
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_FLOAT,1,4,&m));
2346
+ }
2347
+ #endif
2348
+
2349
+ static int
2350
+ TIFFWriteDirectoryTagCheckedFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value)
2351
+ {
2352
+ assert(count<0x40000000);
2353
+ assert(sizeof(float)==4);
2354
+ TIFFCvtNativeToIEEEFloat(tif,count,&value);
2355
+ if (tif->tif_flags&TIFF_SWAB)
2356
+ TIFFSwabArrayOfFloat(value,count);
2357
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_FLOAT,count,count*4,value));
2358
+ }
2359
+
2360
+ #ifdef notdef
2361
+ static int
2362
+ TIFFWriteDirectoryTagCheckedDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value)
2363
+ {
2364
+ double m;
2365
+ assert(sizeof(double)==8);
2366
+ m=value;
2367
+ TIFFCvtNativeToIEEEDouble(tif,1,&m);
2368
+ if (tif->tif_flags&TIFF_SWAB)
2369
+ TIFFSwabDouble(&m);
2370
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_DOUBLE,1,8,&m));
2371
+ }
2372
+ #endif
2373
+
2374
+ static int
2375
+ TIFFWriteDirectoryTagCheckedDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value)
2376
+ {
2377
+ assert(count<0x20000000);
2378
+ assert(sizeof(double)==8);
2379
+ TIFFCvtNativeToIEEEDouble(tif,count,&value);
2380
+ if (tif->tif_flags&TIFF_SWAB)
2381
+ TIFFSwabArrayOfDouble(value,count);
2382
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_DOUBLE,count,count*8,value));
2383
+ }
2384
+
2385
+ static int
2386
+ TIFFWriteDirectoryTagCheckedIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value)
2387
+ {
2388
+ assert(count<0x40000000);
2389
+ assert(sizeof(uint32)==4);
2390
+ if (tif->tif_flags&TIFF_SWAB)
2391
+ TIFFSwabArrayOfLong(value,count);
2392
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_IFD,count,count*4,value));
2393
+ }
2394
+
2395
+ static int
2396
+ TIFFWriteDirectoryTagCheckedIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value)
2397
+ {
2398
+ assert(count<0x20000000);
2399
+ assert(sizeof(uint64)==8);
2400
+ assert(tif->tif_flags&TIFF_BIGTIFF);
2401
+ if (tif->tif_flags&TIFF_SWAB)
2402
+ TIFFSwabArrayOfLong8(value,count);
2403
+ return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_IFD8,count,count*8,value));
2404
+ }
2405
+
2406
+ static int
2407
+ TIFFWriteDirectoryTagData(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 datatype, uint32 count, uint32 datalength, void* data)
2408
+ {
2409
+ static const char module[] = "TIFFWriteDirectoryTagData";
2410
+ uint32 m;
2411
+ m=0;
2412
+ while (m<(*ndir))
2413
+ {
2414
+ assert(dir[m].tdir_tag!=tag);
2415
+ if (dir[m].tdir_tag>tag)
2416
+ break;
2417
+ m++;
2418
+ }
2419
+ if (m<(*ndir))
2420
+ {
2421
+ uint32 n;
2422
+ for (n=*ndir; n>m; n--)
2423
+ dir[n]=dir[n-1];
2424
+ }
2425
+ dir[m].tdir_tag=tag;
2426
+ dir[m].tdir_type=datatype;
2427
+ dir[m].tdir_count=count;
2428
+ dir[m].tdir_offset.toff_long8 = 0;
2429
+ if (datalength<=((tif->tif_flags&TIFF_BIGTIFF)?0x8U:0x4U))
2430
+ _TIFFmemcpy(&dir[m].tdir_offset,data,datalength);
2431
+ else
2432
+ {
2433
+ uint64 na,nb;
2434
+ na=tif->tif_dataoff;
2435
+ nb=na+datalength;
2436
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2437
+ nb=(uint32)nb;
2438
+ if ((nb<na)||(nb<datalength))
2439
+ {
2440
+ TIFFErrorExt(tif->tif_clientdata,module,"Maximum TIFF file size exceeded");
2441
+ return(0);
2442
+ }
2443
+ if (!SeekOK(tif,na))
2444
+ {
2445
+ TIFFErrorExt(tif->tif_clientdata,module,"IO error writing tag data");
2446
+ return(0);
2447
+ }
2448
+ assert(datalength<0x80000000UL);
2449
+ if (!WriteOK(tif,data,(tmsize_t)datalength))
2450
+ {
2451
+ TIFFErrorExt(tif->tif_clientdata,module,"IO error writing tag data");
2452
+ return(0);
2453
+ }
2454
+ tif->tif_dataoff=nb;
2455
+ if (tif->tif_dataoff&1)
2456
+ tif->tif_dataoff++;
2457
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2458
+ {
2459
+ uint32 o;
2460
+ o=(uint32)na;
2461
+ if (tif->tif_flags&TIFF_SWAB)
2462
+ TIFFSwabLong(&o);
2463
+ _TIFFmemcpy(&dir[m].tdir_offset,&o,4);
2464
+ }
2465
+ else
2466
+ {
2467
+ dir[m].tdir_offset.toff_long8 = na;
2468
+ if (tif->tif_flags&TIFF_SWAB)
2469
+ TIFFSwabLong8(&dir[m].tdir_offset.toff_long8);
2470
+ }
2471
+ }
2472
+ (*ndir)++;
2473
+ return(1);
2474
+ }
2475
+
2476
+ /*
2477
+ * Link the current directory into the directory chain for the file.
2478
+ */
2479
+ static int
2480
+ TIFFLinkDirectory(TIFF* tif)
2481
+ {
2482
+ static const char module[] = "TIFFLinkDirectory";
2483
+
2484
+ tif->tif_diroff = (TIFFSeekFile(tif,0,SEEK_END)+1) & (~((toff_t)1));
2485
+
2486
+ /*
2487
+ * Handle SubIFDs
2488
+ */
2489
+ if (tif->tif_flags & TIFF_INSUBIFD)
2490
+ {
2491
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2492
+ {
2493
+ uint32 m;
2494
+ m = (uint32)tif->tif_diroff;
2495
+ if (tif->tif_flags & TIFF_SWAB)
2496
+ TIFFSwabLong(&m);
2497
+ (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET);
2498
+ if (!WriteOK(tif, &m, 4)) {
2499
+ TIFFErrorExt(tif->tif_clientdata, module,
2500
+ "Error writing SubIFD directory link");
2501
+ return (0);
2502
+ }
2503
+ /*
2504
+ * Advance to the next SubIFD or, if this is
2505
+ * the last one configured, revert back to the
2506
+ * normal directory linkage.
2507
+ */
2508
+ if (--tif->tif_nsubifd)
2509
+ tif->tif_subifdoff += 4;
2510
+ else
2511
+ tif->tif_flags &= ~TIFF_INSUBIFD;
2512
+ return (1);
2513
+ }
2514
+ else
2515
+ {
2516
+ uint64 m;
2517
+ m = tif->tif_diroff;
2518
+ if (tif->tif_flags & TIFF_SWAB)
2519
+ TIFFSwabLong8(&m);
2520
+ (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET);
2521
+ if (!WriteOK(tif, &m, 8)) {
2522
+ TIFFErrorExt(tif->tif_clientdata, module,
2523
+ "Error writing SubIFD directory link");
2524
+ return (0);
2525
+ }
2526
+ /*
2527
+ * Advance to the next SubIFD or, if this is
2528
+ * the last one configured, revert back to the
2529
+ * normal directory linkage.
2530
+ */
2531
+ if (--tif->tif_nsubifd)
2532
+ tif->tif_subifdoff += 8;
2533
+ else
2534
+ tif->tif_flags &= ~TIFF_INSUBIFD;
2535
+ return (1);
2536
+ }
2537
+ }
2538
+
2539
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2540
+ {
2541
+ uint32 m;
2542
+ uint32 nextdir;
2543
+ m = (uint32)(tif->tif_diroff);
2544
+ if (tif->tif_flags & TIFF_SWAB)
2545
+ TIFFSwabLong(&m);
2546
+ if (tif->tif_header.classic.tiff_diroff == 0) {
2547
+ /*
2548
+ * First directory, overwrite offset in header.
2549
+ */
2550
+ tif->tif_header.classic.tiff_diroff = (uint32) tif->tif_diroff;
2551
+ (void) TIFFSeekFile(tif,4, SEEK_SET);
2552
+ if (!WriteOK(tif, &m, 4)) {
2553
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
2554
+ "Error writing TIFF header");
2555
+ return (0);
2556
+ }
2557
+ return (1);
2558
+ }
2559
+ /*
2560
+ * Not the first directory, search to the last and append.
2561
+ */
2562
+ nextdir = tif->tif_header.classic.tiff_diroff;
2563
+ while(1) {
2564
+ uint16 dircount;
2565
+ uint32 nextnextdir;
2566
+
2567
+ if (!SeekOK(tif, nextdir) ||
2568
+ !ReadOK(tif, &dircount, 2)) {
2569
+ TIFFErrorExt(tif->tif_clientdata, module,
2570
+ "Error fetching directory count");
2571
+ return (0);
2572
+ }
2573
+ if (tif->tif_flags & TIFF_SWAB)
2574
+ TIFFSwabShort(&dircount);
2575
+ (void) TIFFSeekFile(tif,
2576
+ nextdir+2+dircount*12, SEEK_SET);
2577
+ if (!ReadOK(tif, &nextnextdir, 4)) {
2578
+ TIFFErrorExt(tif->tif_clientdata, module,
2579
+ "Error fetching directory link");
2580
+ return (0);
2581
+ }
2582
+ if (tif->tif_flags & TIFF_SWAB)
2583
+ TIFFSwabLong(&nextnextdir);
2584
+ if (nextnextdir==0)
2585
+ {
2586
+ (void) TIFFSeekFile(tif,
2587
+ nextdir+2+dircount*12, SEEK_SET);
2588
+ if (!WriteOK(tif, &m, 4)) {
2589
+ TIFFErrorExt(tif->tif_clientdata, module,
2590
+ "Error writing directory link");
2591
+ return (0);
2592
+ }
2593
+ break;
2594
+ }
2595
+ nextdir=nextnextdir;
2596
+ }
2597
+ }
2598
+ else
2599
+ {
2600
+ uint64 m;
2601
+ uint64 nextdir;
2602
+ m = tif->tif_diroff;
2603
+ if (tif->tif_flags & TIFF_SWAB)
2604
+ TIFFSwabLong8(&m);
2605
+ if (tif->tif_header.big.tiff_diroff == 0) {
2606
+ /*
2607
+ * First directory, overwrite offset in header.
2608
+ */
2609
+ tif->tif_header.big.tiff_diroff = tif->tif_diroff;
2610
+ (void) TIFFSeekFile(tif,8, SEEK_SET);
2611
+ if (!WriteOK(tif, &m, 8)) {
2612
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
2613
+ "Error writing TIFF header");
2614
+ return (0);
2615
+ }
2616
+ return (1);
2617
+ }
2618
+ /*
2619
+ * Not the first directory, search to the last and append.
2620
+ */
2621
+ nextdir = tif->tif_header.big.tiff_diroff;
2622
+ while(1) {
2623
+ uint64 dircount64;
2624
+ uint16 dircount;
2625
+ uint64 nextnextdir;
2626
+
2627
+ if (!SeekOK(tif, nextdir) ||
2628
+ !ReadOK(tif, &dircount64, 8)) {
2629
+ TIFFErrorExt(tif->tif_clientdata, module,
2630
+ "Error fetching directory count");
2631
+ return (0);
2632
+ }
2633
+ if (tif->tif_flags & TIFF_SWAB)
2634
+ TIFFSwabLong8(&dircount64);
2635
+ if (dircount64>0xFFFF)
2636
+ {
2637
+ TIFFErrorExt(tif->tif_clientdata, module,
2638
+ "Sanity check on tag count failed, likely corrupt TIFF");
2639
+ return (0);
2640
+ }
2641
+ dircount=(uint16)dircount64;
2642
+ (void) TIFFSeekFile(tif,
2643
+ nextdir+8+dircount*20, SEEK_SET);
2644
+ if (!ReadOK(tif, &nextnextdir, 8)) {
2645
+ TIFFErrorExt(tif->tif_clientdata, module,
2646
+ "Error fetching directory link");
2647
+ return (0);
2648
+ }
2649
+ if (tif->tif_flags & TIFF_SWAB)
2650
+ TIFFSwabLong8(&nextnextdir);
2651
+ if (nextnextdir==0)
2652
+ {
2653
+ (void) TIFFSeekFile(tif,
2654
+ nextdir+8+dircount*20, SEEK_SET);
2655
+ if (!WriteOK(tif, &m, 8)) {
2656
+ TIFFErrorExt(tif->tif_clientdata, module,
2657
+ "Error writing directory link");
2658
+ return (0);
2659
+ }
2660
+ break;
2661
+ }
2662
+ nextdir=nextnextdir;
2663
+ }
2664
+ }
2665
+ return (1);
2666
+ }
2667
+
2668
+ /************************************************************************/
2669
+ /* TIFFRewriteField() */
2670
+ /* */
2671
+ /* Rewrite a field in the directory on disk without regard to */
2672
+ /* updating the TIFF directory structure in memory. Currently */
2673
+ /* only supported for field that already exist in the on-disk */
2674
+ /* directory. Mainly used for updating stripoffset / */
2675
+ /* stripbytecount values after the directory is already on */
2676
+ /* disk. */
2677
+ /* */
2678
+ /* Returns zero on failure, and one on success. */
2679
+ /************************************************************************/
2680
+
2681
+ int
2682
+ _TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype,
2683
+ tmsize_t count, void* data)
2684
+ {
2685
+ static const char module[] = "TIFFResetField";
2686
+ /* const TIFFField* fip = NULL; */
2687
+ uint16 dircount;
2688
+ tmsize_t dirsize;
2689
+ uint8 direntry_raw[20];
2690
+ uint16 entry_tag = 0;
2691
+ uint16 entry_type = 0;
2692
+ uint64 entry_count = 0;
2693
+ uint64 entry_offset = 0;
2694
+ int value_in_entry = 0;
2695
+ uint64 read_offset;
2696
+ uint8 *buf_to_write = NULL;
2697
+ TIFFDataType datatype;
2698
+
2699
+ /* -------------------------------------------------------------------- */
2700
+ /* Find field definition. */
2701
+ /* -------------------------------------------------------------------- */
2702
+ /*fip =*/ TIFFFindField(tif, tag, TIFF_ANY);
2703
+
2704
+ /* -------------------------------------------------------------------- */
2705
+ /* Do some checking this is a straight forward case. */
2706
+ /* -------------------------------------------------------------------- */
2707
+ if( isMapped(tif) )
2708
+ {
2709
+ TIFFErrorExt( tif->tif_clientdata, module,
2710
+ "Memory mapped files not currently supported for this operation." );
2711
+ return 0;
2712
+ }
2713
+
2714
+ if( tif->tif_diroff == 0 )
2715
+ {
2716
+ TIFFErrorExt( tif->tif_clientdata, module,
2717
+ "Attempt to reset field on directory not already on disk." );
2718
+ return 0;
2719
+ }
2720
+
2721
+ /* -------------------------------------------------------------------- */
2722
+ /* Read the directory entry count. */
2723
+ /* -------------------------------------------------------------------- */
2724
+ if (!SeekOK(tif, tif->tif_diroff)) {
2725
+ TIFFErrorExt(tif->tif_clientdata, module,
2726
+ "%s: Seek error accessing TIFF directory",
2727
+ tif->tif_name);
2728
+ return 0;
2729
+ }
2730
+
2731
+ read_offset = tif->tif_diroff;
2732
+
2733
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2734
+ {
2735
+ if (!ReadOK(tif, &dircount, sizeof (uint16))) {
2736
+ TIFFErrorExt(tif->tif_clientdata, module,
2737
+ "%s: Can not read TIFF directory count",
2738
+ tif->tif_name);
2739
+ return 0;
2740
+ }
2741
+ if (tif->tif_flags & TIFF_SWAB)
2742
+ TIFFSwabShort(&dircount);
2743
+ dirsize = 12;
2744
+ read_offset += 2;
2745
+ } else {
2746
+ uint64 dircount64;
2747
+ if (!ReadOK(tif, &dircount64, sizeof (uint64))) {
2748
+ TIFFErrorExt(tif->tif_clientdata, module,
2749
+ "%s: Can not read TIFF directory count",
2750
+ tif->tif_name);
2751
+ return 0;
2752
+ }
2753
+ if (tif->tif_flags & TIFF_SWAB)
2754
+ TIFFSwabLong8(&dircount64);
2755
+ dircount = (uint16)dircount64;
2756
+ dirsize = 20;
2757
+ read_offset += 8;
2758
+ }
2759
+
2760
+ /* -------------------------------------------------------------------- */
2761
+ /* Read through directory to find target tag. */
2762
+ /* -------------------------------------------------------------------- */
2763
+ while( dircount > 0 )
2764
+ {
2765
+ if (!ReadOK(tif, direntry_raw, dirsize)) {
2766
+ TIFFErrorExt(tif->tif_clientdata, module,
2767
+ "%s: Can not read TIFF directory entry.",
2768
+ tif->tif_name);
2769
+ return 0;
2770
+ }
2771
+
2772
+ memcpy( &entry_tag, direntry_raw + 0, sizeof(uint16) );
2773
+ if (tif->tif_flags&TIFF_SWAB)
2774
+ TIFFSwabShort( &entry_tag );
2775
+
2776
+ if( entry_tag == tag )
2777
+ break;
2778
+
2779
+ read_offset += dirsize;
2780
+ }
2781
+
2782
+ if( entry_tag != tag )
2783
+ {
2784
+ TIFFErrorExt(tif->tif_clientdata, module,
2785
+ "%s: Could not find tag %d.",
2786
+ tif->tif_name, tag );
2787
+ return 0;
2788
+ }
2789
+
2790
+ /* -------------------------------------------------------------------- */
2791
+ /* Extract the type, count and offset for this entry. */
2792
+ /* -------------------------------------------------------------------- */
2793
+ memcpy( &entry_type, direntry_raw + 2, sizeof(uint16) );
2794
+ if (tif->tif_flags&TIFF_SWAB)
2795
+ TIFFSwabShort( &entry_type );
2796
+
2797
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2798
+ {
2799
+ uint32 value;
2800
+
2801
+ memcpy( &value, direntry_raw + 4, sizeof(uint32) );
2802
+ if (tif->tif_flags&TIFF_SWAB)
2803
+ TIFFSwabLong( &value );
2804
+ entry_count = value;
2805
+
2806
+ memcpy( &value, direntry_raw + 8, sizeof(uint32) );
2807
+ if (tif->tif_flags&TIFF_SWAB)
2808
+ TIFFSwabLong( &value );
2809
+ entry_offset = value;
2810
+ }
2811
+ else
2812
+ {
2813
+ memcpy( &entry_count, direntry_raw + 4, sizeof(uint64) );
2814
+ if (tif->tif_flags&TIFF_SWAB)
2815
+ TIFFSwabLong8( &entry_count );
2816
+
2817
+ memcpy( &entry_offset, direntry_raw + 12, sizeof(uint64) );
2818
+ if (tif->tif_flags&TIFF_SWAB)
2819
+ TIFFSwabLong8( &entry_offset );
2820
+ }
2821
+
2822
+ /* -------------------------------------------------------------------- */
2823
+ /* What data type do we want to write this as? */
2824
+ /* -------------------------------------------------------------------- */
2825
+ if( TIFFDataWidth(in_datatype) == 8 && !(tif->tif_flags&TIFF_BIGTIFF) )
2826
+ {
2827
+ if( in_datatype == TIFF_LONG8 )
2828
+ datatype = TIFF_LONG;
2829
+ else if( in_datatype == TIFF_SLONG8 )
2830
+ datatype = TIFF_SLONG;
2831
+ else if( in_datatype == TIFF_IFD8 )
2832
+ datatype = TIFF_IFD;
2833
+ else
2834
+ datatype = in_datatype;
2835
+ }
2836
+ else
2837
+ datatype = in_datatype;
2838
+
2839
+ /* -------------------------------------------------------------------- */
2840
+ /* Prepare buffer of actual data to write. This includes */
2841
+ /* swabbing as needed. */
2842
+ /* -------------------------------------------------------------------- */
2843
+ buf_to_write =
2844
+ (uint8 *)_TIFFCheckMalloc(tif, count, TIFFDataWidth(datatype),
2845
+ "for field buffer.");
2846
+ if (!buf_to_write)
2847
+ return 0;
2848
+
2849
+ if( datatype == in_datatype )
2850
+ memcpy( buf_to_write, data, count * TIFFDataWidth(datatype) );
2851
+ else if( datatype == TIFF_SLONG && in_datatype == TIFF_SLONG8 )
2852
+ {
2853
+ tmsize_t i;
2854
+
2855
+ for( i = 0; i < count; i++ )
2856
+ {
2857
+ ((int32 *) buf_to_write)[i] =
2858
+ (int32) ((int64 *) data)[i];
2859
+ if( (int64) ((int32 *) buf_to_write)[i] != ((int64 *) data)[i] )
2860
+ {
2861
+ _TIFFfree( buf_to_write );
2862
+ TIFFErrorExt( tif->tif_clientdata, module,
2863
+ "Value exceeds 32bit range of output type." );
2864
+ return 0;
2865
+ }
2866
+ }
2867
+ }
2868
+ else if( (datatype == TIFF_LONG && in_datatype == TIFF_LONG8)
2869
+ || (datatype == TIFF_IFD && in_datatype == TIFF_IFD8) )
2870
+ {
2871
+ tmsize_t i;
2872
+
2873
+ for( i = 0; i < count; i++ )
2874
+ {
2875
+ ((uint32 *) buf_to_write)[i] =
2876
+ (uint32) ((uint64 *) data)[i];
2877
+ if( (uint64) ((uint32 *) buf_to_write)[i] != ((uint64 *) data)[i] )
2878
+ {
2879
+ _TIFFfree( buf_to_write );
2880
+ TIFFErrorExt( tif->tif_clientdata, module,
2881
+ "Value exceeds 32bit range of output type." );
2882
+ return 0;
2883
+ }
2884
+ }
2885
+ }
2886
+
2887
+ if( TIFFDataWidth(datatype) > 1 && (tif->tif_flags&TIFF_SWAB) )
2888
+ {
2889
+ if( TIFFDataWidth(datatype) == 2 )
2890
+ TIFFSwabArrayOfShort( (uint16 *) buf_to_write, count );
2891
+ else if( TIFFDataWidth(datatype) == 4 )
2892
+ TIFFSwabArrayOfLong( (uint32 *) buf_to_write, count );
2893
+ else if( TIFFDataWidth(datatype) == 8 )
2894
+ TIFFSwabArrayOfLong8( (uint64 *) buf_to_write, count );
2895
+ }
2896
+
2897
+ /* -------------------------------------------------------------------- */
2898
+ /* Is this a value that fits into the directory entry? */
2899
+ /* -------------------------------------------------------------------- */
2900
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2901
+ {
2902
+ if( TIFFDataWidth(datatype) * count <= 4 )
2903
+ {
2904
+ entry_offset = read_offset + 8;
2905
+ value_in_entry = 1;
2906
+ }
2907
+ }
2908
+ else
2909
+ {
2910
+ if( TIFFDataWidth(datatype) * count <= 8 )
2911
+ {
2912
+ entry_offset = read_offset + 12;
2913
+ value_in_entry = 1;
2914
+ }
2915
+ }
2916
+
2917
+ /* -------------------------------------------------------------------- */
2918
+ /* If the tag type, and count match, then we just write it out */
2919
+ /* over the old values without altering the directory entry at */
2920
+ /* all. */
2921
+ /* -------------------------------------------------------------------- */
2922
+ if( entry_count == (uint64)count && entry_type == (uint16) datatype )
2923
+ {
2924
+ if (!SeekOK(tif, entry_offset)) {
2925
+ _TIFFfree( buf_to_write );
2926
+ TIFFErrorExt(tif->tif_clientdata, module,
2927
+ "%s: Seek error accessing TIFF directory",
2928
+ tif->tif_name);
2929
+ return 0;
2930
+ }
2931
+ if (!WriteOK(tif, buf_to_write, count*TIFFDataWidth(datatype))) {
2932
+ _TIFFfree( buf_to_write );
2933
+ TIFFErrorExt(tif->tif_clientdata, module,
2934
+ "Error writing directory link");
2935
+ return (0);
2936
+ }
2937
+
2938
+ _TIFFfree( buf_to_write );
2939
+ return 1;
2940
+ }
2941
+
2942
+ /* -------------------------------------------------------------------- */
2943
+ /* Otherwise, we write the new tag data at the end of the file. */
2944
+ /* -------------------------------------------------------------------- */
2945
+ if( !value_in_entry )
2946
+ {
2947
+ entry_offset = TIFFSeekFile(tif,0,SEEK_END);
2948
+
2949
+ if (!WriteOK(tif, buf_to_write, count*TIFFDataWidth(datatype))) {
2950
+ _TIFFfree( buf_to_write );
2951
+ TIFFErrorExt(tif->tif_clientdata, module,
2952
+ "Error writing directory link");
2953
+ return (0);
2954
+ }
2955
+ }
2956
+ else
2957
+ {
2958
+ memcpy( &entry_offset, buf_to_write, count*TIFFDataWidth(datatype));
2959
+ }
2960
+
2961
+ _TIFFfree( buf_to_write );
2962
+ buf_to_write = 0;
2963
+
2964
+ /* -------------------------------------------------------------------- */
2965
+ /* Adjust the directory entry. */
2966
+ /* -------------------------------------------------------------------- */
2967
+ entry_type = datatype;
2968
+ memcpy( direntry_raw + 2, &entry_type, sizeof(uint16) );
2969
+ if (tif->tif_flags&TIFF_SWAB)
2970
+ TIFFSwabShort( (uint16 *) (direntry_raw + 2) );
2971
+
2972
+ if (!(tif->tif_flags&TIFF_BIGTIFF))
2973
+ {
2974
+ uint32 value;
2975
+
2976
+ value = (uint32) entry_count;
2977
+ memcpy( direntry_raw + 4, &value, sizeof(uint32) );
2978
+ if (tif->tif_flags&TIFF_SWAB)
2979
+ TIFFSwabLong( (uint32 *) (direntry_raw + 4) );
2980
+
2981
+ value = (uint32) entry_offset;
2982
+ memcpy( direntry_raw + 8, &value, sizeof(uint32) );
2983
+ if (tif->tif_flags&TIFF_SWAB)
2984
+ TIFFSwabLong( (uint32 *) (direntry_raw + 8) );
2985
+ }
2986
+ else
2987
+ {
2988
+ memcpy( direntry_raw + 4, &entry_count, sizeof(uint64) );
2989
+ if (tif->tif_flags&TIFF_SWAB)
2990
+ TIFFSwabLong8( (uint64 *) (direntry_raw + 4) );
2991
+
2992
+ memcpy( direntry_raw + 12, &entry_offset, sizeof(uint64) );
2993
+ if (tif->tif_flags&TIFF_SWAB)
2994
+ TIFFSwabLong8( (uint64 *) (direntry_raw + 12) );
2995
+ }
2996
+
2997
+ /* -------------------------------------------------------------------- */
2998
+ /* Write the directory entry out to disk. */
2999
+ /* -------------------------------------------------------------------- */
3000
+ if (!SeekOK(tif, read_offset )) {
3001
+ TIFFErrorExt(tif->tif_clientdata, module,
3002
+ "%s: Seek error accessing TIFF directory",
3003
+ tif->tif_name);
3004
+ return 0;
3005
+ }
3006
+
3007
+ if (!WriteOK(tif, direntry_raw,dirsize))
3008
+ {
3009
+ TIFFErrorExt(tif->tif_clientdata, module,
3010
+ "%s: Can not write TIFF directory entry.",
3011
+ tif->tif_name);
3012
+ return 0;
3013
+ }
3014
+
3015
+ return 1;
3016
+ }
3017
+ /* vim: set ts=8 sts=8 sw=8 noet: */
3018
+ /*
3019
+ * Local Variables:
3020
+ * mode: c
3021
+ * c-basic-offset: 8
3022
+ * fill-column: 78
3023
+ * End:
3024
+ */