ruby-magic 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/AUTHORS +1 -1
- data/CHANGELOG.md +60 -0
- data/COPYRIGHT +1 -1
- data/NOTICE +466 -0
- data/README.md +43 -0
- data/VERSION +1 -1
- data/ext/magic/common.h +80 -47
- data/ext/magic/extconf.rb +141 -82
- data/ext/magic/functions.c +251 -236
- data/ext/magic/functions.h +44 -88
- data/ext/magic/ruby-magic.c +1235 -627
- data/ext/magic/ruby-magic.h +222 -159
- data/kwilczynski-public.pem +25 -0
- data/lib/magic.rb +78 -89
- data/lib/magic/core/file.rb +9 -66
- data/lib/magic/core/string.rb +1 -43
- data/lib/magic/version.rb +14 -48
- metadata +24 -25
- data/CHANGES +0 -50
- data/CHANGES.rdoc +0 -50
- data/README +0 -1
- data/README.rdoc +0 -8
- data/Rakefile +0 -79
- data/TODO +0 -24
- data/bin/magic +0 -33
- data/ruby-magic.gemspec +0 -62
- data/test/helpers/magic_test_helper.rb +0 -35
- data/test/test_constants.rb +0 -96
- data/test/test_magic.rb +0 -461
@@ -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,32 +1,10 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# :stopdoc:
|
4
|
-
|
5
|
-
#
|
6
|
-
# magic.rb
|
7
|
-
#
|
8
|
-
# Copyright 2013-2015 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
|
-
#
|
1
|
+
# frozen_string_literal: true
|
22
2
|
|
23
3
|
require_relative 'magic/magic'
|
24
4
|
require_relative 'magic/version'
|
25
5
|
require_relative 'magic/core/file'
|
26
6
|
require_relative 'magic/core/string'
|
27
7
|
|
28
|
-
# :startdoc:
|
29
|
-
|
30
8
|
#
|
31
9
|
# File _Magic_ in Ruby.
|
32
10
|
#
|
@@ -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,17 +28,11 @@ class Magic
|
|
50
28
|
|
51
29
|
#
|
52
30
|
# call-seq:
|
53
|
-
# magic.
|
31
|
+
# magic.flags_list( boolean ) -> array
|
54
32
|
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
# Example:
|
33
|
+
# See also: Magic#flags and Magic#flags_names
|
58
34
|
#
|
59
|
-
|
60
|
-
#
|
61
|
-
# See also: Magic#flags
|
62
|
-
#
|
63
|
-
def flags_to_a(names = false)
|
35
|
+
def flags_list(names = false)
|
64
36
|
raise LibraryError, 'Magic library is not open' if closed?
|
65
37
|
return [names ? 'NONE' : 0] if @flags.zero?
|
66
38
|
|
@@ -78,17 +50,22 @@ class Magic
|
|
78
50
|
flags
|
79
51
|
end
|
80
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
|
+
|
81
64
|
class << self
|
82
65
|
#
|
83
66
|
# call-seq:
|
84
|
-
# Magic.open(
|
85
|
-
# Magic.open(
|
86
|
-
#
|
87
|
-
# Returns
|
88
|
-
#
|
89
|
-
# Example:
|
90
|
-
#
|
91
|
-
# Will raise <i></i>
|
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,12 +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
|
-
# Will raise <i></i>
|
120
|
-
#
|
121
92
|
# See also: Magic::open, Magic::type, Magic::encoding, Magic::compile and Magic::check
|
122
93
|
#
|
123
94
|
def mime(&block)
|
@@ -129,12 +100,6 @@ class Magic
|
|
129
100
|
# Magic.type -> self
|
130
101
|
# Magic.type {|magic| block } -> string or array
|
131
102
|
#
|
132
|
-
# Returns
|
133
|
-
#
|
134
|
-
# Example:
|
135
|
-
#
|
136
|
-
# Will raise <i></i>
|
137
|
-
#
|
138
103
|
# See also: Magic::open, Magic::mime, Magic::encoding, Magic::compile and Magic::check
|
139
104
|
#
|
140
105
|
def type(&block)
|
@@ -146,12 +111,6 @@ class Magic
|
|
146
111
|
# Magic.encoding -> self
|
147
112
|
# Magic.encoding {|magic| block } -> string or array
|
148
113
|
#
|
149
|
-
# Returns
|
150
|
-
#
|
151
|
-
# Example:
|
152
|
-
#
|
153
|
-
# Will raise <i></i>
|
154
|
-
#
|
155
114
|
# See also: Magic::open, Magic::mime, Magic::type, Magic::compile and Magic::check
|
156
115
|
#
|
157
116
|
def encoding(&block)
|
@@ -160,55 +119,85 @@ class Magic
|
|
160
119
|
|
161
120
|
#
|
162
121
|
# call-seq:
|
163
|
-
# Magic.compile(
|
164
|
-
# Magic.compile( array )
|
122
|
+
# Magic.compile( string, ... ) -> true
|
123
|
+
# Magic.compile( array ) -> true
|
165
124
|
#
|
166
|
-
#
|
125
|
+
# See also: Magic::open, Magic::mime, Magic::type, Magic::encoding, and Magic::check
|
167
126
|
#
|
168
|
-
|
127
|
+
def compile(*paths)
|
128
|
+
open {|m| m.compile(paths) }
|
129
|
+
end
|
130
|
+
|
169
131
|
#
|
170
|
-
#
|
132
|
+
# call-seq:
|
133
|
+
# Magic.check( string, ... ) -> true or false
|
134
|
+
# Magic.check( array ) -> true or false
|
171
135
|
#
|
172
|
-
# See also: Magic::open, Magic::mime, Magic::type, Magic::encoding
|
136
|
+
# See also: Magic::open, Magic::mime, Magic::type, Magic::encoding and Magic::compile
|
173
137
|
#
|
174
|
-
def
|
175
|
-
open {|m| m.
|
138
|
+
def check(*paths)
|
139
|
+
open {|m| m.check(paths) }
|
176
140
|
end
|
177
141
|
|
178
142
|
#
|
179
143
|
# call-seq:
|
180
|
-
# Magic.
|
181
|
-
# Magic.
|
144
|
+
# Magic.file( object ) -> string or array
|
145
|
+
# Magic.file( string ) -> string or array
|
146
|
+
# Magic.file( string, integer ) -> string or array
|
182
147
|
#
|
183
|
-
#
|
148
|
+
# See also:
|
184
149
|
#
|
185
|
-
|
150
|
+
def file(path, flags = Magic::MIME)
|
151
|
+
open(flags).file(path)
|
152
|
+
end
|
153
|
+
|
186
154
|
#
|
187
|
-
#
|
155
|
+
# call-seq:
|
156
|
+
# Magic.buffer( string ) -> string or array
|
157
|
+
# Magic.buffer( string, integer ) -> string or array
|
188
158
|
#
|
189
|
-
# See also:
|
159
|
+
# See also:
|
190
160
|
#
|
191
|
-
def
|
192
|
-
open
|
161
|
+
def buffer(buffer, flags = Magic::MIME)
|
162
|
+
open(flags).buffer(buffer)
|
193
163
|
end
|
194
|
-
end
|
195
164
|
|
196
|
-
|
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)
|
175
|
+
end
|
176
|
+
|
177
|
+
alias_method :fd, :descriptor
|
178
|
+
end
|
197
179
|
|
198
180
|
private
|
199
181
|
|
182
|
+
def power_of_two?(number)
|
183
|
+
number > 0 && Math.log2(number) % 1 == 0
|
184
|
+
end
|
185
|
+
|
200
186
|
def flags_as_map
|
201
|
-
self.class
|
202
|
-
|
203
|
-
|
204
|
-
|
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
|
205
199
|
end
|
206
200
|
end
|
207
201
|
end
|
208
202
|
|
209
|
-
# :enddoc:
|
210
|
-
|
211
203
|
FileMagic = Magic
|
212
|
-
|
213
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
214
|
-
# encoding: utf-8
|
data/lib/magic/core/file.rb
CHANGED
@@ -1,57 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# :stopdoc:
|
4
|
-
|
5
|
-
#
|
6
|
-
# core/file.rb
|
7
|
-
#
|
8
|
-
# Copyright 2013-2015 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
|
-
|
42
|
-
path ||= path.to_path if path.respond_to?(:to_path)
|
43
|
-
path ||= path.to_s
|
44
|
-
|
45
|
-
Magic.open(flags | Magic::ERROR) {|mgc| mgc.file(path) }
|
13
|
+
Magic.open(flags) {|mgc| mgc.file(path) }
|
46
14
|
end
|
47
15
|
|
48
16
|
#
|
49
17
|
# call-seq:
|
50
|
-
# File.mime(
|
51
|
-
#
|
52
|
-
# Returns
|
53
|
-
#
|
54
|
-
# Example:
|
18
|
+
# File.mime( string ) -> string or array
|
55
19
|
#
|
56
20
|
# See also: File::magic and File::type
|
57
21
|
#
|
@@ -61,11 +25,7 @@ class File
|
|
61
25
|
|
62
26
|
#
|
63
27
|
# call-seq:
|
64
|
-
# File.type(
|
65
|
-
#
|
66
|
-
# Returns
|
67
|
-
#
|
68
|
-
# Example:
|
28
|
+
# File.type( string ) -> string or array
|
69
29
|
#
|
70
30
|
# See also: File::magic and File::mime
|
71
31
|
#
|
@@ -76,11 +36,7 @@ class File
|
|
76
36
|
|
77
37
|
#
|
78
38
|
# call-seq:
|
79
|
-
# File.magic
|
80
|
-
#
|
81
|
-
# Returns
|
82
|
-
#
|
83
|
-
# Example:
|
39
|
+
# File.magic -> string or array
|
84
40
|
#
|
85
41
|
# See also: File#mime and File#type
|
86
42
|
#
|
@@ -90,11 +46,7 @@ class File
|
|
90
46
|
|
91
47
|
#
|
92
48
|
# call-seq:
|
93
|
-
# File.mime
|
94
|
-
#
|
95
|
-
# Returns
|
96
|
-
#
|
97
|
-
# Example:
|
49
|
+
# File.mime -> string or array
|
98
50
|
#
|
99
51
|
# See also: File#magic and File#type
|
100
52
|
#
|
@@ -104,11 +56,7 @@ class File
|
|
104
56
|
|
105
57
|
#
|
106
58
|
# call-seq:
|
107
|
-
# File.type
|
108
|
-
#
|
109
|
-
# Returns
|
110
|
-
#
|
111
|
-
# Example:
|
59
|
+
# File.type -> string or array
|
112
60
|
#
|
113
61
|
# See also: File#magic and File#mime
|
114
62
|
#
|
@@ -116,8 +64,3 @@ class File
|
|
116
64
|
self.class.type(self)
|
117
65
|
end
|
118
66
|
end
|
119
|
-
|
120
|
-
# :enddoc:
|
121
|
-
|
122
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
123
|
-
# encoding: utf-8
|
data/lib/magic/core/string.rb
CHANGED
@@ -1,39 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# :stopdoc:
|
4
|
-
|
5
|
-
#
|
6
|
-
# core/string.rb
|
7
|
-
#
|
8
|
-
# Copyright 2013-2015 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
6
|
# string.magic -> string or array
|
32
7
|
#
|
33
|
-
# Returns
|
34
|
-
#
|
35
|
-
# Example:
|
36
|
-
#
|
37
8
|
# See also: String#mime and String#type
|
38
9
|
#
|
39
10
|
def magic(flags = Magic::NONE)
|
@@ -44,10 +15,6 @@ class String
|
|
44
15
|
# call-seq:
|
45
16
|
# string.mime -> string or array
|
46
17
|
#
|
47
|
-
# Returns
|
48
|
-
#
|
49
|
-
# Example:
|
50
|
-
#
|
51
18
|
# See also: String#magic and String#type
|
52
19
|
#
|
53
20
|
def mime
|
@@ -58,18 +25,9 @@ class String
|
|
58
25
|
# call-seq:
|
59
26
|
# string.type -> string or array
|
60
27
|
#
|
61
|
-
# Returns
|
62
|
-
#
|
63
|
-
# Example:
|
64
|
-
#
|
65
28
|
# See also: String#magic and String#mime
|
66
29
|
#
|
67
30
|
def type
|
68
31
|
magic(Magic::MIME_TYPE)
|
69
32
|
end
|
70
33
|
end
|
71
|
-
|
72
|
-
# :enddoc:
|
73
|
-
|
74
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
75
|
-
# encoding: utf-8
|