ruby-magic 0.4.0 → 0.5.4
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.
- 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
|
|