ruby-magic 0.0.1 → 0.4.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.
- checksums.yaml +5 -5
- data/AUTHORS +1 -1
- data/CHANGELOG.md +60 -0
- data/CONTRIBUTORS.md +17 -0
- data/COPYRIGHT +1 -1
- data/NOTICE +505 -0
- data/README.md +49 -0
- data/dependencies.yml +93 -0
- data/ext/magic/common.h +130 -59
- data/ext/magic/extconf.rb +404 -64
- data/ext/magic/functions.c +265 -187
- data/ext/magic/functions.h +46 -79
- data/ext/magic/ruby-magic.c +1288 -641
- data/ext/magic/ruby-magic.h +383 -173
- data/kwilczynski-public.pem +25 -0
- data/lib/magic.rb +86 -87
- data/lib/magic/core/file.rb +8 -66
- data/lib/magic/core/string.rb +4 -47
- data/lib/magic/version.rb +14 -48
- data/patches/libmagic/0001-Don-t-attempt-to-build-tests-documentation-and-Python-bindings.patch +44 -0
- data/ports/archives/file-5.39.tar.gz +0 -0
- metadata +36 -99
- data/CHANGES +0 -5
- data/CHANGES.rdoc +0 -5
- data/README +0 -1
- data/README.rdoc +0 -7
- data/Rakefile +0 -78
- data/TODO +0 -21
- data/VERSION +0 -1
- data/bin/magic +0 -33
- data/ruby-magic.gemspec +0 -68
- data/test/test_constants.rb +0 -47
- data/test/test_magic.rb +0 -260
@@ -0,0 +1,25 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEIDCCAoigAwIBAgIBATANBgkqhkiG9w0BAQsFADAdMRswGQYDVQQDDBJrdy9E
|
3
|
+
Qz1saW51eC9EQz1jb20wHhcNMjEwMTAxMDAwOTU0WhcNMjYwMTAxMDAwOTU0WjAd
|
4
|
+
MRswGQYDVQQDDBJrdy9EQz1saW51eC9EQz1jb20wggGiMA0GCSqGSIb3DQEBAQUA
|
5
|
+
A4IBjwAwggGKAoIBgQCv02+pOrAMVUipLY7qjNLx8OMfMjnVCBH21SsWn8gyIHE9
|
6
|
+
BtQ+tlsJU8nWNjlr++7SKIV5vQmyYsC2UY0cdcFASdoV0A3Lc2Z0makfvPgcIlpL
|
7
|
+
5THqQtP11tJfhjQ3MSFJYRG2D6m6GNqA+WTTsvJbPIxy5PHv5xb+79LLzcVxB9Op
|
8
|
+
C0ervTOF8W6Ye4EDvhQ5tppOr/d26UQV+8zRuxjxx5uZSPfUrE9u/gIIdeROoB3T
|
9
|
+
cnjAfzvjIzampLQppvhUnT4Vf5Rum2LohZ5GosKLy7tM65vr1eLyI2ndvS1MXWrU
|
10
|
+
05sFKm5CSqORD+TVkR1jd3z5HdPgO1KwadccxFixoI8kEIt/iixWTzbka2T2iJoq
|
11
|
+
5DeNMEMYYAZKuAGBzBcgvgPccCeAXFVF9AHjfaGRUMmYNHKK2HD6AdgNdhcE18V+
|
12
|
+
CJxFtggCJFYc1ygFOsHZPTbKo9+3ybSQhAswtDosWt26utUT1JOc2Bkj1sgQ0Yrk
|
13
|
+
orANsdYz2ee3JFkzx08CAwEAAaNrMGkwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
14
|
+
HQYDVR0OBBYEFME41mMBb/XAHgjhlX4kE8xnXxewMBcGA1UdEQQQMA6BDGt3QGxp
|
15
|
+
bnV4LmNvbTAXBgNVHRIEEDAOgQxrd0BsaW51eC5jb20wDQYJKoZIhvcNAQELBQAD
|
16
|
+
ggGBAF/2ryrSgTpf0+wYG46Oi6V3p9A3uMxxbGsh0ZmlLQT1Z1ozclR+xzxzyIFC
|
17
|
+
i7YWYyR085brDBnYNXgnUT9Nm4iAYx58MaPD28IFrcX0XA3DJE6Wkx4MmMV0chiJ
|
18
|
+
kf5ASikfGtFtf9qDmpLQB4louB6HpKNq1MwsQo8zwY93t77HCiV5f0g43rcZfGTn
|
19
|
+
wfBhpT7oOVWgfTLeBD811aS52VUCWclmnz+f01GdTeMwqsgc6oJaPSvg4JCMN94O
|
20
|
+
wcBlxus69rhM8PeTJNhwLxzRCNnZ69t9k2cU+4lTmQQIB8gnEFJxY9gZdgQ6pej0
|
21
|
+
HXUIut+6pp5BRYF2mTZ3fnxhWyIZaeB7lla2gI6rV2GXDbp4kVplGEuQ975YklJw
|
22
|
+
i4y7bz2Es4Hkly2Nc/J2L0+uMoBhMWMY3Xl0XDdkZYtBdnSB5g7NacChaAsukEkd
|
23
|
+
Ozt6vfXxSzW/KfodB+0ELjlHWiFbI8w7c8Kt7/ceZGVsXTxD/f4tVWy8MmxFy3pY
|
24
|
+
Cpe8Kg==
|
25
|
+
-----END CERTIFICATE-----
|
data/lib/magic.rb
CHANGED
@@ -1,31 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
#
|
8
|
-
# Copyright 2013-2014 Krzysztof Wilczynski
|
9
|
-
#
|
10
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
|
-
# you may not use this file except in compliance with the License.
|
12
|
-
# You may obtain a copy of the License at
|
13
|
-
#
|
14
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
15
|
-
#
|
16
|
-
# Unless required by applicable law or agreed to in writing, software
|
17
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
18
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
19
|
-
# See the License for the specific language governing permissions and
|
20
|
-
# limitations under the License.
|
21
|
-
#
|
22
|
-
|
23
|
-
require 'magic/magic'
|
24
|
-
require 'magic/version'
|
25
|
-
require 'magic/core/file'
|
26
|
-
require 'magic/core/string'
|
27
|
-
|
28
|
-
# :startdoc:
|
3
|
+
require_relative 'magic/magic'
|
4
|
+
require_relative 'magic/version'
|
5
|
+
require_relative 'magic/core/file'
|
6
|
+
require_relative 'magic/core/string'
|
29
7
|
|
30
8
|
#
|
31
9
|
# File _Magic_ in Ruby.
|
@@ -37,12 +15,12 @@ class Magic
|
|
37
15
|
# call-seq:
|
38
16
|
# magic.inspect -> string
|
39
17
|
#
|
40
|
-
# Returns
|
41
|
-
#
|
42
18
|
# Example:
|
43
19
|
#
|
44
|
-
# magic = Magic.new
|
45
|
-
# magic.inspect
|
20
|
+
# magic = Magic.new
|
21
|
+
# magic.inspect #=> "#<Magic:0x007fd5258a1108 @flags=0, @paths=[\"/etc/magic\", \"/usr/share/misc/magic\"]>"
|
22
|
+
# magic.close
|
23
|
+
# magic.inspect #=> "#<Magic:0x007fd5258a1108 @flags=0, @paths=[\"/etc/magic\", \"/usr/share/misc/magic\"] (closed)>"
|
46
24
|
#
|
47
25
|
def inspect
|
48
26
|
super.insert(-2, self.closed? ? ' (closed)' : '')
|
@@ -50,25 +28,17 @@ class Magic
|
|
50
28
|
|
51
29
|
#
|
52
30
|
# call-seq:
|
53
|
-
# magic.
|
54
|
-
#
|
55
|
-
# Returns an +array+
|
56
|
-
#
|
57
|
-
# Example:
|
58
|
-
#
|
59
|
-
# Will raise <i>Magic::LibraryError</i> exception if, or
|
31
|
+
# magic.flags_list( boolean ) -> array
|
60
32
|
#
|
61
|
-
# See also: Magic#flags
|
33
|
+
# See also: Magic#flags and Magic#flags_names
|
62
34
|
#
|
63
|
-
def
|
64
|
-
raise LibraryError,
|
35
|
+
def flags_list(names = false)
|
36
|
+
raise LibraryError, 'Magic library is not open' if closed?
|
37
|
+
return [names ? 'NONE' : 0] if @flags.zero?
|
65
38
|
|
66
39
|
n, i = 0, @flags
|
67
|
-
|
68
40
|
flags = []
|
69
41
|
|
70
|
-
return [names ? 'NONE' : 0] if @flags.zero?
|
71
|
-
|
72
42
|
@@flags_map ||= flags_as_map if names
|
73
43
|
|
74
44
|
while i > 0
|
@@ -80,15 +50,22 @@ class Magic
|
|
80
50
|
flags
|
81
51
|
end
|
82
52
|
|
53
|
+
alias_method :flags_to_a, :flags_list
|
54
|
+
|
55
|
+
# call-seq:
|
56
|
+
# magic.flags_names -> array
|
57
|
+
#
|
58
|
+
# See also: Magic#flags and Magic#flags_list
|
59
|
+
#
|
60
|
+
def flags_names
|
61
|
+
flags_list(true)
|
62
|
+
end
|
63
|
+
|
83
64
|
class << self
|
84
65
|
#
|
85
66
|
# call-seq:
|
86
|
-
# Magic.open(
|
87
|
-
# Magic.open(
|
88
|
-
#
|
89
|
-
# Returns
|
90
|
-
#
|
91
|
-
# Example:
|
67
|
+
# Magic.open( integer ) -> self
|
68
|
+
# Magic.open( integer ) {|magic| block } -> string or array
|
92
69
|
#
|
93
70
|
# See also: Magic::mime, Magic::type, Magic::encoding, Magic::compile and Magic::check
|
94
71
|
#
|
@@ -112,10 +89,6 @@ class Magic
|
|
112
89
|
# Magic.mime -> self
|
113
90
|
# Magic.mime {|magic| block } -> string or array
|
114
91
|
#
|
115
|
-
# Returns
|
116
|
-
#
|
117
|
-
# Example:
|
118
|
-
#
|
119
92
|
# See also: Magic::open, Magic::type, Magic::encoding, Magic::compile and Magic::check
|
120
93
|
#
|
121
94
|
def mime(&block)
|
@@ -127,10 +100,6 @@ class Magic
|
|
127
100
|
# Magic.type -> self
|
128
101
|
# Magic.type {|magic| block } -> string or array
|
129
102
|
#
|
130
|
-
# Returns
|
131
|
-
#
|
132
|
-
# Example:
|
133
|
-
#
|
134
103
|
# See also: Magic::open, Magic::mime, Magic::encoding, Magic::compile and Magic::check
|
135
104
|
#
|
136
105
|
def type(&block)
|
@@ -142,10 +111,6 @@ class Magic
|
|
142
111
|
# Magic.encoding -> self
|
143
112
|
# Magic.encoding {|magic| block } -> string or array
|
144
113
|
#
|
145
|
-
# Returns
|
146
|
-
#
|
147
|
-
# Example:
|
148
|
-
#
|
149
114
|
# See also: Magic::open, Magic::mime, Magic::type, Magic::compile and Magic::check
|
150
115
|
#
|
151
116
|
def encoding(&block)
|
@@ -154,51 +119,85 @@ class Magic
|
|
154
119
|
|
155
120
|
#
|
156
121
|
# call-seq:
|
157
|
-
# Magic.compile(
|
158
|
-
# Magic.compile( array )
|
122
|
+
# Magic.compile( string, ... ) -> true
|
123
|
+
# Magic.compile( array ) -> true
|
124
|
+
#
|
125
|
+
# See also: Magic::open, Magic::mime, Magic::type, Magic::encoding, and Magic::check
|
159
126
|
#
|
160
|
-
|
127
|
+
def compile(*paths)
|
128
|
+
open {|m| m.compile(paths) }
|
129
|
+
end
|
130
|
+
|
161
131
|
#
|
162
|
-
#
|
132
|
+
# call-seq:
|
133
|
+
# Magic.check( string, ... ) -> true or false
|
134
|
+
# Magic.check( array ) -> true or false
|
163
135
|
#
|
164
|
-
# See also: Magic::open, Magic::mime, Magic::type, Magic::encoding
|
136
|
+
# See also: Magic::open, Magic::mime, Magic::type, Magic::encoding and Magic::compile
|
165
137
|
#
|
166
|
-
def
|
167
|
-
open {|m| m.
|
138
|
+
def check(*paths)
|
139
|
+
open {|m| m.check(paths) }
|
168
140
|
end
|
169
141
|
|
170
142
|
#
|
171
143
|
# call-seq:
|
172
|
-
# Magic.
|
173
|
-
# Magic.
|
144
|
+
# Magic.file( object ) -> string or array
|
145
|
+
# Magic.file( string ) -> string or array
|
146
|
+
# Magic.file( string, integer ) -> string or array
|
174
147
|
#
|
175
|
-
#
|
148
|
+
# See also:
|
176
149
|
#
|
177
|
-
|
150
|
+
def file(path, flags = Magic::MIME)
|
151
|
+
open(flags).file(path)
|
152
|
+
end
|
153
|
+
|
178
154
|
#
|
179
|
-
#
|
155
|
+
# call-seq:
|
156
|
+
# Magic.buffer( string ) -> string or array
|
157
|
+
# Magic.buffer( string, integer ) -> string or array
|
180
158
|
#
|
181
|
-
|
182
|
-
|
159
|
+
# See also:
|
160
|
+
#
|
161
|
+
def buffer(buffer, flags = Magic::MIME)
|
162
|
+
open(flags).buffer(buffer)
|
163
|
+
end
|
164
|
+
|
165
|
+
#
|
166
|
+
# call-seq:
|
167
|
+
# Magic.descriptor( object ) -> string or array
|
168
|
+
# Magic.descriptor( integer ) -> string or array
|
169
|
+
# Magic.descriptor( integer, integer ) -> string or array
|
170
|
+
#
|
171
|
+
# See also:
|
172
|
+
#
|
173
|
+
def descriptor(fd, flags = Magic::MIME)
|
174
|
+
open(flags).descriptor(fd)
|
183
175
|
end
|
184
|
-
end
|
185
176
|
|
186
|
-
|
177
|
+
alias_method :fd, :descriptor
|
178
|
+
end
|
187
179
|
|
188
180
|
private
|
189
181
|
|
182
|
+
def power_of_two?(number)
|
183
|
+
number > 0 && Math.log2(number) % 1 == 0
|
184
|
+
end
|
185
|
+
|
190
186
|
def flags_as_map
|
191
|
-
self.class
|
192
|
-
|
193
|
-
|
194
|
-
|
187
|
+
klass = self.class
|
188
|
+
|
189
|
+
klass.constants.each_with_object({}) do |constant, flags|
|
190
|
+
constant = constant.to_s
|
191
|
+
|
192
|
+
next if constant.start_with?('PARAM_')
|
193
|
+
|
194
|
+
value = klass.const_get(constant)
|
195
|
+
|
196
|
+
if value.is_a?(Integer) && power_of_two?(value)
|
197
|
+
flags[value] = constant
|
198
|
+
end
|
195
199
|
end
|
196
200
|
end
|
197
201
|
end
|
198
202
|
|
199
|
-
# :enddoc:
|
200
|
-
|
201
203
|
FileMagic = Magic
|
202
|
-
|
203
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
204
|
-
# encoding: utf-8
|
data/lib/magic/core/file.rb
CHANGED
@@ -1,58 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# :stopdoc:
|
4
|
-
|
5
|
-
#
|
6
|
-
# core/file.rb
|
7
|
-
#
|
8
|
-
# Copyright 2013-2014 Krzysztof Wilczynski
|
9
|
-
#
|
10
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
|
-
# you may not use this file except in compliance with the License.
|
12
|
-
# You may obtain a copy of the License at
|
13
|
-
#
|
14
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
15
|
-
#
|
16
|
-
# Unless required by applicable law or agreed to in writing, software
|
17
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
18
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
19
|
-
# See the License for the specific language governing permissions and
|
20
|
-
# limitations under the License.
|
21
|
-
#
|
22
|
-
|
23
|
-
# :startdoc:
|
24
|
-
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
3
|
class File
|
29
4
|
class << self
|
30
5
|
#
|
31
6
|
# call-seq:
|
32
|
-
# File.magic(
|
33
|
-
#
|
34
|
-
# Returns
|
35
|
-
#
|
36
|
-
# Example:
|
7
|
+
# File.magic( object ) -> string or array
|
8
|
+
# File.magic( string ) -> string or array
|
37
9
|
#
|
38
10
|
# See also: File::mime and File::type
|
39
11
|
#
|
40
12
|
def magic(path, flags = Magic::NONE)
|
41
|
-
path = path.path if path.respond_to?(:path)
|
42
|
-
path ||= path.to_path if path.respond_to?(:to_path)
|
43
|
-
path ||= path.to_s
|
44
|
-
|
45
13
|
Magic.open(flags) {|mgc| mgc.file(path) }
|
46
|
-
rescue Magic::Error
|
47
14
|
end
|
48
15
|
|
49
16
|
#
|
50
17
|
# call-seq:
|
51
|
-
# File.mime(
|
52
|
-
#
|
53
|
-
# Returns
|
54
|
-
#
|
55
|
-
# Example:
|
18
|
+
# File.mime( string ) -> string or array
|
56
19
|
#
|
57
20
|
# See also: File::magic and File::type
|
58
21
|
#
|
@@ -62,11 +25,7 @@ class File
|
|
62
25
|
|
63
26
|
#
|
64
27
|
# call-seq:
|
65
|
-
# File.type(
|
66
|
-
#
|
67
|
-
# Returns
|
68
|
-
#
|
69
|
-
# Example:
|
28
|
+
# File.type( string ) -> string or array
|
70
29
|
#
|
71
30
|
# See also: File::magic and File::mime
|
72
31
|
#
|
@@ -77,11 +36,7 @@ class File
|
|
77
36
|
|
78
37
|
#
|
79
38
|
# call-seq:
|
80
|
-
# File.magic
|
81
|
-
#
|
82
|
-
# Returns
|
83
|
-
#
|
84
|
-
# Example:
|
39
|
+
# File.magic -> string or array
|
85
40
|
#
|
86
41
|
# See also: File#mime and File#type
|
87
42
|
#
|
@@ -91,11 +46,7 @@ class File
|
|
91
46
|
|
92
47
|
#
|
93
48
|
# call-seq:
|
94
|
-
# File.mime
|
95
|
-
#
|
96
|
-
# Returns
|
97
|
-
#
|
98
|
-
# Example:
|
49
|
+
# File.mime -> string or array
|
99
50
|
#
|
100
51
|
# See also: File#magic and File#type
|
101
52
|
#
|
@@ -105,11 +56,7 @@ class File
|
|
105
56
|
|
106
57
|
#
|
107
58
|
# call-seq:
|
108
|
-
# File.type
|
109
|
-
#
|
110
|
-
# Returns
|
111
|
-
#
|
112
|
-
# Example:
|
59
|
+
# File.type -> string or array
|
113
60
|
#
|
114
61
|
# See also: File#magic and File#mime
|
115
62
|
#
|
@@ -117,8 +64,3 @@ class File
|
|
117
64
|
self.class.type(self)
|
118
65
|
end
|
119
66
|
end
|
120
|
-
|
121
|
-
# :enddoc:
|
122
|
-
|
123
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
124
|
-
# encoding: utf-8
|
data/lib/magic/core/string.rb
CHANGED
@@ -1,53 +1,19 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# :stopdoc:
|
4
|
-
|
5
|
-
#
|
6
|
-
# core/string.rb
|
7
|
-
#
|
8
|
-
# Copyright 2013-2014 Krzysztof Wilczynski
|
9
|
-
#
|
10
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
|
-
# you may not use this file except in compliance with the License.
|
12
|
-
# You may obtain a copy of the License at
|
13
|
-
#
|
14
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
15
|
-
#
|
16
|
-
# Unless required by applicable law or agreed to in writing, software
|
17
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
18
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
19
|
-
# See the License for the specific language governing permissions and
|
20
|
-
# limitations under the License.
|
21
|
-
#
|
22
|
-
|
23
|
-
# :startdoc:
|
24
|
-
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
3
|
class String
|
29
4
|
#
|
30
5
|
# call-seq:
|
31
|
-
# string.magic -> string
|
32
|
-
#
|
33
|
-
# Returns
|
34
|
-
#
|
35
|
-
# Example:
|
6
|
+
# string.magic -> string or array
|
36
7
|
#
|
37
8
|
# See also: String#mime and String#type
|
38
9
|
#
|
39
10
|
def magic(flags = Magic::NONE)
|
40
11
|
Magic.open(flags) {|mgc| mgc.buffer(self) }
|
41
|
-
rescue Magic::Error
|
42
12
|
end
|
43
13
|
|
44
14
|
#
|
45
15
|
# call-seq:
|
46
|
-
# string.mime -> string
|
47
|
-
#
|
48
|
-
# Returns
|
49
|
-
#
|
50
|
-
# Example:
|
16
|
+
# string.mime -> string or array
|
51
17
|
#
|
52
18
|
# See also: String#magic and String#type
|
53
19
|
#
|
@@ -57,11 +23,7 @@ class String
|
|
57
23
|
|
58
24
|
#
|
59
25
|
# call-seq:
|
60
|
-
# string.type -> string
|
61
|
-
#
|
62
|
-
# Returns
|
63
|
-
#
|
64
|
-
# Example:
|
26
|
+
# string.type -> string or array
|
65
27
|
#
|
66
28
|
# See also: String#magic and String#mime
|
67
29
|
#
|
@@ -69,8 +31,3 @@ class String
|
|
69
31
|
magic(Magic::MIME_TYPE)
|
70
32
|
end
|
71
33
|
end
|
72
|
-
|
73
|
-
# :enddoc:
|
74
|
-
|
75
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
76
|
-
# encoding: utf-8
|