rmagick 4.1.0.rc2 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

Files changed (414) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +3 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/workflows/ci.yml +108 -0
  6. data/.gitignore +3 -1
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +24 -0
  9. data/.rubocop_todo.yml +151 -297
  10. data/.yardopts +5 -0
  11. data/CHANGELOG.md +96 -0
  12. data/CODE_OF_CONDUCT.md +122 -7
  13. data/CONTRIBUTING.md +14 -10
  14. data/README.md +324 -0
  15. data/Rakefile +16 -22
  16. data/before_install_linux.sh +22 -32
  17. data/before_install_osx.sh +57 -2
  18. data/ext/RMagick/extconf.rb +108 -95
  19. data/ext/RMagick/rmagick.c +77 -104
  20. data/ext/RMagick/rmagick.h +77 -70
  21. data/ext/RMagick/rmdraw.c +289 -446
  22. data/ext/RMagick/rmenum.c +96 -113
  23. data/ext/RMagick/rmfill.c +49 -77
  24. data/ext/RMagick/rmilist.c +144 -244
  25. data/ext/RMagick/rmimage.c +3407 -4166
  26. data/ext/RMagick/rminfo.c +540 -738
  27. data/ext/RMagick/rmkinfo.c +21 -87
  28. data/ext/RMagick/rmmain.c +419 -246
  29. data/ext/RMagick/rmmontage.c +60 -126
  30. data/ext/RMagick/rmpixel.c +401 -345
  31. data/ext/RMagick/rmstruct.c +62 -88
  32. data/ext/RMagick/rmutil.c +151 -228
  33. data/lib/rmagick/version.rb +1 -1
  34. data/lib/rmagick_internal.rb +128 -77
  35. data/lib/rvg/clippath.rb +2 -1
  36. data/lib/rvg/container.rb +10 -5
  37. data/lib/rvg/describable.rb +1 -1
  38. data/lib/rvg/embellishable.rb +5 -4
  39. data/lib/rvg/misc.rb +15 -12
  40. data/lib/rvg/paint.rb +2 -1
  41. data/lib/rvg/pathdata.rb +12 -11
  42. data/lib/rvg/rvg.rb +8 -4
  43. data/lib/rvg/stylable.rb +9 -7
  44. data/lib/rvg/text.rb +11 -6
  45. data/lib/rvg/transformable.rb +3 -2
  46. data/lib/rvg/units.rb +1 -1
  47. data/rmagick.gemspec +8 -6
  48. metadata +46 -421
  49. data/.appveyor.yml +0 -57
  50. data/.circleci/config.yml +0 -56
  51. data/.ruby-version +0 -1
  52. data/.simplecov +0 -27
  53. data/.travis.yml +0 -64
  54. data/Doxyfile +0 -1514
  55. data/README.textile +0 -259
  56. data/benchmarks/memory/README.md +0 -50
  57. data/benchmarks/memory/image_new.rb +0 -8
  58. data/benchmarks/memory/rmagick.gnuplot +0 -16
  59. data/doc/.cvsignore +0 -1
  60. data/doc/comtasks.html +0 -287
  61. data/doc/constants.html +0 -1581
  62. data/doc/css/doc.css +0 -299
  63. data/doc/css/popup.css +0 -34
  64. data/doc/css/ref.css +0 -67
  65. data/doc/draw.html +0 -3272
  66. data/doc/ex/InitialCoords.rb +0 -22
  67. data/doc/ex/NewCoordSys.rb +0 -30
  68. data/doc/ex/OrigCoordSys.rb +0 -16
  69. data/doc/ex/PreserveAspectRatio.rb +0 -204
  70. data/doc/ex/RotateScale.rb +0 -36
  71. data/doc/ex/Skew.rb +0 -38
  72. data/doc/ex/Use01.rb +0 -15
  73. data/doc/ex/Use02.rb +0 -20
  74. data/doc/ex/Use03.rb +0 -16
  75. data/doc/ex/ViewBox.rb +0 -31
  76. data/doc/ex/adaptive_threshold.rb +0 -9
  77. data/doc/ex/add_noise.rb +0 -16
  78. data/doc/ex/affine.rb +0 -48
  79. data/doc/ex/affine_transform.rb +0 -20
  80. data/doc/ex/arc.rb +0 -49
  81. data/doc/ex/arcpath.rb +0 -32
  82. data/doc/ex/arcs01.rb +0 -28
  83. data/doc/ex/arcs02.rb +0 -59
  84. data/doc/ex/average.rb +0 -15
  85. data/doc/ex/axes.rb +0 -64
  86. data/doc/ex/baseline_shift01.rb +0 -17
  87. data/doc/ex/bilevel_channel.rb +0 -8
  88. data/doc/ex/blur_image.rb +0 -12
  89. data/doc/ex/border.rb +0 -10
  90. data/doc/ex/bounding_box.rb +0 -42
  91. data/doc/ex/cbezier1.rb +0 -41
  92. data/doc/ex/cbezier2.rb +0 -41
  93. data/doc/ex/cbezier3.rb +0 -41
  94. data/doc/ex/cbezier4.rb +0 -42
  95. data/doc/ex/cbezier5.rb +0 -42
  96. data/doc/ex/cbezier6.rb +0 -53
  97. data/doc/ex/channel.rb +0 -25
  98. data/doc/ex/charcoal.rb +0 -12
  99. data/doc/ex/chop.rb +0 -29
  100. data/doc/ex/circle.rb +0 -33
  101. data/doc/ex/circle01.rb +0 -16
  102. data/doc/ex/clip_path.rb +0 -60
  103. data/doc/ex/coalesce.rb +0 -57
  104. data/doc/ex/color_fill_to_border.rb +0 -29
  105. data/doc/ex/color_floodfill.rb +0 -28
  106. data/doc/ex/color_histogram.rb +0 -47
  107. data/doc/ex/color_reset.rb +0 -11
  108. data/doc/ex/colorize.rb +0 -16
  109. data/doc/ex/colors.rb +0 -64
  110. data/doc/ex/compose_mask.rb +0 -22
  111. data/doc/ex/composite.rb +0 -133
  112. data/doc/ex/composite_layers.rb +0 -52
  113. data/doc/ex/composite_tiled.rb +0 -21
  114. data/doc/ex/contrast.rb +0 -36
  115. data/doc/ex/crop.rb +0 -31
  116. data/doc/ex/crop_with_gravity.rb +0 -42
  117. data/doc/ex/cubic01.rb +0 -43
  118. data/doc/ex/cubic02.rb +0 -91
  119. data/doc/ex/cycle_colormap.rb +0 -21
  120. data/doc/ex/dissolve.rb +0 -12
  121. data/doc/ex/drawcomp.rb +0 -41
  122. data/doc/ex/drop_shadow.rb +0 -60
  123. data/doc/ex/edge.rb +0 -11
  124. data/doc/ex/ellipse.rb +0 -45
  125. data/doc/ex/ellipse01.rb +0 -21
  126. data/doc/ex/emboss.rb +0 -11
  127. data/doc/ex/enhance.rb +0 -28
  128. data/doc/ex/equalize.rb +0 -11
  129. data/doc/ex/evenodd.rb +0 -42
  130. data/doc/ex/fill_pattern.rb +0 -23
  131. data/doc/ex/flatten_images.rb +0 -36
  132. data/doc/ex/flip.rb +0 -11
  133. data/doc/ex/flop.rb +0 -11
  134. data/doc/ex/font_styles.rb +0 -32
  135. data/doc/ex/fonts.rb +0 -16
  136. data/doc/ex/frame.rb +0 -12
  137. data/doc/ex/gaussian_blur.rb +0 -11
  138. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  139. data/doc/ex/get_pixels.rb +0 -45
  140. data/doc/ex/get_type_metrics.rb +0 -142
  141. data/doc/ex/gradientfill.rb +0 -27
  142. data/doc/ex/grav.rb +0 -45
  143. data/doc/ex/gravity.rb +0 -78
  144. data/doc/ex/group.rb +0 -26
  145. data/doc/ex/hatchfill.rb +0 -27
  146. data/doc/ex/image.rb +0 -44
  147. data/doc/ex/images/Apple.miff +0 -0
  148. data/doc/ex/images/Ballerina.jpg +0 -0
  149. data/doc/ex/images/Ballerina3.jpg +0 -0
  150. data/doc/ex/images/Button_0.gif +0 -0
  151. data/doc/ex/images/Button_1.gif +0 -0
  152. data/doc/ex/images/Button_2.gif +0 -0
  153. data/doc/ex/images/Button_3.gif +0 -0
  154. data/doc/ex/images/Button_4.gif +0 -0
  155. data/doc/ex/images/Button_5.gif +0 -0
  156. data/doc/ex/images/Button_6.gif +0 -0
  157. data/doc/ex/images/Button_7.gif +0 -0
  158. data/doc/ex/images/Button_8.gif +0 -0
  159. data/doc/ex/images/Button_9.gif +0 -0
  160. data/doc/ex/images/Button_A.gif +0 -0
  161. data/doc/ex/images/Button_B.gif +0 -0
  162. data/doc/ex/images/Button_C.gif +0 -0
  163. data/doc/ex/images/Button_D.gif +0 -0
  164. data/doc/ex/images/Button_E.gif +0 -0
  165. data/doc/ex/images/Button_F.gif +0 -0
  166. data/doc/ex/images/Button_G.gif +0 -0
  167. data/doc/ex/images/Button_H.gif +0 -0
  168. data/doc/ex/images/Button_I.gif +0 -0
  169. data/doc/ex/images/Button_J.gif +0 -0
  170. data/doc/ex/images/Button_K.gif +0 -0
  171. data/doc/ex/images/Button_L.gif +0 -0
  172. data/doc/ex/images/Button_M.gif +0 -0
  173. data/doc/ex/images/Button_N.gif +0 -0
  174. data/doc/ex/images/Button_O.gif +0 -0
  175. data/doc/ex/images/Button_P.gif +0 -0
  176. data/doc/ex/images/Button_Q.gif +0 -0
  177. data/doc/ex/images/Button_R.gif +0 -0
  178. data/doc/ex/images/Button_S.gif +0 -0
  179. data/doc/ex/images/Button_T.gif +0 -0
  180. data/doc/ex/images/Button_U.gif +0 -0
  181. data/doc/ex/images/Button_V.gif +0 -0
  182. data/doc/ex/images/Button_W.gif +0 -0
  183. data/doc/ex/images/Button_X.gif +0 -0
  184. data/doc/ex/images/Button_Y.gif +0 -0
  185. data/doc/ex/images/Button_Z.gif +0 -0
  186. data/doc/ex/images/Cheetah.jpg +0 -0
  187. data/doc/ex/images/Coffee.png +0 -0
  188. data/doc/ex/images/Flower_Hat.jpg +0 -0
  189. data/doc/ex/images/Gold_Statue.jpg +0 -0
  190. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  191. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  192. data/doc/ex/images/Leaf.miff +0 -0
  193. data/doc/ex/images/No.png +0 -0
  194. data/doc/ex/images/Polynesia.jpg +0 -0
  195. data/doc/ex/images/Red_Rocks.jpg +0 -0
  196. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  197. data/doc/ex/images/Shorts.jpg +0 -0
  198. data/doc/ex/images/Snake.png +0 -0
  199. data/doc/ex/images/Violin.jpg +0 -0
  200. data/doc/ex/images/Yellow_Rose.miff +0 -0
  201. data/doc/ex/images/big-duck.gif +0 -0
  202. data/doc/ex/images/duck.gif +0 -0
  203. data/doc/ex/images/duck0.gif +0 -0
  204. data/doc/ex/images/duck1.gif +0 -0
  205. data/doc/ex/images/duck10.gif +0 -0
  206. data/doc/ex/images/duck11.gif +0 -0
  207. data/doc/ex/images/duck12.gif +0 -0
  208. data/doc/ex/images/duck13.gif +0 -0
  209. data/doc/ex/images/duck14.gif +0 -0
  210. data/doc/ex/images/duck15.gif +0 -0
  211. data/doc/ex/images/duck2.gif +0 -0
  212. data/doc/ex/images/duck3.gif +0 -0
  213. data/doc/ex/images/duck4.gif +0 -0
  214. data/doc/ex/images/duck5.gif +0 -0
  215. data/doc/ex/images/duck6.gif +0 -0
  216. data/doc/ex/images/duck7.gif +0 -0
  217. data/doc/ex/images/duck8.gif +0 -0
  218. data/doc/ex/images/duck9.gif +0 -0
  219. data/doc/ex/images/graydient230x6.gif +0 -0
  220. data/doc/ex/images/image_with_profile.jpg +0 -0
  221. data/doc/ex/images/logo400x83.gif +0 -0
  222. data/doc/ex/images/model.miff +0 -0
  223. data/doc/ex/images/notimplemented.gif +0 -0
  224. data/doc/ex/images/smile.miff +0 -0
  225. data/doc/ex/images/spin.gif +0 -0
  226. data/doc/ex/implode.rb +0 -34
  227. data/doc/ex/level.rb +0 -11
  228. data/doc/ex/level_colors.rb +0 -11
  229. data/doc/ex/line.rb +0 -41
  230. data/doc/ex/line01.rb +0 -21
  231. data/doc/ex/mask.rb +0 -35
  232. data/doc/ex/matte_fill_to_border.rb +0 -39
  233. data/doc/ex/matte_floodfill.rb +0 -32
  234. data/doc/ex/matte_replace.rb +0 -39
  235. data/doc/ex/median_filter.rb +0 -28
  236. data/doc/ex/modulate.rb +0 -11
  237. data/doc/ex/mono.rb +0 -23
  238. data/doc/ex/morph.rb +0 -25
  239. data/doc/ex/mosaic.rb +0 -37
  240. data/doc/ex/motion_blur.rb +0 -11
  241. data/doc/ex/negate.rb +0 -11
  242. data/doc/ex/negate_channel.rb +0 -9
  243. data/doc/ex/nested_rvg.rb +0 -21
  244. data/doc/ex/nonzero.rb +0 -42
  245. data/doc/ex/normalize.rb +0 -11
  246. data/doc/ex/oil_paint.rb +0 -11
  247. data/doc/ex/opacity.rb +0 -37
  248. data/doc/ex/ordered_dither.rb +0 -11
  249. data/doc/ex/path.rb +0 -63
  250. data/doc/ex/pattern1.rb +0 -25
  251. data/doc/ex/pattern2.rb +0 -26
  252. data/doc/ex/polaroid.rb +0 -26
  253. data/doc/ex/polygon.rb +0 -23
  254. data/doc/ex/polygon01.rb +0 -21
  255. data/doc/ex/polyline.rb +0 -22
  256. data/doc/ex/polyline01.rb +0 -21
  257. data/doc/ex/posterize.rb +0 -8
  258. data/doc/ex/preview.rb +0 -8
  259. data/doc/ex/qbezierpath.rb +0 -52
  260. data/doc/ex/quad01.rb +0 -34
  261. data/doc/ex/quantize-m.rb +0 -25
  262. data/doc/ex/radial_blur.rb +0 -9
  263. data/doc/ex/raise.rb +0 -8
  264. data/doc/ex/random_threshold_channel.rb +0 -13
  265. data/doc/ex/rect01.rb +0 -14
  266. data/doc/ex/rect02.rb +0 -20
  267. data/doc/ex/rectangle.rb +0 -34
  268. data/doc/ex/reduce_noise.rb +0 -28
  269. data/doc/ex/remap.rb +0 -11
  270. data/doc/ex/remap_images.rb +0 -19
  271. data/doc/ex/resize_to_fill.rb +0 -8
  272. data/doc/ex/resize_to_fit.rb +0 -8
  273. data/doc/ex/roll.rb +0 -9
  274. data/doc/ex/rotate.rb +0 -44
  275. data/doc/ex/rotate_f.rb +0 -14
  276. data/doc/ex/roundrect.rb +0 -33
  277. data/doc/ex/rubyname.rb +0 -30
  278. data/doc/ex/rvg_clippath.rb +0 -12
  279. data/doc/ex/rvg_linecap.rb +0 -42
  280. data/doc/ex/rvg_linejoin.rb +0 -40
  281. data/doc/ex/rvg_opacity.rb +0 -18
  282. data/doc/ex/rvg_pattern.rb +0 -26
  283. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  284. data/doc/ex/segment.rb +0 -11
  285. data/doc/ex/sepiatone.rb +0 -7
  286. data/doc/ex/shade.rb +0 -11
  287. data/doc/ex/shadow.rb +0 -30
  288. data/doc/ex/shave.rb +0 -15
  289. data/doc/ex/shear.rb +0 -10
  290. data/doc/ex/sketch.rb +0 -17
  291. data/doc/ex/skewx.rb +0 -51
  292. data/doc/ex/skewy.rb +0 -47
  293. data/doc/ex/smile.rb +0 -126
  294. data/doc/ex/solarize.rb +0 -11
  295. data/doc/ex/sparse_color.rb +0 -55
  296. data/doc/ex/splice.rb +0 -8
  297. data/doc/ex/spread.rb +0 -11
  298. data/doc/ex/stegano.rb +0 -54
  299. data/doc/ex/stroke_dasharray.rb +0 -42
  300. data/doc/ex/stroke_fill.rb +0 -10
  301. data/doc/ex/stroke_linecap.rb +0 -44
  302. data/doc/ex/stroke_linejoin.rb +0 -48
  303. data/doc/ex/stroke_width.rb +0 -49
  304. data/doc/ex/swirl.rb +0 -17
  305. data/doc/ex/text.rb +0 -37
  306. data/doc/ex/text01.rb +0 -16
  307. data/doc/ex/text_align.rb +0 -36
  308. data/doc/ex/text_antialias.rb +0 -37
  309. data/doc/ex/text_styles.rb +0 -19
  310. data/doc/ex/text_undercolor.rb +0 -28
  311. data/doc/ex/texture_fill_to_border.rb +0 -34
  312. data/doc/ex/texture_floodfill.rb +0 -32
  313. data/doc/ex/texturefill.rb +0 -24
  314. data/doc/ex/threshold.rb +0 -13
  315. data/doc/ex/to_blob.rb +0 -13
  316. data/doc/ex/translate.rb +0 -39
  317. data/doc/ex/transparent.rb +0 -38
  318. data/doc/ex/transpose.rb +0 -9
  319. data/doc/ex/transverse.rb +0 -9
  320. data/doc/ex/tref01.rb +0 -24
  321. data/doc/ex/triangle01.rb +0 -15
  322. data/doc/ex/trim.rb +0 -23
  323. data/doc/ex/tspan01.rb +0 -17
  324. data/doc/ex/tspan02.rb +0 -17
  325. data/doc/ex/tspan03.rb +0 -19
  326. data/doc/ex/unsharp_mask.rb +0 -28
  327. data/doc/ex/viewex.rb +0 -33
  328. data/doc/ex/vignette.rb +0 -12
  329. data/doc/ex/watermark.rb +0 -27
  330. data/doc/ex/wave.rb +0 -9
  331. data/doc/ex/wet_floor.rb +0 -58
  332. data/doc/ex/writing_mode01.rb +0 -26
  333. data/doc/ex/writing_mode02.rb +0 -26
  334. data/doc/ilist.html +0 -2056
  335. data/doc/image1.html +0 -4680
  336. data/doc/image2.html +0 -3665
  337. data/doc/image3.html +0 -4522
  338. data/doc/imageattrs.html +0 -1638
  339. data/doc/imusage.html +0 -514
  340. data/doc/index.html +0 -416
  341. data/doc/info.html +0 -1499
  342. data/doc/magick.html +0 -570
  343. data/doc/optequiv.html +0 -2435
  344. data/doc/rvg.html +0 -975
  345. data/doc/rvgclip.html +0 -248
  346. data/doc/rvggroup.html +0 -305
  347. data/doc/rvgimage.html +0 -289
  348. data/doc/rvgpattern.html +0 -475
  349. data/doc/rvgshape.html +0 -406
  350. data/doc/rvgstyle.html +0 -270
  351. data/doc/rvgtext.html +0 -465
  352. data/doc/rvgtspan.html +0 -238
  353. data/doc/rvgtut.html +0 -530
  354. data/doc/rvguse.html +0 -145
  355. data/doc/rvgxform.html +0 -294
  356. data/doc/scripts/doc.js +0 -22
  357. data/doc/scripts/stripeTables.js +0 -23
  358. data/doc/struct.html +0 -1339
  359. data/doc/usage.html +0 -1621
  360. data/examples/constitute.rb +0 -7
  361. data/examples/crop_with_gravity.rb +0 -43
  362. data/examples/demo.rb +0 -323
  363. data/examples/describe.rb +0 -41
  364. data/examples/find_similar_region.rb +0 -34
  365. data/examples/histogram.rb +0 -312
  366. data/examples/identify.rb +0 -174
  367. data/examples/image_opacity.rb +0 -28
  368. data/examples/import_export.rb +0 -31
  369. data/examples/pattern_fill.rb +0 -37
  370. data/examples/rotating_text.rb +0 -45
  371. data/examples/spinner.rb +0 -49
  372. data/examples/thumbnail.rb +0 -64
  373. data/examples/vignette.rb +0 -78
  374. data/spec/rmagick/ImageList1_spec.rb +0 -24
  375. data/spec/rmagick/draw_spec.rb +0 -155
  376. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  377. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  378. data/spec/rmagick/image/composite_spec.rb +0 -72
  379. data/spec/rmagick/image/constitute_spec.rb +0 -13
  380. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  381. data/spec/rmagick/image/dissolve_spec.rb +0 -54
  382. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  383. data/spec/rmagick/image/ping_spec.rb +0 -12
  384. data/spec/rmagick/image/properties_spec.rb +0 -27
  385. data/spec/rmagick/image/read_spec.rb +0 -28
  386. data/spec/spec_helper.rb +0 -9
  387. data/spec/support/issue_200/app.rb +0 -8
  388. data/test/Draw.rb +0 -351
  389. data/test/Enum.rb +0 -228
  390. data/test/Fill.rb +0 -93
  391. data/test/Image1.rb +0 -606
  392. data/test/Image2.rb +0 -1408
  393. data/test/Image3.rb +0 -1086
  394. data/test/ImageList1.rb +0 -858
  395. data/test/ImageList2.rb +0 -375
  396. data/test/Image_attributes.rb +0 -635
  397. data/test/Import_Export.rb +0 -111
  398. data/test/Info.rb +0 -436
  399. data/test/KernelInfo.rb +0 -59
  400. data/test/Magick.rb +0 -311
  401. data/test/Pixel.rb +0 -259
  402. data/test/PolaroidOptions.rb +0 -23
  403. data/test/Preview.rb +0 -26
  404. data/test/Struct.rb +0 -45
  405. data/test/appearance/Montage.rb +0 -26
  406. data/test/appearance/appearance_assertion.rb +0 -13
  407. data/test/appearance/expected/montage_border_color.jpg +0 -0
  408. data/test/cmyk.icm +0 -0
  409. data/test/lib/internal/Draw.rb +0 -811
  410. data/test/lib/internal/Geometry.rb +0 -98
  411. data/test/lib/internal/Magick.rb +0 -40
  412. data/test/srgb.icm +0 -0
  413. data/test/test_all_basic.rb +0 -49
  414. data/test/tmpnam_test.rb +0 -50
@@ -14,6 +14,7 @@
14
14
 
15
15
 
16
16
 
17
+ static VALUE rm_yield_handle_exception(VALUE, VALUE) ATTRIBUTE_NORETURN;
17
18
 
18
19
  static VALUE
19
20
  rm_yield_body(VALUE object)
@@ -26,22 +27,19 @@ rm_yield_handle_exception(VALUE allocated_area, VALUE exc)
26
27
  {
27
28
  magick_free((void *)allocated_area);
28
29
  rb_exc_raise(exc);
29
- return Qnil; /* not reachable */
30
30
  }
31
31
 
32
32
  /**
33
33
  * If called with the optional block, iterates over the colors, otherwise
34
- * returns an array of Magick::Color objects.
34
+ * returns an array of {Magick::Color} objects.
35
35
  *
36
- * Ruby usage:
37
- * - @verbatim Magick::colors @endverbatim
38
- * - @verbatim Magick::colors { |colorinfo| } @endverbatim
36
+ * @overload colors
37
+ * @return [Array<Magick::Color>] the array of {Magick::Color}
39
38
  *
40
- * Notes:
41
- * - There are 3 implementations.
39
+ * @overload colors
40
+ * @yield [colorinfo]
41
+ * @yieldparam colorinfo [Magick::Color] the color
42
42
  *
43
- * @param class the class on which the method is run.
44
- * @return either the input class (if a block was given) or the array of colors.
45
43
  */
46
44
  VALUE
47
45
  Magick_colors(VALUE class)
@@ -54,8 +52,8 @@ Magick_colors(VALUE class)
54
52
  exception = AcquireExceptionInfo();
55
53
 
56
54
  color_info_list = GetColorInfoList("*", &number_colors, exception);
57
- CHECK_EXCEPTION()
58
- (void) DestroyExceptionInfo(exception);
55
+ CHECK_EXCEPTION();
56
+ DestroyExceptionInfo(exception);
59
57
 
60
58
 
61
59
  if (rb_block_given_p())
@@ -72,7 +70,7 @@ Magick_colors(VALUE class)
72
70
  ary = rb_ary_new2((long) number_colors);
73
71
  for (x = 0; x < number_colors; x++)
74
72
  {
75
- (void) rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
73
+ rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
76
74
  }
77
75
 
78
76
  magick_free((void *)color_info_list);
@@ -84,14 +82,15 @@ Magick_colors(VALUE class)
84
82
 
85
83
  /**
86
84
  * If called with the optional block, iterates over the fonts, otherwise returns
87
- * an array of Magick::Font objects.
85
+ * an array of {Magick::Font} objects.
88
86
  *
89
- * Ruby usage:
90
- * - @verbatim Magick::fonts @endverbatim
91
- * - @verbatim Magick::fonts { |fontinfo| } @endverbatim
87
+ * @overload fonts
88
+ * @return [Array<Magick::Font>] the array of {Magick::Font}
89
+ *
90
+ * @overload fonts
91
+ * @yield [fontinfo]
92
+ * @yieldparam fontinfo [Magick::Font] the font
92
93
  *
93
- * @param class the class on which the method is run.
94
- * @return either the input class (if a block was given) or the array of fonts.
95
94
  */
96
95
  VALUE
97
96
  Magick_fonts(VALUE class)
@@ -103,8 +102,8 @@ Magick_fonts(VALUE class)
103
102
 
104
103
  exception = AcquireExceptionInfo();
105
104
  type_info = GetTypeInfoList("*", &number_types, exception);
106
- CHECK_EXCEPTION()
107
- (void) DestroyExceptionInfo(exception);
105
+ CHECK_EXCEPTION();
106
+ DestroyExceptionInfo(exception);
108
107
 
109
108
  if (rb_block_given_p())
110
109
  {
@@ -120,7 +119,7 @@ Magick_fonts(VALUE class)
120
119
  ary = rb_ary_new2((long)number_types);
121
120
  for (x = 0; x < number_types; x++)
122
121
  {
123
- (void) rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
122
+ rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
124
123
  }
125
124
  magick_free((void *)type_info);
126
125
  RB_GC_GUARD(ary);
@@ -138,7 +137,7 @@ Magick_fonts(VALUE class)
138
137
  * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
139
138
  * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
140
139
  * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
141
- *
140
+ *
142
141
  * No Ruby usage (internal function)
143
142
  *
144
143
  * @param magick_info a MagickInfo object.
@@ -162,21 +161,13 @@ MagickInfo_to_format(const MagickInfo *magick_info)
162
161
  * Build the @@formats hash. The hash keys are image formats. The hash values
163
162
  * specify the format "mode string", i.e. a description of what ImageMagick can
164
163
  * do with that format. The mode string is in the form "BRWA", where
165
- * - "B" is "*" if the format has native blob support, or " " otherwise.
166
- * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
167
- * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
168
- * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
169
- *
170
- * Ruby usage:
171
- * - @verbatim Magick.init_formats @endverbatim
172
164
  *
173
- * Notes:
174
- * - Only called once.
175
- * - There are 3 implementations.
165
+ * - "B" is "*" if the format has native blob support, or " " otherwise.
166
+ * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
167
+ * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
168
+ * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
176
169
  *
177
- * @param class the class on which the method is run.
178
- * @return the formats hash.
179
- * @see MagickInfo_to_format
170
+ * @return [Hash] the formats hash.
180
171
  */
181
172
  VALUE
182
173
  Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
@@ -191,15 +182,15 @@ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
191
182
  // IM 6.1.3 added an exception argument to GetMagickInfoList
192
183
  exception = AcquireExceptionInfo();
193
184
  magick_info = GetMagickInfoList("*", &number_formats, exception);
194
- CHECK_EXCEPTION()
195
- (void) DestroyExceptionInfo(exception);
185
+ CHECK_EXCEPTION();
186
+ DestroyExceptionInfo(exception);
196
187
 
197
188
 
198
189
  for (x = 0; x < number_formats; x++)
199
190
  {
200
- (void) rb_hash_aset(formats
201
- , rb_str_new2(magick_info[x]->name)
202
- , MagickInfo_to_format((const MagickInfo *)magick_info[x]));
191
+ rb_hash_aset(formats,
192
+ rb_str_new2(magick_info[x]->name),
193
+ MagickInfo_to_format((const MagickInfo *)magick_info[x]));
203
194
  }
204
195
  magick_free((void *)magick_info);
205
196
  RB_GC_GUARD(formats);
@@ -211,14 +202,16 @@ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
211
202
  * Get/set resource limits. If a limit is specified the old limit is set to the
212
203
  * new value. Either way the current/old limit is returned.
213
204
  *
214
- * Ruby usage:
215
- * - @verbatim Magick.limit_resource(resource) @endverbatim
216
- * - @verbatim Magick.limit_resource(resource, limit) @endverbatim
205
+ * @overload limit_resource(resource)
206
+ * Get resource limits.
207
+ * @param resource [String, Symbol] the type of resource
217
208
  *
218
- * @param argc number of input arguments.
219
- * @param argv array of input arguments.
220
- * @param class the class on which the method is run.
221
- * @return the current/old limit.
209
+ * @overload limit_resource(resource, limit)
210
+ * Set resource limits.
211
+ * @param resource [String, Symbol] the type of resource
212
+ * @param limit [Numeric] the new limit number
213
+ *
214
+ * @return [Numeric] the old limit.
222
215
  */
223
216
  VALUE
224
217
  Magick_limit_resource(int argc, VALUE *argv, VALUE class)
@@ -269,7 +262,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
269
262
  break;
270
263
 
271
264
  default:
272
- str = StringValuePtr(resource);
265
+ str = StringValueCStr(resource);
273
266
  if (*str == '\0')
274
267
  {
275
268
  return class;
@@ -311,7 +304,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
311
304
 
312
305
  if (argc > 1)
313
306
  {
314
- (void) SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
307
+ SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
315
308
  }
316
309
 
317
310
  RB_GC_GUARD(limit);
@@ -325,22 +318,14 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
325
318
  * threshold is exceeded, all subsequent pixels cache operations are to/from
326
319
  * disk.
327
320
  *
328
- * Ruby usage:
329
- * - @verbatim Magick.set_cache_threshold(megabytes) @endverbatim
330
- *
331
- * Notes:
332
- * - singleton method
333
- *
334
- * @param class the class on which the method is run.
335
- * @param threshold the number of megabytes to set.
336
- * @return the class.
321
+ * @param threshold [Numeric] the number of megabytes to set.
337
322
  */
338
323
  VALUE
339
324
  Magick_set_cache_threshold(VALUE class, VALUE threshold)
340
325
  {
341
326
  unsigned long thrshld = NUM2ULONG(threshold);
342
- (void) SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
343
- (void) SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
327
+ SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
328
+ SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
344
329
  return class;
345
330
  }
346
331
 
@@ -348,32 +333,25 @@ Magick_set_cache_threshold(VALUE class, VALUE threshold)
348
333
  /**
349
334
  * Set the log event mask.
350
335
  *
351
- * Ruby usage:
352
- * - @verbatim Magick.set_log_event_mask(event) @endverbatim
353
- * - @verbatim Magick.set_log_event_mask(event,...) @endverbatim
336
+ * The arguments are one of:
354
337
  *
355
- * Notes:
356
- * - "event" is one of
357
- * - "all"
358
- * - "annotate"
359
- * - "blob"
360
- * - "cache"
361
- * - "coder"
362
- * - "configure"
363
- * - "deprecate"
364
- * - "locale"
365
- * - "none"
366
- * - "render"
367
- * - "transform"
368
- * - "user"
369
- * - "x11"
370
- * - Multiple events can be specified.
371
- * - Event names may be capitalized.
338
+ * - "all"
339
+ * - "annotate"
340
+ * - "blob"
341
+ * - "cache"
342
+ * - "coder"
343
+ * - "configure"
344
+ * - "deprecate"
345
+ * - "locale"
346
+ * - "none"
347
+ * - "render"
348
+ * - "transform"
349
+ * - "user"
350
+ * - "x11"
372
351
  *
373
- * @param argc number of input arguments.
374
- * @param argv array of input arguments.
375
- * @param class the class on which the method is run.
376
- * @return the class.
352
+ * Multiple events can be specified as the aruments. Event names may be capitalized.
353
+ *
354
+ * @param args [String] the mask of log event.
377
355
  */
378
356
  VALUE
379
357
  Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
@@ -386,38 +364,33 @@ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
386
364
  }
387
365
  for (x = 0; x < argc; x++)
388
366
  {
389
- (void) SetLogEventMask(StringValuePtr(argv[x]));
367
+ SetLogEventMask(StringValueCStr(argv[x]));
390
368
  }
391
369
  return class;
392
370
  }
393
371
 
394
372
  /**
395
373
  * Set the format for log messages.
396
- *
397
- * Ruby usage:
398
- * - @verbatim Magick.set_log_format(format) @endverbatim
399
374
  *
400
- * Notes:
401
- * - Format is a string containing one or more of:
402
- * - %t - current time
403
- * - %r - elapsed time
404
- * - %u - user time
405
- * - %p - pid
406
- * - %m - module (source file name)
407
- * - %f - function name
408
- * - %l - line number
409
- * - %d - event domain (one of the events listed above)
410
- * - %e - event name
411
- * - Plus other characters, including \\n, etc.
375
+ * Format is a string containing one or more of:
376
+ *
377
+ * - %t - current time
378
+ * - %r - elapsed time
379
+ * - %u - user time
380
+ * - %p - pid
381
+ * - %m - module (source file name)
382
+ * - %f - function name
383
+ * - %l - line number
384
+ * - %d - event domain (one of the events listed above)
385
+ * - %e - event name
386
+ * - Plus other characters, including \\n, etc.
412
387
  *
413
- * @param class the class on which the method is run.
414
- * @param format the format to set.
415
- * @return the class.
388
+ * @param format [String] the format to set.
416
389
  */
417
390
  VALUE
418
391
  Magick_set_log_format(VALUE class, VALUE format)
419
392
  {
420
- SetLogFormat(StringValuePtr(format));
393
+ SetLogFormat(StringValueCStr(format));
421
394
  return class;
422
395
  }
423
396
 
@@ -25,6 +25,33 @@
25
25
  #include "ruby.h"
26
26
  #include "ruby/io.h"
27
27
 
28
+ #if defined(__MINGW32__)
29
+ // Ruby defines wrong format specifiers for MinGW. So this defines original macro in here.
30
+ #if SIZEOF_SIZE_T == SIZEOF_LONG
31
+ #define RMIuSIZE "lu"
32
+ #define RMIdSIZE "ld"
33
+ #define RMIsVALUE "li\v"
34
+ #elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
35
+ #define RMIuSIZE "I64u"
36
+ #define RMIdSIZE "I64d"
37
+ #define RMIsVALUE "I64i\v"
38
+ #endif
39
+ #else
40
+ // Use constants defined in Ruby
41
+ #define RMIuSIZE PRIuSIZE
42
+ #define RMIdSIZE PRIdSIZE
43
+ #define RMIsVALUE PRIsVALUE
44
+ #endif
45
+
46
+ #if defined(__GNUC__)
47
+ #pragma GCC diagnostic push
48
+ #pragma GCC diagnostic ignored "-Wdeclaration-after-statement"
49
+ #pragma GCC diagnostic ignored "-Wunknown-pragmas"
50
+
51
+ #if __GNUC__ > 6
52
+ #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
53
+ #endif
54
+ #endif
28
55
 
29
56
  // Undef Ruby's versions of these symbols
30
57
  #undef PACKAGE_VERSION
@@ -54,9 +81,11 @@
54
81
  #define Q(q) Q2(q)
55
82
 
56
83
  #ifdef __GNUC__
57
- #define ATTRIBUTE_UNUSED __attribute__((unused))
84
+ #define ATTRIBUTE_UNUSED __attribute__((unused))
85
+ #define ATTRIBUTE_NORETURN __attribute__((__noreturn__))
58
86
  #else
59
87
  #define ATTRIBUTE_UNUSED
88
+ #define ATTRIBUTE_NORETURN
60
89
  #endif
61
90
 
62
91
  //! Trace new image creation in bang methods
@@ -90,11 +119,11 @@
90
119
  #define PIXEL_INTENSITY(q) ((Quantum)(0.299*(q)->red + 0.587*(q)->green + 0.114*(q)->blue + 0.5))
91
120
 
92
121
  //! find maximum of longs
93
- #define LMAX(a,b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
122
+ #define LMAX(a, b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
94
123
  //! find maximum of floats
95
- #define FMAX(a,b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
124
+ #define FMAX(a, b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
96
125
  //! find minimum of floats
97
- #define FMIN(a,b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
126
+ #define FMIN(a, b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
98
127
 
99
128
  #define RMAGICK_PI 3.14159265358979 /**< pi */
100
129
 
@@ -111,7 +140,10 @@
111
140
  */
112
141
  #define OBJ_TO_MAGICK_STRING(f, obj) \
113
142
  if ((obj) != Qnil)\
114
- magick_clone_string(&f, RSTRING_PTR(obj));\
143
+ {\
144
+ VALUE str = rb_String(obj);\
145
+ magick_clone_string(&f, StringValueCStr(str));\
146
+ }\
115
147
  else\
116
148
  f = NULL;
117
149
 
@@ -134,7 +166,16 @@ typedef ImageInfo Info; /**< Make type name match class name */
134
166
  typedef PixelInfo MagickPixel;
135
167
  typedef PixelInfo PixelColor;
136
168
  #else
137
- typedef PixelPacket Pixel;
169
+ typedef struct _RMagickPixelPacket
170
+ {
171
+ Quantum
172
+ red,
173
+ green,
174
+ blue,
175
+ opacity,
176
+ black;
177
+ } RMagickPixelPacket;
178
+ typedef RMagickPixelPacket Pixel;
138
179
  typedef MagickPixelPacket MagickPixel;
139
180
  typedef PixelPacket PixelColor;
140
181
  typedef AlphaChannelType AlphaChannelOption;
@@ -361,61 +402,36 @@ EXTERN ID rm_ID_changed; /**< "changed" */
361
402
  EXTERN ID rm_ID_cur_image; /**< "cur_image" */
362
403
  EXTERN ID rm_ID_dup; /**< "dup" */
363
404
  EXTERN ID rm_ID_fill; /**< "fill" */
364
- EXTERN ID rm_ID_flag; /**< "flag" */
365
- EXTERN ID rm_ID_from_s; /**< "from_s" */
366
405
  EXTERN ID rm_ID_Geometry; /**< "Geometry" */
367
- EXTERN ID rm_ID_GeometryValue; /**< "GeometryValue" */
368
- EXTERN ID rm_ID_has_key_q; /**< "has_key?" */
369
406
  EXTERN ID rm_ID_height; /**< "height" */
370
407
  EXTERN ID rm_ID_initialize_copy; /**< "initialize_copy" */
371
- EXTERN ID rm_ID_length; /**< "length" */
372
408
  EXTERN ID rm_ID_notify_observers; /**< "notify_observers" */
373
409
  EXTERN ID rm_ID_new; /**< "new" */
374
410
  EXTERN ID rm_ID_push; /**< "push" */
375
- EXTERN ID rm_ID_spaceship; /**< "<=>" */
376
- EXTERN ID rm_ID_to_i; /**< "to_i" */
377
- EXTERN ID rm_ID_to_s; /**< "to_s" */
378
411
  EXTERN ID rm_ID_values; /**< "values" */
379
412
  EXTERN ID rm_ID_width; /**< "width" */
380
- EXTERN ID rm_ID_x; /**< "x" */
381
- EXTERN ID rm_ID_y; /**< "y" */
413
+
414
+ EXTERN unsigned long long rm_main_thread_id;
382
415
 
383
416
  #if !defined(min)
384
- #define min(a,b) ((a)<(b)?(a):(b)) /**< min of two values */
417
+ #define min(a, b) ((a)<(b)?(a):(b)) /**< min of two values */
385
418
  #endif
386
419
  #if !defined(max)
387
- #define max(a,b) ((a)>(b)?(a):(b)) /**< max of two values */
420
+ #define max(a, b) ((a)>(b)?(a):(b)) /**< max of two values */
388
421
  #endif
389
422
 
390
423
  /**
391
424
  Handle warnings & errors
392
425
  */
393
426
  //! Handle warnings & errors
394
- #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError);
427
+ #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError)
395
428
 
396
429
 
397
- /*
398
- Call rb_define_method for an attribute accessor method
399
- */
400
- //! attribute reader
401
- #define DCL_ATTR_READER(class, attr) \
402
- rb_define_method(Class_##class, #attr, class##_##attr, 0);
403
- //! attribute writer
404
- #define DCL_ATTR_WRITER(class, attr) \
405
- rb_define_method(Class_##class, #attr "=", class##_##attr##_eq, 1);
406
- //! attribute accessor
407
- #define DCL_ATTR_ACCESSOR(class, attr) \
408
- DCL_ATTR_READER(class, attr) \
409
- DCL_ATTR_WRITER(class, attr)
410
- //! Borrow another class' attribute writer definition
411
- #define SHARE_ATTR_WRITER(to, from, attr) \
412
- rb_define_method(Class_##to, #attr "=", from##_##attr##_eq, 1);
413
-
414
430
  /*
415
431
  Define simple attribute accessor methods (boolean, int, string, and double types)
416
432
  */
417
- #define C_bool_to_R_bool(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
418
- #define R_bool_to_C_bool(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
433
+ #define C_boolean_to_R_boolean(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
434
+ #define R_boolean_to_C_boolean(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
419
435
  #define C_int_to_R_int(attr) INT2FIX(attr) /**< C int -> Ruby int */
420
436
  #define R_int_to_C_int(attr) NUM2INT(attr) /**< C int <- Ruby int */
421
437
  #define C_long_to_R_long(attr) INT2NUM(attr) /**< C long -> Ruby long */
@@ -427,34 +443,31 @@ EXTERN ID rm_ID_y; /**< "y" */
427
443
  #define R_dbl_to_C_dbl(attr) NUM2DBL(attr) /**< C double <- Ruby double */
428
444
 
429
445
  //! define attribute reader
430
- #define DEF_ATTR_READER(class, attr, type) \
431
- VALUE class##_##attr(VALUE self)\
446
+ #define IMPLEMENT_ATTR_READER(class, attr, type) \
432
447
  {\
433
448
  class *ptr;\
434
449
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
435
- (void) rm_check_destroyed(self); \
450
+ rm_check_destroyed(self); \
436
451
  }\
437
452
  Data_Get_Struct(self, class, ptr);\
438
453
  return C_##type##_to_R_##type(ptr->attr);\
439
454
  }
440
455
 
441
456
  //! define attribute reader when attribute name is different from the field name
442
- #define DEF_ATTR_READERF(class, attr, field, type) \
443
- VALUE class##_##attr(VALUE self)\
457
+ #define IMPLEMENT_ATTR_READERF(class, attr, field, type) \
444
458
  {\
445
459
  class *ptr;\
446
- (void) rm_check_destroyed(self); \
460
+ rm_check_destroyed(self); \
447
461
  Data_Get_Struct(self, class, ptr);\
448
462
  return C_##type##_to_R_##type(ptr->field);\
449
463
  }
450
464
 
451
465
  //! define attribute writer
452
- #define DEF_ATTR_WRITER(class, attr, type) \
453
- VALUE class##_##attr##_eq(VALUE self, VALUE val)\
466
+ #define IMPLEMENT_ATTR_WRITER(class, attr, type) \
454
467
  {\
455
468
  class *ptr;\
456
469
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
457
- (void) rm_check_destroyed(self); \
470
+ rm_check_destroyed(self); \
458
471
  }\
459
472
  rb_check_frozen(self);\
460
473
  Data_Get_Struct(self, class, ptr);\
@@ -463,12 +476,11 @@ EXTERN ID rm_ID_y; /**< "y" */
463
476
  }
464
477
 
465
478
  //! define attribute writer when attribute name is different from the field name
466
- #define DEF_ATTR_WRITERF(class, attr, field, type) \
467
- VALUE class##_##attr##_eq(VALUE self, VALUE val)\
479
+ #define IMPLEMENT_ATTR_WRITERF(class, attr, field, type) \
468
480
  {\
469
481
  class *ptr;\
470
482
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
471
- (void) rm_check_destroyed(self); \
483
+ rm_check_destroyed(self); \
472
484
  }\
473
485
  rb_check_frozen(self);\
474
486
  Data_Get_Struct(self, class, ptr);\
@@ -476,15 +488,6 @@ EXTERN ID rm_ID_y; /**< "y" */
476
488
  return self;\
477
489
  }
478
490
 
479
- //! define attribute accessor
480
- #define DEF_ATTR_ACCESSOR(class, attr, type)\
481
- DEF_ATTR_READER(class, attr, type)\
482
- DEF_ATTR_WRITER(class, attr, type)
483
-
484
- //! define attribute accessor when attribute name is different from the field name
485
- #define DEF_ATTR_ACCESSORF(class, attr, field, type)\
486
- DEF_ATTR_READERF(class, attr, field, type)\
487
- DEF_ATTR_WRITERF(class, attr, field, type)
488
491
 
489
492
  /*
490
493
  * Declare attribute accessors
@@ -516,8 +519,8 @@ EXTERN ID rm_ID_y; /**< "y" */
516
519
  do {\
517
520
  MagickEnum *magick_enum;\
518
521
  if (CLASS_OF(value) != Class_##type)\
519
- rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s"\
520
- , rb_class2name(Class_##type),rb_class2name(CLASS_OF(value)));\
522
+ rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s", \
523
+ rb_class2name(Class_##type), rb_class2name(CLASS_OF(value)));\
521
524
  Data_Get_Struct(value, MagickEnum, magick_enum);\
522
525
  e = (type)(magick_enum->val);\
523
526
  } while(0)
@@ -779,7 +782,7 @@ ATTR_ACCESSOR(Image, x_resolution)
779
782
  ATTR_ACCESSOR(Image, y_resolution)
780
783
 
781
784
  extern ChannelType extract_channels(int *, VALUE *);
782
- extern void raise_ChannelType_error(VALUE);
785
+ extern void raise_ChannelType_error(VALUE) ATTRIBUTE_NORETURN;
783
786
  extern void add_format_prefix(Info *, VALUE);
784
787
 
785
788
  extern VALUE Image_alloc(VALUE);
@@ -821,7 +824,11 @@ extern VALUE Image_compare_channel(int, VALUE *, VALUE);
821
824
  extern VALUE Image_channel_depth(int, VALUE *, VALUE);
822
825
  extern VALUE Image_channel_extrema(int, VALUE *, VALUE);
823
826
  extern VALUE Image_channel_mean(int, VALUE *, VALUE);
827
+ #if defined(HAVE_GETIMAGECHANNELENTROPY) || defined(IMAGEMAGICK_7)
824
828
  extern VALUE Image_channel_entropy(int, VALUE *, VALUE);
829
+ #else
830
+ extern VALUE Image_channel_entropy(int, VALUE *, VALUE) ATTRIBUTE_NORETURN;
831
+ #endif
825
832
  extern VALUE Image_charcoal(int, VALUE *, VALUE);
826
833
  extern VALUE Image_chop(VALUE, VALUE, VALUE, VALUE, VALUE);
827
834
  extern VALUE Image_clone(VALUE);
@@ -1098,6 +1105,7 @@ extern VALUE ChromaticityInfo_to_s(VALUE);
1098
1105
  extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
1099
1106
  extern void Color_to_PixelColor(PixelColor *, VALUE);
1100
1107
  extern void Color_to_MagickPixel(Image *, MagickPixel *, VALUE);
1108
+ extern void Color_to_Pixel(Pixel *, VALUE);
1101
1109
  extern VALUE Color_to_s(VALUE);
1102
1110
  extern VALUE Import_ColorInfo(const ColorInfo *);
1103
1111
  extern VALUE Font_to_s(VALUE);
@@ -1132,7 +1140,6 @@ extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
1132
1140
  extern void *magick_malloc(const size_t);
1133
1141
  extern void *magick_safe_malloc(const size_t, const size_t);
1134
1142
  extern void magick_free(void *);
1135
- extern void *magick_realloc(void *, const size_t);
1136
1143
  extern void *magick_safe_realloc(void *, const size_t, const size_t);
1137
1144
  extern void magick_clone_string(char **, const char *);
1138
1145
  extern Image *rm_acquire_image(ImageInfo *);
@@ -1141,26 +1148,25 @@ extern VALUE rm_pixelcolor_to_color_name(Image *, PixelColor *);
1141
1148
  extern VALUE rm_pixelcolor_to_color_name_info(Info *, PixelColor *);
1142
1149
  extern void rm_init_magickpixel(const Image *, MagickPixel *);
1143
1150
  extern void rm_set_magickpixel(MagickPixel *, const char *);
1144
- extern VALUE rm_no_freeze(VALUE);
1151
+ extern VALUE rm_no_freeze(VALUE) ATTRIBUTE_NORETURN;
1145
1152
  extern int rm_strcasecmp(const char *, const char *);
1146
1153
  extern int rm_strncasecmp(const char *, const char *, size_t);
1154
+ extern size_t rm_strnlen_s(const char *, size_t);
1147
1155
  extern void rm_check_ary_len(VALUE, long);
1148
1156
  extern VALUE rm_check_ary_type(VALUE ary);
1149
1157
  extern Image *rm_check_destroyed(VALUE);
1150
1158
  extern Image *rm_check_frozen(VALUE);
1151
- extern VALUE rm_to_s(VALUE);
1152
1159
  extern char *rm_str2cstr(VALUE, long *);
1153
1160
  extern int rm_check_num2dbl(VALUE);
1154
1161
  extern double rm_fuzz_to_dbl(VALUE);
1155
1162
  extern Quantum rm_app2quantum(VALUE);
1156
- extern double rm_percentage(VALUE,double);
1163
+ extern double rm_percentage(VALUE, double);
1157
1164
  extern double rm_str_to_pct(VALUE);
1158
1165
  extern VALUE rm_define_enum_type(const char *);
1159
- extern void rm_write_temp_image(Image *, char *);
1166
+ extern void rm_write_temp_image(Image *, char *, size_t);
1160
1167
  extern void rm_delete_temp_image(char *);
1161
- extern void rm_not_implemented(void);
1168
+ extern void rm_not_implemented(void) ATTRIBUTE_NORETURN;
1162
1169
  extern void rm_attr_write(VALUE, VALUE);
1163
- extern void rm_get_geometry(VALUE, long *, long *, unsigned long *, unsigned long *, int *);
1164
1170
  extern const char *rm_get_property(const Image *, const char *);
1165
1171
  extern MagickBooleanType rm_set_property(Image *, const char *, const char *);
1166
1172
  extern void rm_set_user_artifact(Image *, Info *);
@@ -1188,11 +1194,12 @@ extern MagickBooleanType rm_progress_monitor(const char *, const MagickOffsetTyp
1188
1194
  extern VALUE rm_exif_by_entry(Image *);
1189
1195
  extern VALUE rm_exif_by_number(Image *);
1190
1196
  extern void rm_get_optional_arguments(VALUE);
1191
- extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *);
1197
+ extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *) ATTRIBUTE_NORETURN;
1192
1198
  extern void rm_error_handler(const ExceptionType, const char *, const char *);
1193
1199
  extern void rm_warning_handler(const ExceptionType, const char *, const char *);
1194
1200
  extern MagickBooleanType rm_should_raise_exception(ExceptionInfo *, const ExceptionRetention);
1195
1201
  extern void rm_raise_exception(ExceptionInfo *);
1202
+ extern unsigned long long rm_current_thread_id();
1196
1203
  #if defined(IMAGEMAGICK_6)
1197
1204
  extern void rm_check_image_exception(Image *, ErrorRetention);
1198
1205
  #endif