ruby-filemagic 0.6.3-x86-mingw32 → 0.7.0-x86-mingw32

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d20bc1073ab09a7cc215701eb87cd7cdf643ddfa
4
- data.tar.gz: b0a2ea38d202e2cd40aa2d0bfe53cdc40152f9e5
3
+ metadata.gz: 1a94b954dacc17ec6921f126b38779adfbe88021
4
+ data.tar.gz: 9f69b3625460f35db9a97b884ca0352fc2094c5e
5
5
  SHA512:
6
- metadata.gz: d10fcb4a1c331dbbf8e3a1d2a67afea62e9f18c81fcaa67d13c4fc5090a506cdbbfef9a992f78d2f9663cbb062dd923d6b7164e66b5f77559adccc253725ed01
7
- data.tar.gz: 8b56e5a69f7069ecf6ad46649ea842865d7810bd29562a429409ad248540db457dda4eb416702b328cca269a6ec9cb19d71a9208f5b52cba795739e9e40b0f3f
6
+ metadata.gz: df5204089d56d663c99bff278b3b0251ea1224cc1e7f70df90398ea0c123a13970663b9b7ac2325c9579aebc9add0a1610b37631afd0253eb02508dd26477a2d
7
+ data.tar.gz: c5d97ddcb3ce2b9f68ea57ff835e331febe88af7936e4a0631f99c3f2ae101e3604a0a57911adcd3080d616bbc03116d8cadcf4cbed414b63c8e78483c787898
@@ -0,0 +1 @@
1
+ Please note that this project is in **maintenance mode**. Bug reports and pull requests are welcome, but only [file](http://www.darwinsys.com/file/) **5.11 or higher** is actually supported.
data/ChangeLog CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  = Revision history for ruby-filemagic
4
4
 
5
+ == 0.7.0 [2015-07-28]
6
+
7
+ * Changed FileMagic#io to optionally rewind input afterwards.
8
+ * New method FileMagic.library_version (+magic_version+).
9
+ * New method FileMagic#descriptor (+magic_descriptor+).
10
+ * New method FileMagic#fd.
11
+ * Added new constants from file 5.23.
12
+
5
13
  == 0.6.3 [2015-02-06]
6
14
 
7
15
  * Fixed build error with Clang (issue #13 by Stan Carver II).
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to filemagic version 0.6.3
5
+ This documentation refers to filemagic version 0.7.0
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -29,10 +29,11 @@ FileMagic extension module. See also libmagic(3), file(1) and magic(4).
29
29
  <tt>check(filename)</tt>:: Checks the validity of entries in the database
30
30
  file passed in as filename
31
31
  <tt>compile(filename)</tt>:: Compiles the database file passed in as filename
32
+ <tt>load(filename)</tt>:: Loads the database file passed in as filename
32
33
  <tt>close()</tt>:: Closes the magic database and frees any memory
33
34
  allocated
34
35
 
35
- === Synospis
36
+ === Synopsis
36
37
 
37
38
  require 'filemagic'
38
39
 
@@ -56,13 +57,22 @@ FileMagic extension module. See also libmagic(3), file(1) and magic(4).
56
57
  mime = FileMagic.mime
57
58
  p mime.flags
58
59
 
60
+ === Environment
61
+
62
+ The environment variable +MAGIC+ can be used to set the default magic file name.
63
+
59
64
  === Installation
60
65
 
61
66
  Install the gem:
62
67
 
63
68
  sudo gem install ruby-filemagic
64
69
 
65
- The file(1) library and headers are required.
70
+ The file(1) library and headers are required:
71
+
72
+ Debian/Ubuntu:: +libmagic-dev+
73
+ Fedora/SuSE:: +file-devel+
74
+ Gentoo:: +sys-libs/libmagic+
75
+ OS X:: <tt>brew install libmagic</tt>
66
76
 
67
77
 
68
78
  == LINKS
@@ -9,6 +9,7 @@ dir_config('gnurx')
9
9
  have_library('gnurx')
10
10
 
11
11
  if have_library('magic', 'magic_open') && have_header('magic.h')
12
+ have_func('magic_version')
12
13
  have_header('file/patchlevel.h')
13
14
  create_makefile('filemagic/ruby_filemagic')
14
15
  else
@@ -1,5 +1,15 @@
1
1
  #include "filemagic.h"
2
2
 
3
+ /* Returns the magic version */
4
+ static VALUE
5
+ rb_magic_version(VALUE klass) {
6
+ char version[8] = "0";
7
+ #ifdef HAVE_MAGIC_VERSION
8
+ RB_MAGIC_SET_VERSION(magic_version() / 100, magic_version() % 100)
9
+ #endif
10
+ return rb_str_new2(version);
11
+ }
12
+
3
13
  /* Returns the magic path */
4
14
  static VALUE
5
15
  rb_magic_getpath(VALUE klass) {
@@ -146,12 +156,15 @@ rb_magic_closed_p(VALUE self) {
146
156
  return rb_attr_get(self, rb_intern("closed"));
147
157
  }
148
158
 
149
- /* Return a string describing file */
159
+ /* Return a string describing the named file */
150
160
  RB_MAGIC_TYPE(file, FILE)
151
161
 
152
162
  /* Return a string describing the string buffer */
153
163
  RB_MAGIC_TYPE(buffer, BUFFER)
154
164
 
165
+ /* Return a string describing the file descriptor */
166
+ RB_MAGIC_TYPE(descriptor, DESCRIPTOR)
167
+
155
168
  /* Get the flags as array of symbols */
156
169
  static VALUE
157
170
  rb_magic_getflags(VALUE self) {
@@ -205,21 +218,23 @@ Init_ruby_filemagic() {
205
218
 
206
219
  rb_define_const(cFileMagic, "MAGIC_VERSION", rb_str_new2(version));
207
220
 
208
- rb_define_singleton_method(cFileMagic, "path", rb_magic_getpath, 0);
209
- rb_define_singleton_method(cFileMagic, "flags", rb_magic_flags, 1);
210
- rb_define_singleton_method(cFileMagic, "new", rb_magic_new, -1);
211
-
212
- rb_define_method(cFileMagic, "initialize", rb_magic_init, -1);
213
- rb_define_method(cFileMagic, "close", rb_magic_close, 0);
214
- rb_define_method(cFileMagic, "closed?", rb_magic_closed_p, 0);
215
- rb_define_method(cFileMagic, "file", rb_magic_file, -1);
216
- rb_define_method(cFileMagic, "buffer", rb_magic_buffer, -1);
217
- rb_define_method(cFileMagic, "flags", rb_magic_getflags, 0);
218
- rb_define_method(cFileMagic, "flags=", rb_magic_setflags, 1);
219
- rb_define_method(cFileMagic, "list", rb_magic_list, -1);
220
- rb_define_method(cFileMagic, "load", rb_magic_load, -1);
221
- rb_define_method(cFileMagic, "check", rb_magic_check, -1);
222
- rb_define_method(cFileMagic, "compile", rb_magic_compile, -1);
221
+ rb_define_singleton_method(cFileMagic, "library_version", rb_magic_version, 0);
222
+ rb_define_singleton_method(cFileMagic, "path", rb_magic_getpath, 0);
223
+ rb_define_singleton_method(cFileMagic, "flags", rb_magic_flags, 1);
224
+ rb_define_singleton_method(cFileMagic, "new", rb_magic_new, -1);
225
+
226
+ rb_define_method(cFileMagic, "initialize", rb_magic_init, -1);
227
+ rb_define_method(cFileMagic, "close", rb_magic_close, 0);
228
+ rb_define_method(cFileMagic, "closed?", rb_magic_closed_p, 0);
229
+ rb_define_method(cFileMagic, "file", rb_magic_file, -1);
230
+ rb_define_method(cFileMagic, "buffer", rb_magic_buffer, -1);
231
+ rb_define_method(cFileMagic, "descriptor", rb_magic_descriptor, -1);
232
+ rb_define_method(cFileMagic, "flags", rb_magic_getflags, 0);
233
+ rb_define_method(cFileMagic, "flags=", rb_magic_setflags, 1);
234
+ rb_define_method(cFileMagic, "list", rb_magic_list, -1);
235
+ rb_define_method(cFileMagic, "load", rb_magic_load, -1);
236
+ rb_define_method(cFileMagic, "check", rb_magic_check, -1);
237
+ rb_define_method(cFileMagic, "compile", rb_magic_compile, -1);
223
238
 
224
239
  rb_alias(cFileMagic, rb_intern("valid?"), rb_intern("check"));
225
240
 
@@ -267,6 +282,15 @@ Init_ruby_filemagic() {
267
282
  #ifdef MAGIC_APPLE
268
283
  rb_define_const(cFileMagic, "MAGIC_APPLE", INT2FIX(MAGIC_APPLE));
269
284
  #endif
285
+ #ifdef MAGIC_EXTENSION
286
+ rb_define_const(cFileMagic, "MAGIC_EXTENSION", INT2FIX(MAGIC_EXTENSION));
287
+ #endif
288
+ #ifdef MAGIC_COMPRESS_TRANSP
289
+ rb_define_const(cFileMagic, "MAGIC_COMPRESS_TRANSP", INT2FIX(MAGIC_COMPRESS_TRANSP));
290
+ #endif
291
+ #ifdef MAGIC_NODESC
292
+ rb_define_const(cFileMagic, "MAGIC_NODESC", INT2FIX(MAGIC_NODESC));
293
+ #endif
270
294
  #ifdef MAGIC_NO_CHECK_COMPRESS
271
295
  rb_define_const(cFileMagic, "MAGIC_NO_CHECK_COMPRESS", INT2FIX(MAGIC_NO_CHECK_COMPRESS));
272
296
  #endif
@@ -18,19 +18,18 @@
18
18
  }\
19
19
  }
20
20
 
21
- #define RB_MAGIC_TYPE_FILE magic_file(ms, str)
22
- #define RB_MAGIC_TYPE_BUFFER magic_buffer(ms, str, RSTRING_LEN(arg))
21
+ #define RB_MAGIC_TYPE_FILE magic_file(ms, StringValuePtr(arg))
22
+ #define RB_MAGIC_TYPE_BUFFER magic_buffer(ms, StringValuePtr(arg), RSTRING_LEN(arg))
23
+ #define RB_MAGIC_TYPE_DESCRIPTOR magic_descriptor(ms, NUM2INT(arg))
23
24
 
24
25
  #define RB_MAGIC_TYPE(what, WHAT) \
25
26
  static VALUE \
26
27
  rb_magic_##what(int argc, VALUE *argv, VALUE self) {\
27
28
  VALUE arg, simple, res;\
28
- const char *str, *type;\
29
+ const char *type;\
29
30
  magic_t ms;\
30
31
  \
31
32
  rb_scan_args(argc, argv, "11", &arg, &simple);\
32
- \
33
- str = StringValuePtr(arg);\
34
33
  GetMagicSet(self, ms);\
35
34
  \
36
35
  if ((type = RB_MAGIC_TYPE_##WHAT) == NULL) {\
@@ -72,6 +71,7 @@ rb_magic_##what(int argc, VALUE *argv, VALUE self) {\
72
71
 
73
72
  static VALUE cFileMagic, rb_FileMagicError;
74
73
 
74
+ static VALUE rb_magic_version(VALUE);
75
75
  static VALUE rb_magic_getpath(VALUE);
76
76
  static VALUE rb_magic_flags(VALUE, VALUE);
77
77
 
@@ -84,6 +84,7 @@ static VALUE rb_magic_closed_p(VALUE);
84
84
 
85
85
  static VALUE rb_magic_file(int, VALUE*, VALUE);
86
86
  static VALUE rb_magic_buffer(int, VALUE*, VALUE);
87
+ static VALUE rb_magic_descriptor(int, VALUE*, VALUE);
87
88
 
88
89
  static VALUE rb_magic_getflags(VALUE);
89
90
  static VALUE rb_magic_setflags(VALUE, VALUE);
@@ -9,6 +9,11 @@ require 'filemagic/version'
9
9
 
10
10
  class FileMagic
11
11
 
12
+ unless ENV['MAGIC_SILENCE_VERSION_CHECK'] || MAGIC_VERSION == library_version
13
+ warn "#{self} v#{VERSION}: compiled magic version [#{MAGIC_VERSION}] " <<
14
+ "does not match with shared library magic version [#{library_version}]"
15
+ end
16
+
12
17
  DEFAULT_MAGIC = __FILE__.sub(/\.rb\z/, '/magic.mgc')
13
18
 
14
19
  ENV['MAGIC'] ||= DEFAULT_MAGIC unless path
@@ -20,15 +25,18 @@ class FileMagic
20
25
  :symlink, # Follow symlinks
21
26
  :compress, # Check inside compressed files
22
27
  :devices, # Look at the contents of devices
23
- :mime_type, # Return only the MIME type
28
+ :mime_type, # Return the MIME type
24
29
  :continue, # Return all matches
25
30
  :check, # Print warnings to stderr
26
31
  :preserve_atime, # Restore access time on exit
27
- :raw, # Don't translate unprint chars
32
+ :raw, # Don't convert unprintable chars
28
33
  :error, # Handle ENOENT etc as real errors
29
- :mime_encoding, # Return only the MIME encoding
34
+ :mime_encoding, # Return the MIME encoding
30
35
  :mime, # MAGIC_MIME_TYPE | MAGIC_MIME_ENCODING
31
- :apple, # Return the Apple creator and type
36
+ :apple, # Return the Apple creator/type
37
+ :extension, # Return a /-separated list of extensions
38
+ :compress_transp, # Check inside compressed files but not report compression
39
+ :nodesc, # MAGIC_EXTENSION | MAGIC_MIME | MAGIC_APPLE
32
40
  :no_check_compress, # Don't check for compressed files
33
41
  :no_check_tar, # Don't check for tar files
34
42
  :no_check_soft, # Don't check magic entries
@@ -36,7 +44,7 @@ class FileMagic
36
44
  :no_check_elf, # Don't check for elf details
37
45
  :no_check_text, # Don't check for text files
38
46
  :no_check_cdf, # Don't check for cdf files
39
- :no_check_tokens, # Don't check ascii/tokens
47
+ :no_check_tokens, # Don't check tokens
40
48
  :no_check_encoding, # Don't check text encodings
41
49
  :no_check_builtin, # No built-in tests; only consult the magic file
42
50
 
@@ -131,8 +139,15 @@ class FileMagic
131
139
  @simplified
132
140
  end
133
141
 
134
- def io(io, length = 8)
142
+ def io(io, length = 8, rewind = false)
143
+ pos = io.pos if rewind
135
144
  buffer(io.read(length))
145
+ ensure
146
+ io.pos = pos if pos
147
+ end
148
+
149
+ def fd(fd)
150
+ descriptor(fd.respond_to?(:fileno) ? fd.fileno : fd)
136
151
  end
137
152
 
138
153
  def inspect
Binary file
@@ -3,8 +3,8 @@ class FileMagic
3
3
  module Version
4
4
 
5
5
  MAJOR = 0
6
- MINOR = 6
7
- TINY = 3
6
+ MINOR = 7
7
+ TINY = 0
8
8
 
9
9
  class << self
10
10
 
@@ -59,6 +59,55 @@ magic file from #{FileMagic.path}
59
59
  assert_equal('POSIX shell script, ASCII text executable', res)
60
60
  end
61
61
 
62
+ def test_descriptor
63
+ fm = FileMagic.new(FileMagic::MAGIC_NONE)
64
+
65
+ python_script = match_version(
66
+ 0 => 'a python script, ASCII text executable',
67
+ 5.11 => 'Python script, ASCII text executable'
68
+ )
69
+
70
+ fd_for('pyfile') { |fd|
71
+ res = fm.descriptor(fd)
72
+ assert_equal(python_script, res)
73
+ }
74
+
75
+ if File.symlink?(path_to('pylink'))
76
+ fd_for('pylink') { |fd|
77
+ res = fm.descriptor(fd)
78
+ assert_equal(python_script, res.strip)
79
+ }
80
+ end
81
+
82
+ fm.close
83
+ fm = FileMagic.new(FileMagic::MAGIC_SYMLINK)
84
+
85
+ fd_for('pylink') { |fd|
86
+ res = fm.descriptor(fd)
87
+ assert_equal(python_script, res)
88
+ }
89
+
90
+ fm.close
91
+ fm = FileMagic.new(FileMagic::MAGIC_SYMLINK | FileMagic::MAGIC_MIME)
92
+
93
+ fd_for('pylink') { |fd|
94
+ res = fm.descriptor(fd)
95
+ assert_equal('text/plain; charset=us-ascii', res)
96
+ }
97
+
98
+ fm.close
99
+ fm = FileMagic.new(FileMagic::MAGIC_COMPRESS)
100
+
101
+ fd_for('pyfile-compressed.gz') { |fd|
102
+ res = fm.descriptor(fd)
103
+ gzip_compressed = 'gzip compressed data, was "pyfile-compressed"'
104
+ assert_match(Gem.win_platform? ? /^#{gzip_compressed}/ :
105
+ /^#{python_script} \(#{gzip_compressed}/, res)
106
+ }
107
+
108
+ fm.close
109
+ end
110
+
62
111
  def test_check
63
112
  return if Gem.win_platform?
64
113
  fm = FileMagic.new(FileMagic::MAGIC_NONE)
@@ -213,6 +262,12 @@ magic file from #{FileMagic.path}
213
262
  File.join(dir, file)
214
263
  end
215
264
 
265
+ def fd_for(file)
266
+ File.open(path_to(file)) { |f| yield f.fileno }
267
+ rescue Errno::EBADF => err
268
+ warn err.to_s
269
+ end
270
+
216
271
  def silence_stderr
217
272
  require 'nuggets/io/redirect'
218
273
  $stderr.redirect { yield }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-filemagic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.7.0
5
5
  platform: x86-mingw32
6
6
  authors:
7
7
  - Travis Whitton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-06 00:00:00.000000000 Z
12
+ date: 2015-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hen
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '0.8'
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.8.1
23
+ version: 0.8.2
24
24
  type: :development
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +30,7 @@ dependencies:
30
30
  version: '0.8'
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.1
33
+ version: 0.8.2
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rake
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -82,6 +82,7 @@ extra_rdoc_files:
82
82
  - ChangeLog
83
83
  - ext/filemagic/filemagic.c
84
84
  files:
85
+ - CONTRIBUTING.md
85
86
  - ChangeLog
86
87
  - README
87
88
  - Rakefile
@@ -113,13 +114,17 @@ licenses:
113
114
  metadata: {}
114
115
  post_install_message: |2+
115
116
 
116
- ruby-filemagic-0.6.3 [2015-02-06]:
117
+ ruby-filemagic-0.7.0 [2015-07-28]:
117
118
 
118
- * Fixed build error with Clang (issue #13 by Stan Carver II).
119
+ * Changed FileMagic#io to optionally rewind input afterwards.
120
+ * New method FileMagic.library_version (+magic_version+).
121
+ * New method FileMagic#descriptor (+magic_descriptor+).
122
+ * New method FileMagic#fd.
123
+ * Added new constants from file 5.23.
119
124
 
120
125
  rdoc_options:
121
126
  - "--title"
122
- - ruby-filemagic Application documentation (v0.6.3)
127
+ - ruby-filemagic Application documentation (v0.7.0)
123
128
  - "--charset"
124
129
  - UTF-8
125
130
  - "--line-numbers"
@@ -140,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
145
  version: '0'
141
146
  requirements: []
142
147
  rubyforge_project:
143
- rubygems_version: 2.4.5
148
+ rubygems_version: 2.4.8
144
149
  signing_key:
145
150
  specification_version: 4
146
151
  summary: Ruby bindings to the magic(4) library