ruby-magic 0.4.0 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +38 -0
- data/CONTRIBUTORS.md +1 -2
- data/dependencies.yml +6 -77
- data/ext/magic/common.h +11 -7
- data/ext/magic/extconf.rb +21 -2
- data/ext/magic/functions.c +32 -14
- data/ext/magic/functions.h +18 -12
- data/ext/magic/ruby-magic.c +536 -315
- data/ext/magic/ruby-magic.h +96 -135
- data/lib/magic/version.rb +1 -1
- data/lib/magic.rb +19 -1
- data.tar.gz.sig +3 -0
- metadata +33 -8
- metadata.gz.sig +1 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62a636b8ebb83354f9cd8ae8f25a97c9b451765687f5c4289bd44e6f1b729035
|
4
|
+
data.tar.gz: 79509714217a030267ae86277fbff57eceb8466a51b89514a6ba7b996d18f94b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ba1b598ffbe702fa9467598fd44d9e9ae66beef318120092a597fe8ad08bec10a912c0f0b40609f3b08c8ec266f414048db0befa6c348eda1eab2c17af5bb41
|
7
|
+
data.tar.gz: bea167c85a64f0463e46987a690ee4aa0d00424eaa41f815898f57652d61c52455867b3df39d5ea5d35e529bc3a8176f8ed10021c9112f856d3b556ed4191767
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [0.5.3] - 2021-12-22
|
11
|
+
|
12
|
+
### Fixed
|
13
|
+
|
14
|
+
- ext: load C extension files from non-native gems via "require"
|
15
|
+
|
16
|
+
## [0.5.2] - 2021-11-20
|
17
|
+
|
18
|
+
- No changes
|
19
|
+
|
20
|
+
## [0.5.1] - 2021-11-20
|
21
|
+
|
22
|
+
### Fixed
|
23
|
+
|
24
|
+
- Check for pkg-config when building static libraries.
|
25
|
+
|
26
|
+
## [0.5.0] - 2021-09-30
|
27
|
+
|
28
|
+
### Added
|
29
|
+
|
30
|
+
- Introduce support for building native gems.
|
31
|
+
|
32
|
+
### Changed
|
33
|
+
|
34
|
+
- Relax mini_portile2 dependency.
|
35
|
+
- Use RB_ALLOC() over calling ruby_xmalloc() directly
|
36
|
+
- Address warnings reported by cppcheck.
|
37
|
+
- Address code style that checkpatch.pl script reported.
|
38
|
+
- Fix how flags are set for the open() function.
|
39
|
+
- Clean up type definitions.
|
40
|
+
- Add alias Magic::mime_type for Magic::mime.
|
41
|
+
- Make magic_set_flags() return void as its return value was never used.
|
42
|
+
|
43
|
+
### Fixed
|
44
|
+
|
45
|
+
- Fix truffleruby test failure
|
46
|
+
- Fix --use-system-libraries not working with Rake install
|
47
|
+
|
10
48
|
## [0.2.0] - 2015-03-25
|
11
49
|
### Added
|
12
50
|
|
data/CONTRIBUTORS.md
CHANGED
@@ -7,10 +7,9 @@ of Ruby Magic. They are hereby acknowledged and collectively identified as "The
|
|
7
7
|
Ruby Magic Authors". Copyright is held by the original contributor according to
|
8
8
|
the versioning history; see [LICENSE](LICENSE) file.
|
9
9
|
|
10
|
-
|
11
|
-
- Mike Dalessio ([@flavorjones](https://github.com/flavorjones))
|
12
10
|
- Igor Victor ([@gogainda](https://github.com/gogainda))
|
13
11
|
- John Hawthorn ([@jhawthorn](https://github.com/jhawthorn))
|
12
|
+
- Mike Dalessio ([@flavorjones](https://github.com/flavorjones))
|
14
13
|
- Shinya Maeda ([@dosuken123](https://github.com/dosuken123))
|
15
14
|
- Stan Hu ([@stanhu](https://github.com/stanhu))
|
16
15
|
|
data/dependencies.yml
CHANGED
@@ -14,80 +14,9 @@ libmagic:
|
|
14
14
|
#
|
15
15
|
# Using this PGP signature:
|
16
16
|
#
|
17
|
-
# -----BEGIN PGP
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# 4/tcKorXoD5QBgOWaYFzkOcQ5jrwA/9tn0MEkkVqez88xGhOjq6jooRWrP2lhNWb+Q7ayEvW
|
24
|
-
# 9Wm9CYS0dXxlCCJfqBOc+cZo8iVVbqiOzwAQ7uAAUv8azuaeRWpOD7MSjkXjYtkPwZevEd6x
|
25
|
-
# FKODaB2BDO4WMlxO9mp3Q/gPfrM41v9n33tYsAzQMW7c9W5mX/XH2Cv/57QyQ2hyaXN0b3Mg
|
26
|
-
# Wm91bGFzIChOZXRCU0Qga2V5KSA8Y2hyaXN0b3NAbmV0YnNkLm9yZz6IXgQQEQgABgUCWcg8
|
27
|
-
# UAAKCRCWb7A7gPrCzP43AP9pxzM85lwZxHRG8vPw16wWUYGcGW44g/u1zqavRUksvgD/fX1y
|
28
|
-
# 6+cj5kNEqp5bHgCvOJiSYADIUQaPTYbwMvnQ1IuIZAQTEQIAJAIbAwYLCQgHAwIDFQIDAxYC
|
29
|
-
# AQIeAQIXgAUCV7RsLgUJIkWeFwAKCRBxESqxbLM7Oi/LAKC1PdNLcoP06p6nsGh4ApH0gkSl
|
30
|
-
# fgCg7k7lwLPdN0djOMUPMFnqN+TYAoaIZAQTEQIAJAUCSDrTKgIbAwUJDwmcAAYLCQgHAwID
|
31
|
-
# FQIDAxYCAQIeAQIXgAAKCRBxESqxbLM7OqXeAJ9tkhVpTsdkix5oWzsBCbU4vHO2CACfbd8k
|
32
|
-
# PWR68VgvDK5RPQchyghfIZGJARwEEAECAAYFAlnOXIQACgkQWrHF/qWWAmTEhggAmTr9PxSU
|
33
|
-
# wQ8dAvno6I30mDY+r4V2FaD+WvhITDV/CYfU4ImDCfknDC1x4f44YAgN94YQfnTmAixWLLk9
|
34
|
-
# NhvgKWHg5Sq2p7S3hLe3hQHUu+4mHq2t+oBtiwnb+GPUAz3ko1hjQ2fN3nZdwKNA3P37NJuj
|
35
|
-
# EiXOR1UsxO8TaTuf/mB+9vdrUpHsgRaZwYIJ7oszkRkr2V82QsMwgcIdnCPEVY7q+foi2DUF
|
36
|
-
# UW3eujRLpW9M/NUXrA8f2wQZVaLNy+Zpai57uXW7bVRc82+uRDVwckhKq+YRpfRiD/JCWzKP
|
37
|
-
# AJJfabUkKiA6NUe51aQJm64BUKh7p8ZR4qjCr/Roofsh9okCHAQQAQIABgUCWduxXQAKCRBm
|
38
|
-
# Bw6ljCki37ulD/4iZ9hjimgichG5F5Ht2CfPx3Qm16QYjnuB2l7FZNPYlcThdNgjJjc4Wro3
|
39
|
-
# jrcfj6KMTGXnkRuY7794co6z/U/x9sVz9wQYr0ugrJsVQeHRWbJGl2vFhOOtgj9hfJQM44nz
|
40
|
-
# 3ZZR4VDh/KU4njBhPR1Mzxoop1WBnWcE9RpTIyMlaB6RK9I8JGOpvNYzQaODnsG7z144G/3W
|
41
|
-
# gIWZnjVVozv/szvtabd+L1N3hMPI2jNkmKWSGuZWdIIcPBEp2e9AYmb9mVhp8UanrMWVTUi0
|
42
|
-
# q7Cc0Jw4tkTwXYaEeRcbbB87p+IV0an7o+m9e2hrdZJan276tDOFe+HgcZ4NiEM8LTcOBIHn
|
43
|
-
# VWaRLwQD4AAB8zmMHiVTN3oUdQsYlZmHhBYv8Bkfzwi8JdxMq7V2zGntQnROl9Ust3qL8g28
|
44
|
-
# xI/dzt396qupywaF/2bUKyZx/079Y3eEluPQlU+iof+hJ2roetJNwMzs/hTDLQgI4T8ZhsMO
|
45
|
-
# MewZUVI59YrqjETR1U6+L9txmULgL16jBpLqvFBGhUOIDqjI5uxapEjCGy3inocjUeejy5iN
|
46
|
-
# PehQwt2TKC2Exsyd02kJrPErYVcMLYbO90d2ykBItoSXsDcuOTgfyxpvxTUih4tHVf5B69Ht
|
47
|
-
# HAPPYqSEfwlVazLnoe/z5KU2h415vcwuRuI1WU0ghdGFCMmH1rQ0Q2hyaXN0b3MgWm91bGFz
|
48
|
-
# IChwZXJzb25hbCBrZXkpIDxjaHJpc3Rvc0B6b3VsYXMuY29tPoheBBARCAAGBQJZyDxEAAoJ
|
49
|
-
# EJZvsDuA+sLMa3oA/Rub7s6Vp61CJ4kDTyfAJg0vL2Y6dqb0l1qZfg7kHWDTAQDK85IGzegN
|
50
|
-
# dAftzh5ZBgOOByQ8C8nprbxQWNTKXwWBH4hkBBMRAgAkAhsDBgsJCAcDAgMVAgMDFgIBAh4B
|
51
|
-
# AheABQJXtGwxBQkiRZ4XAAoJEHERKrFsszs6XGUAn2mngFtwV1va2adBDUrx4ZpXHQNBAJ9w
|
52
|
-
# EZ8bIqAmyTrAE8r0iOXe1bzWrIhkBBMRAgAkBQJIOtEPAhsDBQkPCZwABgsJCAcDAgMVAgMD
|
53
|
-
# FgIBAh4BAheAAAoJEHERKrFsszs63YcAnRjURIBsnyKeY+f6jO8pVYx499LHAJwP4h+X2i+r
|
54
|
-
# drCNiSYYVCYbkNjysokBHAQQAQIABgUCWc5chAAKCRBascX+pZYCZA6bCACAB7DFdL0DfXUU
|
55
|
-
# +BTcJQXvlD9fKBoGmonUACPX/wq7phmnvJL0Btl1KJlcLuiu94PgLPXH4nWwpGnWG2Ogigqf
|
56
|
-
# HxM4Jx6skqkBQI6npacTU1nSaIBW4hKZpo/6QvgjmO1wsSPemIvZ/8+ijfS5AHPh0gew3BFj
|
57
|
-
# ESPvwWxxode3zDKD5n6g1vU4Id9i0OqjUUkUnCBy8pz6b/n3VuyYXM+OnMgZw+tXfYUJkf3v
|
58
|
-
# 15gWhXlmpeLCPdmSZ8NRy80lrY45EHra2lPx3RgX88AF3cgwLrKfjLRc1yuSZ1mipT+pI1Fs
|
59
|
-
# uUe14XfXHiLM2ESp2HLDLmCY8lwYelmWPO76skwEiQIcBBABAgAGBQJZ27FdAAoJEGYHDqWM
|
60
|
-
# KSLft9UP/3ZxzMkr2m8/itBLOBJbMlvCb5gfZLHrQV/GF9OIDDSdu0+4cbbVqeXyg4tEQHHi
|
61
|
-
# 8Gr9WZI3CgqWbJN66NkKnaPqZ4RE7a98h9AvRxWsGhBI+I8r8LTlsQQrhjUyEinsr7oqNP9M
|
62
|
-
# SO7vicg6df5SuWmQxTrap8A1noX6O0djzJ9Ea721hCHDxGQ9nxCAPOIvS7lI06soNLuuTdp+
|
63
|
-
# E+r1d3+saHGU6YK8GsnqFSTdxb9WBUJU8BQpcI9kL3iIGA8Azw6L5CFra9InCCQIjzHIbL/r
|
64
|
-
# WLIJKxJicHJib009atUeLDCwmdaLHoqOkqOJIYrnbbEkPQunY6A68KkNx05N5p46eRwKxKA0
|
65
|
-
# TJQAMyzdkCYKaiQe+pETwsyO89P9RK84P5wCG4jqSe29JW7VeuBOQDJ3khBN3whDu9s5gVlh
|
66
|
-
# UGjIeLo85g7IIKTtv5fbopAUCjbVwccqws54PmiSqTy5OlOCbbYGDtoermnXME+sFcNRT8MI
|
67
|
-
# ktWShC6GrF1BhVrS4ex9e6jsQxKQRMlab2bBeJ6rUXT/i8cnpJERViPspDvVgL7Oer+K2gep
|
68
|
-
# uNa2DeCaNardaAYo2IYu985pqRZYJVTCydmX+Wlhfp12tzToW1/9QsLTvKUhuI0WB/cC839t
|
69
|
-
# lJRXapfKjwjj91VEX7Y26vHWli5noHMSNIRlIjT5RqouuQQNBEg60jMQEADIcUV/L4XmXXqj
|
70
|
-
# GvglW2ZAPn/FIm+N4GM/vTjxUXAc2ciiIsTDuO+1+e4sB9eN05rcvtTyt28W6N6hL8HfQIFq
|
71
|
-
# 5WEsd86vd+cSiBlisq1BglNgFiAfRy/guoLHiYnBlSdS6/Gab86zR4m6Bg1JZOcV0c9Irffv
|
72
|
-
# 5XLlT/LX45V46ju3PQSJYGboKdEaX4jUWcSQgUQ4+HyyP2DsWPyfrJj4sFA0T78b1ywsyKK2
|
73
|
-
# OOv7KUQk/Hwq2C68aG6YlvvVKywucoSX2uk0ZnWjCCwgOtXxyHIysqAxcz9IPRbtJ3PjjScM
|
74
|
-
# kv9NMrb5SDswwZy1vfL8s1sa8w7uZgXlpOaFb/yYMuzvwKRwJNxptVW0TTcZ8ADemRiHgDzJ
|
75
|
-
# 0MbXYcmSH8CXla746Bg7oXaCMPvfivOnIsj/6d3YZPT1enwBprgL3VqlWPA4fjWyMh6+BoHu
|
76
|
-
# ak7Q4k2h2sSXo29tR6KXYbc+K+qUB+QrjGDkOL6JqN5nBLiu3H95B7ZEm8wDoYitDpt7ot9S
|
77
|
-
# 5ja+dcNyUu+XXUGXvc8SvzEmsDKMqxZSxvCyIfPhaFxVylLK02fhfXqpBImvZ6UmHOzylNlk
|
78
|
-
# TqJzDG4LOOiC/knv7ypgr7VH8TJ2PD9p2IR79hKjnVGmYvTtZ132qda+erbNb/9wwAzOeG49
|
79
|
-
# fgdiDSsUmvl15kEI+gBtZwADBQ/+PuZa9CEKryZpQ6hczzAN8oksk7MQaTBYdAd62zfaNa/Q
|
80
|
-
# QID3P5I8FsdXMCcKRipP95cZY8ZQKjBGt7O26Ts955Q71QS58rCXxeLP9/mbpm3kCwXrAkZH
|
81
|
-
# s2rH2awLOg6p8at2NJCn56AkldK1PyVtL0Qvl7nEOe+lcULqfLNEbGEgzev+ZK0v6So6lA2t
|
82
|
-
# i8derF5XkIMzCFdjcC1reZvfwNnxd/pQzuMfZOfPjPD6OKaBEWnWNZscU/ucNkgQpv+M2hCA
|
83
|
-
# paC3NaNiXl0TWsDp7981WSWnf6YZRTjLKyObdGmpo7Z+C9uVu2DbRlUiRAD3azBo4t03EZVB
|
84
|
-
# XMo/1opuqxyU6FLVW0mxLI2wh2M1Jt/RAvXLm5/Z9zGnPqwAObxkA518e71QXyM+GQ+M8Kyp
|
85
|
-
# PHr00oC+32PrKnFADI3s1oK5zMX0tjXb0voAgXTWNFsmi+efj7A3wt6G15ai70pOSTuFl9kb
|
86
|
-
# BqmCI4NmD5wV+uIR/jcmTf7jZKX5QPjDSJddJ5EeAsPXtur0wFZ9JwPM2FyNaeL92BjRYQPW
|
87
|
-
# C9vRtAUjJa2PSLofMDaEs+VD76WRI3E8kPIJiFeSqOLinclo1e41q3nyj5JBnwg50CwshW7g
|
88
|
-
# w/bU+IbzL0eZFjJ7ftJ+Xi/vlGtfbxjuKuhyD2PM3DNf9uXmcIV4ldEJzwhw2KmITwQYEQIA
|
89
|
-
# DwIbDAUCV7RsRgUJIkWdEAAKCRBxESqxbLM7OiJUAJ4y0+A//pOrp3rjo28Uyt34U+qRqwCe
|
90
|
-
# NqiZtKbSqpUgcLmKNgot+mSEAmmITwQYEQIADwUCSDrSMwIbDAUJDwmcAAAKCRBxESqxbLM7
|
91
|
-
# OnaqAJ0cUAs8+EPXqRYYbdu6ROINhExMkwCgpupi6uEG+b4yo6M+VlcQY7gl2DE=
|
92
|
-
# =XrDo
|
93
|
-
# -----END PGP PUBLIC KEY BLOCK-----
|
17
|
+
# -----BEGIN PGP SIGNATURE-----
|
18
|
+
#
|
19
|
+
# iEYEABECAAYFAl7mu3AACgkQcREqsWyzOzppXACgoqokKabq7bwN9aKvd/H/yhF+
|
20
|
+
# 9PUAoOPrAtxFkfNUvtqK/trY+v/Gk5JM
|
21
|
+
# =tA6a
|
22
|
+
# -----END PGP SIGNATURE-----
|
data/ext/magic/common.h
CHANGED
@@ -87,11 +87,13 @@ extern "C" {
|
|
87
87
|
#define ARRAY_P(x) (RB_TYPE_P((x), T_ARRAY))
|
88
88
|
#define FILE_P(x) (RB_TYPE_P((x), T_FILE))
|
89
89
|
|
90
|
-
#define RVAL2CBOOL(
|
91
|
-
#define CBOOL2RVAL(
|
90
|
+
#define RVAL2CBOOL(b) (RTEST(b))
|
91
|
+
#define CBOOL2RVAL(b) ((b) ? Qtrue : Qfalse)
|
92
92
|
|
93
|
-
#define RVAL2CSTR(
|
94
|
-
#define CSTR2RVAL(
|
93
|
+
#define RVAL2CSTR(s) (NIL_P(s) ? NULL : StringValueCStr(s))
|
94
|
+
#define CSTR2RVAL(s) ((s) == NULL ? Qnil : rb_str_new2((const char *)s))
|
95
|
+
|
96
|
+
#define RSTRING_EMPTY_P(s) (RSTRING_LEN(s) == 0)
|
95
97
|
|
96
98
|
#define RARRAY_EMPTY rb_ary_new()
|
97
99
|
#define RARRAY_EMPTY_P(a) (RARRAY_LEN(a) == 0)
|
@@ -126,7 +128,7 @@ extern "C" {
|
|
126
128
|
# define FPTR_TO_FD(p) (fileno(GetReadFile(p)))
|
127
129
|
#endif /* GetReadFile */
|
128
130
|
|
129
|
-
#define NOGVL_FUNCTION (VALUE
|
131
|
+
#define NOGVL_FUNCTION (VALUE(*)(void *))
|
130
132
|
|
131
133
|
#if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) && \
|
132
134
|
defined(HAVE_RUBY_THREAD_H) && HAVE_RUBY_THREAD_H
|
@@ -151,8 +153,10 @@ fake_blocking_region(VALUE (*f)(ANYARGS), void *data)
|
|
151
153
|
}
|
152
154
|
# define NOGVL(f, d) \
|
153
155
|
fake_blocking_region(NOGVL_FUNCTION(f), (d))
|
154
|
-
#endif /*
|
155
|
-
|
156
|
+
#endif /*
|
157
|
+
* HAVE_RB_THREAD_CALL_WITHOUT_GVL
|
158
|
+
* HAVE_RUBY_THREAD_H
|
159
|
+
*/
|
156
160
|
|
157
161
|
#if defined(__cplusplus)
|
158
162
|
}
|
data/ext/magic/extconf.rb
CHANGED
@@ -9,7 +9,7 @@ PACKAGE_ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'
|
|
9
9
|
|
10
10
|
# The gem version constraint in the Rakefile is not respected at install time.
|
11
11
|
# Keep this version in sync with the one in the Rakefile !
|
12
|
-
REQUIRED_MINI_PORTILE_VERSION = "~> 2.
|
12
|
+
REQUIRED_MINI_PORTILE_VERSION = "~> 2.6"
|
13
13
|
|
14
14
|
MAGIC_HELP_MESSAGE = <<~HELP
|
15
15
|
USAGE: ruby #{$0} [options]
|
@@ -298,9 +298,21 @@ else
|
|
298
298
|
if static_p
|
299
299
|
ENV['PKG_CONFIG_PATH'] = "#{libmagic_recipe.path}/lib/pkgconfig"
|
300
300
|
# mkmf appends -- to the first option
|
301
|
-
|
301
|
+
pkg_config_flags = pkg_config('libmagic', 'libs --static')
|
302
|
+
|
303
|
+
raise 'Please install the `pkg-config` utility' unless pkg_config_flags
|
304
|
+
|
305
|
+
$LIBS += " " + pkg_config_flags
|
302
306
|
$LIBS += " " + File.join(libmagic_recipe.path, 'lib', "libmagic.#{$LIBEXT}")
|
303
307
|
end
|
308
|
+
|
309
|
+
if cross_build_p
|
310
|
+
# database files will be packaged up by the cross-compiling callback in the ExtensionTask
|
311
|
+
to_path = File.join(PACKAGE_ROOT_DIR, "ext/magic/share")
|
312
|
+
FileUtils.rm_rf(to_path, secure: true)
|
313
|
+
FileUtils.mkdir(to_path)
|
314
|
+
FileUtils.cp_r(Dir[File.join(libmagic_recipe.path, 'share/misc/*.mgc')], to_path)
|
315
|
+
end
|
304
316
|
end
|
305
317
|
|
306
318
|
$CFLAGS += ' -std=c99'
|
@@ -371,6 +383,13 @@ unless have_header('ruby.h')
|
|
371
383
|
EOS
|
372
384
|
end
|
373
385
|
|
386
|
+
# these are needed for `rb_thread_call_without_gvl` to be properly detected on some linux systems.
|
387
|
+
# specifically, rake-compiler-dock's redhat-based image needs these.
|
388
|
+
have_library('pthread')
|
389
|
+
have_library('rt')
|
390
|
+
have_library('dl')
|
391
|
+
have_library('crypt')
|
392
|
+
|
374
393
|
have_func('rb_thread_call_without_gvl')
|
375
394
|
have_func('rb_thread_blocking_region')
|
376
395
|
|
data/ext/magic/functions.c
CHANGED
@@ -4,14 +4,14 @@ extern "C" {
|
|
4
4
|
|
5
5
|
#include "functions.h"
|
6
6
|
|
7
|
-
int check_fd(int fd);
|
7
|
+
static int check_fd(int fd);
|
8
8
|
static int safe_dup(int fd);
|
9
9
|
static int safe_close(int fd);
|
10
10
|
static int safe_cloexec(int fd);
|
11
|
-
int override_error_output(void *data);
|
12
|
-
int restore_error_output(void *data);
|
11
|
+
static int override_error_output(void *data);
|
12
|
+
static int restore_error_output(void *data);
|
13
13
|
|
14
|
-
inline int
|
14
|
+
static inline int
|
15
15
|
check_fd(int fd)
|
16
16
|
{
|
17
17
|
errno = 0;
|
@@ -42,6 +42,7 @@ safe_dup(int fd)
|
|
42
42
|
goto error;
|
43
43
|
}
|
44
44
|
}
|
45
|
+
|
45
46
|
if (safe_cloexec(new_fd) < 0) {
|
46
47
|
local_errno = errno;
|
47
48
|
goto error;
|
@@ -78,6 +79,7 @@ safe_cloexec(int fd)
|
|
78
79
|
local_errno = errno;
|
79
80
|
goto error;
|
80
81
|
}
|
82
|
+
|
81
83
|
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
|
82
84
|
local_errno = errno;
|
83
85
|
goto error;
|
@@ -89,18 +91,18 @@ error:
|
|
89
91
|
return -1;
|
90
92
|
}
|
91
93
|
|
92
|
-
int
|
94
|
+
static int
|
93
95
|
override_error_output(void *data)
|
94
96
|
{
|
95
97
|
int local_errno;
|
96
|
-
|
98
|
+
int flags = O_WRONLY | O_APPEND;
|
97
99
|
save_t *s = data;
|
98
100
|
|
99
101
|
#if defined(HAVE_O_CLOEXEC)
|
100
|
-
|
102
|
+
flags |= O_CLOEXEC;
|
101
103
|
#endif
|
102
104
|
|
103
|
-
assert(s != NULL &&
|
105
|
+
assert(s != NULL &&
|
104
106
|
"Must be a valid pointer to `save_t' type");
|
105
107
|
|
106
108
|
s->file.old_fd = -1;
|
@@ -116,7 +118,7 @@ override_error_output(void *data)
|
|
116
118
|
goto error;
|
117
119
|
}
|
118
120
|
|
119
|
-
s->file.new_fd = open("/dev/null",
|
121
|
+
s->file.new_fd = open("/dev/null", flags, 0222);
|
120
122
|
if (s->file.new_fd < 0) {
|
121
123
|
local_errno = errno;
|
122
124
|
|
@@ -128,10 +130,12 @@ override_error_output(void *data)
|
|
128
130
|
safe_close(s->file.old_fd);
|
129
131
|
goto error;
|
130
132
|
}
|
133
|
+
|
131
134
|
if (safe_cloexec(s->file.new_fd) < 0) {
|
132
135
|
local_errno = errno;
|
133
136
|
goto error;
|
134
137
|
}
|
138
|
+
|
135
139
|
if (dup2(s->file.new_fd, fileno(stderr)) < 0) {
|
136
140
|
local_errno = errno;
|
137
141
|
goto error;
|
@@ -146,13 +150,13 @@ error:
|
|
146
150
|
return -1;
|
147
151
|
}
|
148
152
|
|
149
|
-
int
|
153
|
+
static int
|
150
154
|
restore_error_output(void *data)
|
151
155
|
{
|
152
156
|
int local_errno;
|
153
157
|
save_t *s = data;
|
154
158
|
|
155
|
-
assert(s != NULL &&
|
159
|
+
assert(s != NULL &&
|
156
160
|
"Must be a valid pointer to `save_t' type");
|
157
161
|
|
158
162
|
if (s->file.old_fd < 0 && s->status != 0)
|
@@ -278,15 +282,21 @@ inline int
|
|
278
282
|
magic_load_wrapper(magic_t magic, const char *magic_file, int flags)
|
279
283
|
{
|
280
284
|
int rv;
|
285
|
+
|
281
286
|
MAGIC_FUNCTION(magic_load, rv, flags, magic, magic_file);
|
287
|
+
|
282
288
|
return rv;
|
283
289
|
}
|
284
290
|
|
285
291
|
inline int
|
286
|
-
magic_load_buffers_wrapper(magic_t magic, void **buffers, size_t *sizes,
|
292
|
+
magic_load_buffers_wrapper(magic_t magic, void **buffers, size_t *sizes,
|
293
|
+
size_t count, int flags)
|
287
294
|
{
|
288
295
|
int rv;
|
289
|
-
|
296
|
+
|
297
|
+
MAGIC_FUNCTION(magic_load_buffers, rv, flags, magic, buffers, sizes,
|
298
|
+
count);
|
299
|
+
|
290
300
|
return rv;
|
291
301
|
}
|
292
302
|
|
@@ -294,7 +304,9 @@ inline int
|
|
294
304
|
magic_compile_wrapper(magic_t magic, const char *magic_file, int flags)
|
295
305
|
{
|
296
306
|
int rv;
|
307
|
+
|
297
308
|
MAGIC_FUNCTION(magic_compile, rv, flags, magic, magic_file);
|
309
|
+
|
298
310
|
return rv;
|
299
311
|
}
|
300
312
|
|
@@ -302,15 +314,19 @@ inline int
|
|
302
314
|
magic_check_wrapper(magic_t magic, const char *magic_file, int flags)
|
303
315
|
{
|
304
316
|
int rv;
|
317
|
+
|
305
318
|
MAGIC_FUNCTION(magic_check, rv, flags, magic, magic_file);
|
319
|
+
|
306
320
|
return rv;
|
307
321
|
}
|
308
322
|
|
309
323
|
inline const char*
|
310
|
-
magic_file_wrapper(magic_t magic, const char*
|
324
|
+
magic_file_wrapper(magic_t magic, const char *filename, int flags)
|
311
325
|
{
|
312
326
|
const char *cstring;
|
327
|
+
|
313
328
|
MAGIC_FUNCTION(magic_file, cstring, flags, magic, filename);
|
329
|
+
|
314
330
|
return cstring;
|
315
331
|
}
|
316
332
|
|
@@ -318,7 +334,9 @@ inline const char*
|
|
318
334
|
magic_buffer_wrapper(magic_t magic, const void *buffer, size_t size, int flags)
|
319
335
|
{
|
320
336
|
const char *cstring;
|
337
|
+
|
321
338
|
MAGIC_FUNCTION(magic_buffer, cstring, flags, magic, buffer, size);
|
339
|
+
|
322
340
|
return cstring;
|
323
341
|
}
|
324
342
|
|
data/ext/magic/functions.h
CHANGED
@@ -9,7 +9,7 @@ extern "C" {
|
|
9
9
|
|
10
10
|
#define MAGIC_FUNCTION(f, r, x, ...) \
|
11
11
|
do { \
|
12
|
-
if ((x) & MAGIC_DEBUG)
|
12
|
+
if ((x) & (MAGIC_DEBUG | MAGIC_CHECK)) \
|
13
13
|
r = f(__VA_ARGS__); \
|
14
14
|
else { \
|
15
15
|
save_t __##f; \
|
@@ -17,7 +17,7 @@ extern "C" {
|
|
17
17
|
r = f(__VA_ARGS__); \
|
18
18
|
restore_error_output(&(__##f)); \
|
19
19
|
} \
|
20
|
-
} while(0)
|
20
|
+
} while (0)
|
21
21
|
|
22
22
|
typedef struct file_data {
|
23
23
|
fpos_t position;
|
@@ -33,30 +33,36 @@ typedef struct save {
|
|
33
33
|
extern magic_t magic_open_wrapper(int flags);
|
34
34
|
extern void magic_close_wrapper(magic_t magic);
|
35
35
|
|
36
|
-
extern const char*
|
36
|
+
extern const char *magic_error_wrapper(magic_t magic);
|
37
37
|
extern int magic_errno_wrapper(magic_t magic);
|
38
38
|
|
39
|
-
extern const char*
|
39
|
+
extern const char *magic_getpath_wrapper(void);
|
40
40
|
|
41
|
-
extern int magic_getparam_wrapper(magic_t magic, int parameter,
|
41
|
+
extern int magic_getparam_wrapper(magic_t magic, int parameter,
|
42
|
+
void *value);
|
42
43
|
extern int magic_setparam_wrapper(magic_t magic, int parameter,
|
43
44
|
const void *value);
|
44
45
|
|
45
46
|
extern int magic_getflags_wrapper(magic_t magic);
|
46
47
|
extern int magic_setflags_wrapper(magic_t magic, int flags);
|
47
48
|
|
48
|
-
extern int magic_load_wrapper(magic_t magic, const char *magic_file,
|
49
|
+
extern int magic_load_wrapper(magic_t magic, const char *magic_file,
|
50
|
+
int flags);
|
49
51
|
extern int magic_load_buffers_wrapper(magic_t magic, void **buffers,
|
50
|
-
size_t *sizes, size_t count,
|
52
|
+
size_t *sizes, size_t count,
|
53
|
+
int flags);
|
51
54
|
|
52
|
-
extern int magic_compile_wrapper(magic_t magic, const char *magic_file,
|
53
|
-
|
55
|
+
extern int magic_compile_wrapper(magic_t magic, const char *magic_file,
|
56
|
+
int flags);
|
57
|
+
extern int magic_check_wrapper(magic_t magic, const char *magic_file,
|
58
|
+
int flags);
|
54
59
|
|
55
|
-
extern const char*
|
60
|
+
extern const char *magic_file_wrapper(magic_t magic, const char *filename,
|
56
61
|
int flags);
|
57
|
-
extern const char*
|
62
|
+
extern const char *magic_buffer_wrapper(magic_t magic, const void *buffer,
|
58
63
|
size_t size, int flags);
|
59
|
-
extern const char*
|
64
|
+
extern const char *magic_descriptor_wrapper(magic_t magic, int fd,
|
65
|
+
int flags);
|
60
66
|
|
61
67
|
extern int magic_version_wrapper(void);
|
62
68
|
|