ruby-filemagic 0.4.2 → 0.5.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 +7 -0
- data/ChangeLog +8 -0
- data/README +7 -7
- data/Rakefile +16 -15
- data/ext/filemagic.c +9 -7
- data/ext/filemagic.h +6 -9
- data/lib/filemagic.rb +1 -1
- data/lib/filemagic/ext.rb +0 -2
- data/lib/filemagic/version.rb +2 -2
- data/test/filemagic_test.rb +17 -13
- metadata +57 -70
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a838370185e74426017deaa1c9b9e41935636c68
|
4
|
+
data.tar.gz: c7fc52e6fd4a78dea2ede8b329641cc2f4a6fa17
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c05274940e05af64ac2609e9a03d3fc22a4175f61d1e29d83e30c85a129531953383952d82e491040431d9127f7fecb5fde61c38a30966f793eda611194d074c
|
7
|
+
data.tar.gz: 05869472cbb9bfec6be74f95976a8ea26d3dbca77070578a6e69505d66882e480047a6df765973cbaebdcc410de57bb9a7b72a85a91cdc08f9356d80b0e61e91
|
data/ChangeLog
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
+
# markup: rd
|
2
|
+
|
1
3
|
= Revision history for ruby-filemagic
|
2
4
|
|
5
|
+
== 0.5.0 [2013-12-19]
|
6
|
+
|
7
|
+
* Removed usage of +RARRAY_PTR+ (cf. Ruby bug
|
8
|
+
{#8399}[https://bugs.ruby-lang.org/issues/8399]).
|
9
|
+
* Housekeeping.
|
10
|
+
|
3
11
|
== 0.4.2 [2010-09-16]
|
4
12
|
|
5
13
|
* Not all versions/distributions have file/patchlevel.h
|
data/README
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to filemagic version 0.
|
5
|
+
This documentation refers to filemagic version 0.5.0
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
9
9
|
|
10
10
|
=== Revised version
|
11
11
|
|
12
|
-
September 12, 2008 Jens Wille <jens.wille@
|
12
|
+
September 12, 2008 Jens Wille <jens.wille@gmail.com>
|
13
13
|
|
14
14
|
Similar to Ricardo[http://github.com/ricardochimal/ruby-filemagic]
|
15
15
|
I wanted this project to make some progress. My needs went a bit
|
@@ -43,16 +43,16 @@ Travis
|
|
43
43
|
== LINKS
|
44
44
|
|
45
45
|
<b></b>
|
46
|
-
Homepage::
|
47
|
-
Documentation::
|
48
|
-
Source code::
|
49
|
-
|
46
|
+
Homepage (defunct):: http://grub.ath.cx/filemagic/
|
47
|
+
Documentation:: http://blackwinter.github.com/ruby-filemagic
|
48
|
+
Source code:: http://github.com/blackwinter/ruby-filemagic
|
49
|
+
RubyGem:: http://rubygems.org/gems/ruby-filemagic
|
50
50
|
|
51
51
|
|
52
52
|
== AUTHORS
|
53
53
|
|
54
54
|
* Travis Whitton <mailto:tinymountain@gmail.com> (Original author)
|
55
|
-
* Jens Wille <mailto:jens.wille@
|
55
|
+
* Jens Wille <mailto:jens.wille@gmail.com>
|
56
56
|
|
57
57
|
|
58
58
|
== CREDITS
|
data/Rakefile
CHANGED
@@ -1,24 +1,25 @@
|
|
1
|
-
require %q{
|
1
|
+
require File.expand_path(%q{../lib/filemagic/version}, __FILE__)
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'hen'
|
5
5
|
|
6
6
|
Hen.lay! {{
|
7
|
-
:rubyforge => {
|
8
|
-
:package => 'ruby-filemagic',
|
9
|
-
:project => 'ruby-filemagic',
|
10
|
-
:rdoc_dir => nil
|
11
|
-
},
|
12
|
-
|
13
7
|
:gem => {
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:extra_files
|
8
|
+
:name => %q{ruby-filemagic},
|
9
|
+
:version => FileMagic::VERSION,
|
10
|
+
:summary => 'Ruby bindings to the magic(4) library',
|
11
|
+
:authors => ['Travis Whitton', 'Jens Wille'],
|
12
|
+
:email => ['tinymountain@gmail.com', 'jens.wille@gmail.com'],
|
13
|
+
:license => %q{Ruby},
|
14
|
+
:homepage => :blackwinter,
|
15
|
+
:extra_files => FileList['info/*'].to_a,
|
16
|
+
:dependencies => %w[],
|
17
|
+
:extension => {
|
18
|
+
:name => 'filemagic',
|
19
|
+
:ext_dir => 'ext',
|
20
|
+
:lib_dir => 'lib',
|
21
|
+
:cross_compile => false
|
22
|
+
}
|
22
23
|
}
|
23
24
|
}}
|
24
25
|
rescue LoadError => err
|
data/ext/filemagic.c
CHANGED
@@ -32,7 +32,8 @@ rb_magic_new(int argc, VALUE *argv, VALUE class) {
|
|
32
32
|
args[1] = rb_hash_new();
|
33
33
|
}
|
34
34
|
|
35
|
-
args[0] = rb_magic_flags_to_int(argc, argv);
|
35
|
+
args[0] = rb_magic_flags_to_int(rb_ary_new4(argc, argv));
|
36
|
+
|
36
37
|
if ((cookie = magic_open(NUM2INT(args[0]))) == NULL) {
|
37
38
|
rb_fatal("out of memory");
|
38
39
|
}
|
@@ -165,7 +166,7 @@ rb_magic_setflags(VALUE self, VALUE flags) {
|
|
165
166
|
magic_t cookie;
|
166
167
|
|
167
168
|
flags = rb_Array(flags);
|
168
|
-
flags = rb_magic_flags_to_int(
|
169
|
+
flags = rb_magic_flags_to_int(flags);
|
169
170
|
rb_iv_set(self, "_flags", flags);
|
170
171
|
|
171
172
|
GetMagicCookie(self, cookie);
|
@@ -205,13 +206,13 @@ rb_magic_compile(VALUE self, VALUE file) {
|
|
205
206
|
}
|
206
207
|
|
207
208
|
static VALUE
|
208
|
-
rb_magic_flags_to_int(
|
209
|
+
rb_magic_flags_to_int(VALUE ary) {
|
209
210
|
VALUE map = rb_const_get(cFileMagic, rb_intern("FLAGS_BY_SYM"));
|
210
211
|
VALUE f, g;
|
211
212
|
int i = MAGIC_NONE, j;
|
212
213
|
|
213
|
-
for (j = 0; j <
|
214
|
-
f =
|
214
|
+
for (j = 0; j < RARRAY_LEN(ary); j++) {
|
215
|
+
f = rb_ary_entry(ary, j);
|
215
216
|
|
216
217
|
switch (TYPE(f)) {
|
217
218
|
case T_SYMBOL:
|
@@ -222,7 +223,8 @@ rb_magic_flags_to_int(int argc, VALUE *argv) {
|
|
222
223
|
else {
|
223
224
|
f = rb_funcall(f, rb_intern("inspect"), 0);
|
224
225
|
rb_raise(rb_eArgError,
|
225
|
-
"%s: %s",
|
226
|
+
"%s: %s",
|
227
|
+
NIL_P(g) ? "no such flag" : "flag not available",
|
226
228
|
StringValueCStr(f)
|
227
229
|
);
|
228
230
|
break;
|
@@ -269,9 +271,9 @@ rb_magic_free(magic_t cookie) {
|
|
269
271
|
|
270
272
|
void
|
271
273
|
Init_filemagic() {
|
274
|
+
char version[8] = "0";
|
272
275
|
cFileMagic = rb_define_class("FileMagic", rb_cObject);
|
273
276
|
|
274
|
-
char version[8] = "0";
|
275
277
|
#ifdef FILE_VERSION_MAJOR
|
276
278
|
sprintf(version, "%d.%02d", FILE_VERSION_MAJOR, patchlevel);
|
277
279
|
#endif
|
data/ext/filemagic.h
CHANGED
@@ -12,20 +12,17 @@
|
|
12
12
|
#ifndef RSTRING_LEN
|
13
13
|
#define RSTRING_LEN(s) (RSTRING(s)->len)
|
14
14
|
#endif
|
15
|
-
#ifndef RSTRING_PTR
|
16
|
-
#define RSTRING_PTR(s) (RSTRING(s)->ptr)
|
17
|
-
#endif
|
18
15
|
#ifndef RARRAY_LEN
|
19
16
|
#define RARRAY_LEN(s) (RARRAY(s)->len)
|
20
17
|
#endif
|
21
|
-
#ifndef RARRAY_PTR
|
22
|
-
#define RARRAY_PTR(s) (RARRAY(s)->ptr)
|
23
|
-
#endif
|
24
18
|
|
25
19
|
#define GetMagicCookie(obj, cookie) {\
|
26
|
-
if (RTEST(rb_magic_closed_p(obj)))\
|
20
|
+
if (RTEST(rb_magic_closed_p(obj))) {\
|
27
21
|
rb_raise(rb_eRuntimeError, "closed stream");\
|
28
|
-
|
22
|
+
}\
|
23
|
+
else {\
|
24
|
+
Data_Get_Struct((obj), struct magic_set, (cookie));\
|
25
|
+
}\
|
29
26
|
}
|
30
27
|
|
31
28
|
static VALUE cFileMagic, rb_FileMagicError;
|
@@ -42,7 +39,7 @@ static VALUE rb_magic_setflags(VALUE, VALUE);
|
|
42
39
|
static VALUE rb_magic_check(int, VALUE*, VALUE);
|
43
40
|
static VALUE rb_magic_compile(VALUE, VALUE);
|
44
41
|
|
45
|
-
static VALUE rb_magic_flags_to_int(
|
42
|
+
static VALUE rb_magic_flags_to_int(VALUE);
|
46
43
|
static VALUE rb_magic_apply_simple(VALUE, const char*, VALUE);
|
47
44
|
|
48
45
|
static void rb_magic_free(magic_t);
|
data/lib/filemagic.rb
CHANGED
@@ -39,7 +39,7 @@ class FileMagic
|
|
39
39
|
# Map flag values to their names (Integer => :name).
|
40
40
|
FLAGS_BY_INT = FLAGS_BY_SYM.invert.update(0 => :none)
|
41
41
|
|
42
|
-
# Extract "simple" MIME type
|
42
|
+
# Extract "simple" MIME type.
|
43
43
|
SIMPLE_RE = %r{([.\w\/-]+)}
|
44
44
|
|
45
45
|
@fm = Hash.new { |fm, flags|
|
data/lib/filemagic/ext.rb
CHANGED
@@ -62,7 +62,6 @@ class File
|
|
62
62
|
def self.file_type(file, *flags)
|
63
63
|
FileMagic.fm(*flags).file(file.respond_to?(:path) ? file.path : file)
|
64
64
|
rescue FileMagic::FileMagicError
|
65
|
-
nil
|
66
65
|
end
|
67
66
|
|
68
67
|
end
|
@@ -74,7 +73,6 @@ class String
|
|
74
73
|
def self.file_type(string, *flags)
|
75
74
|
FileMagic.fm(*flags).buffer(string)
|
76
75
|
rescue FileMagic::FileMagicError
|
77
|
-
nil
|
78
76
|
end
|
79
77
|
|
80
78
|
end
|
data/lib/filemagic/version.rb
CHANGED
data/test/filemagic_test.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
1
|
require 'test/unit'
|
2
|
-
|
3
|
-
top_dir = File.join(File.dirname(__FILE__), '..')
|
4
|
-
$:.unshift(File.join(top_dir, 'lib'), File.join(top_dir, 'ext'))
|
5
2
|
require 'filemagic'
|
6
3
|
|
7
4
|
class TestFileMagic < Test::Unit::TestCase
|
@@ -10,7 +7,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
10
7
|
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
11
8
|
|
12
9
|
res = fm.file(path_to('pyfile'))
|
13
|
-
assert_equal('
|
10
|
+
assert_equal('Python script, ASCII text executable', res)
|
14
11
|
|
15
12
|
if File.symlink?(path_to('pylink'))
|
16
13
|
res = fm.file(path_to('pylink'))
|
@@ -21,7 +18,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
21
18
|
fm = FileMagic.new(FileMagic::MAGIC_SYMLINK)
|
22
19
|
|
23
20
|
res = fm.file(path_to('pylink'))
|
24
|
-
assert_equal('
|
21
|
+
assert_equal('Python script, ASCII text executable', res)
|
25
22
|
|
26
23
|
fm.close
|
27
24
|
fm = FileMagic.new(FileMagic::MAGIC_SYMLINK | FileMagic::MAGIC_MIME)
|
@@ -33,7 +30,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
33
30
|
fm = FileMagic.new(FileMagic::MAGIC_COMPRESS)
|
34
31
|
|
35
32
|
res = fm.file(path_to('pyfile-compressed.gz'))
|
36
|
-
assert_match(/^
|
33
|
+
assert_match(/^Python script, ASCII text executable \(gzip compressed data, was "pyfile-compressed", from Unix/, res)
|
37
34
|
|
38
35
|
fm.close
|
39
36
|
end
|
@@ -42,12 +39,12 @@ class TestFileMagic < Test::Unit::TestCase
|
|
42
39
|
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
43
40
|
res = fm.buffer("#!/bin/sh\n")
|
44
41
|
fm.close
|
45
|
-
|
42
|
+
assert_equal('POSIX shell script, ASCII text executable', res)
|
46
43
|
end
|
47
44
|
|
48
45
|
def test_check
|
49
46
|
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
50
|
-
res = fm.check(path_to('perl'))
|
47
|
+
res = silence_stderr { fm.check(path_to('perl')) }
|
51
48
|
fm.close
|
52
49
|
assert_equal(0, res)
|
53
50
|
end
|
@@ -67,7 +64,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
67
64
|
block_fm = fm
|
68
65
|
fm.file(path_to('pyfile'))
|
69
66
|
}
|
70
|
-
assert_equal('
|
67
|
+
assert_equal('Python script, ASCII text executable', res)
|
71
68
|
assert block_fm.closed?
|
72
69
|
end
|
73
70
|
|
@@ -100,7 +97,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
100
97
|
def test_mahoro_file
|
101
98
|
fm = FileMagic.new
|
102
99
|
fm.flags = FileMagic::MAGIC_NONE
|
103
|
-
assert_equal('
|
100
|
+
assert_equal('C source, ASCII text', fm.file(path_to('mahoro.c')))
|
104
101
|
end
|
105
102
|
|
106
103
|
def test_mahoro_mime_file
|
@@ -112,7 +109,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
112
109
|
def test_mahoro_buffer
|
113
110
|
fm = FileMagic.new
|
114
111
|
fm.flags = FileMagic::MAGIC_NONE
|
115
|
-
assert_equal('
|
112
|
+
assert_equal('C source, ASCII text', fm.buffer(File.read(path_to('mahoro.c'))))
|
116
113
|
end
|
117
114
|
|
118
115
|
def test_mahoro_mime_buffer
|
@@ -123,7 +120,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
123
120
|
|
124
121
|
def test_mahoro_valid
|
125
122
|
fm = FileMagic.new
|
126
|
-
assert(fm.valid
|
123
|
+
assert(silence_stderr { fm.valid? }, 'Default database was not valid.')
|
127
124
|
end
|
128
125
|
|
129
126
|
# test abbreviating mime types
|
@@ -137,7 +134,7 @@ class TestFileMagic < Test::Unit::TestCase
|
|
137
134
|
fm.simplified = true
|
138
135
|
assert fm.simplified?
|
139
136
|
assert_equal('text/plain', fm.file(path_to('perl')))
|
140
|
-
assert_equal('application/
|
137
|
+
assert_equal('application/msword', fm.file(path_to('excel-example.xls')))
|
141
138
|
end
|
142
139
|
|
143
140
|
# utility methods:
|
@@ -146,4 +143,11 @@ class TestFileMagic < Test::Unit::TestCase
|
|
146
143
|
File.join(dir, file)
|
147
144
|
end
|
148
145
|
|
146
|
+
def silence_stderr
|
147
|
+
require 'nuggets/io/redirect'
|
148
|
+
$stderr.redirect { yield }
|
149
|
+
rescue LoadError
|
150
|
+
yield
|
151
|
+
end
|
152
|
+
|
149
153
|
end
|
metadata
CHANGED
@@ -1,98 +1,85 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-filemagic
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 2
|
10
|
-
version: 0.4.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Travis Whitton
|
14
8
|
- Jens Wille
|
15
9
|
autorequire:
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
|
-
|
19
|
-
date: 2010-09-16 00:00:00 +02:00
|
20
|
-
default_executable:
|
12
|
+
date: 2013-12-19 00:00:00.000000000 Z
|
21
13
|
dependencies: []
|
22
|
-
|
23
14
|
description: Ruby bindings to the magic(4) library
|
24
|
-
email:
|
15
|
+
email:
|
25
16
|
- tinymountain@gmail.com
|
26
|
-
- jens.wille@
|
17
|
+
- jens.wille@gmail.com
|
27
18
|
executables: []
|
28
|
-
|
29
|
-
extensions:
|
19
|
+
extensions:
|
30
20
|
- ext/extconf.rb
|
31
|
-
extra_rdoc_files:
|
32
|
-
- ChangeLog
|
21
|
+
extra_rdoc_files:
|
33
22
|
- README
|
34
|
-
|
23
|
+
- ChangeLog
|
24
|
+
- ext/filemagic.c
|
25
|
+
files:
|
26
|
+
- lib/filemagic.rb
|
35
27
|
- lib/filemagic/ext.rb
|
36
28
|
- lib/filemagic/version.rb
|
37
|
-
-
|
38
|
-
-
|
39
|
-
- ext/filemagic.c
|
40
|
-
- test/pyfile
|
41
|
-
- test/mahoro.c
|
42
|
-
- test/pylink
|
43
|
-
- test/pyfile-compressed.gz
|
44
|
-
- test/perl
|
45
|
-
- test/leaktest.rb
|
46
|
-
- test/filemagic_test.rb
|
47
|
-
- test/excel-example.xls
|
48
|
-
- README
|
29
|
+
- info/example.rb
|
30
|
+
- info/filemagic.rd
|
49
31
|
- ChangeLog
|
32
|
+
- README
|
50
33
|
- Rakefile
|
51
34
|
- TODO
|
52
|
-
- info/filemagic.rd
|
53
|
-
- info/example.rb
|
54
35
|
- ext/extconf.rb
|
55
|
-
|
56
|
-
|
57
|
-
|
36
|
+
- ext/filemagic.c
|
37
|
+
- ext/filemagic.h
|
38
|
+
- test/excel-example.xls
|
39
|
+
- test/filemagic_test.rb
|
40
|
+
- test/leaktest.rb
|
41
|
+
- test/mahoro.c
|
42
|
+
- test/perl
|
43
|
+
- test/pyfile
|
44
|
+
- test/pyfile-compressed.gz
|
45
|
+
- test/pylink
|
46
|
+
homepage: http://github.com/blackwinter/ruby-filemagic
|
47
|
+
licenses:
|
48
|
+
- Ruby
|
49
|
+
metadata: {}
|
50
|
+
post_install_message: |2+
|
58
51
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
- --
|
67
|
-
-
|
52
|
+
ruby-filemagic-0.5.0 [2013-12-19]:
|
53
|
+
|
54
|
+
* Removed usage of +RARRAY_PTR+ (cf. Ruby bug
|
55
|
+
{#8399}[https://bugs.ruby-lang.org/issues/8399]).
|
56
|
+
* Housekeeping.
|
57
|
+
|
58
|
+
rdoc_options:
|
59
|
+
- "--title"
|
60
|
+
- ruby-filemagic Application documentation (v0.5.0)
|
61
|
+
- "--charset"
|
68
62
|
- UTF-8
|
69
|
-
- --
|
70
|
-
|
63
|
+
- "--line-numbers"
|
64
|
+
- "--all"
|
65
|
+
- "--main"
|
66
|
+
- README
|
67
|
+
require_paths:
|
71
68
|
- lib
|
72
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
-
|
74
|
-
requirements:
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
75
71
|
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
version: "0"
|
81
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
|
-
requirements:
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
84
76
|
- - ">="
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
segments:
|
88
|
-
- 0
|
89
|
-
version: "0"
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
90
79
|
requirements: []
|
91
|
-
|
92
|
-
|
93
|
-
rubygems_version: 1.3.7
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 2.1.11
|
94
82
|
signing_key:
|
95
|
-
specification_version:
|
83
|
+
specification_version: 4
|
96
84
|
summary: Ruby bindings to the magic(4) library
|
97
85
|
test_files: []
|
98
|
-
|