mahoro 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8e34a0f3eb2e9f8f9cebd7e149fc91188fe75cd8
4
+ data.tar.gz: b47106cf51c0f7aedab8a471c292f90684a301e0
5
+ SHA512:
6
+ metadata.gz: d64e5576704b93552e4f89b2712ae9890862df5e3ed479ecd8d3d2906765e2db263e1ca7f2f85e563043550b4aacaad98013240498b60cf6d2f977ba8448b48b
7
+ data.tar.gz: d3a9f511611377d7561751d317a015a9ad964245731d15ea130453db0ac2143c90fe4db68a1652d0cb222b0d0a91927f6a7657fa0038e1c71341c9e5bd5a8aa4
@@ -0,0 +1,8 @@
1
+ *.gem
2
+ *.log
3
+ *.o
4
+ *.so
5
+ Makefile
6
+ /doc
7
+ /.ri
8
+ *.tar.gz
@@ -0,0 +1,63 @@
1
+ # maintainer jobs here, not needed for normal users
2
+ all::
3
+
4
+ .ri/created.rid: ext/mahoro/mahoro.c lib/mahoro/thread_safe.rb
5
+ rdoc --ri -o $(@D) $^
6
+
7
+ order =
8
+ order += Mahoro
9
+ order += Mahoro.new
10
+ order += Mahoro\#file
11
+ order += Mahoro\#buffer
12
+ order += Mahoro\#flags=
13
+ order += Mahoro\#valid?
14
+ order += Mahoro\#compile
15
+ order += Mahoro.compile
16
+ order += Mahoro::ThreadSafe
17
+
18
+ www/API: .ri/created.rid
19
+ ( \
20
+ for i in $(order); \
21
+ do \
22
+ ri --no-standard-docs -T -d .ri -w 80 "$$i" \
23
+ | col -b \
24
+ | grep -vF $(CURDIR)/.ri; \
25
+ done \
26
+ ) > $@
27
+
28
+ www/API.gz: www/API
29
+ gzip < $< > $@
30
+ touch -r $< $@
31
+
32
+ www/README.gz: README
33
+ install -p -m 644 README www/
34
+ gzip < $< > $@
35
+ touch -r $< $@
36
+
37
+ all:: www/API.gz www/README.gz
38
+ clean:
39
+ $(RM) www/*
40
+
41
+ ifneq ($(VERSION),)
42
+ gem := mahoro-$(VERSION).gem
43
+ $(gem): $(shell git ls-files)
44
+ VERSION=$(VERSION) gem build mahoro.gemspec
45
+
46
+ tgz := mahoro-$(VERSION).tar.gz
47
+ $(tgz): $(shell git ls-files)
48
+ git archive --format=tar --prefix=mahoro-$(VERSION)/ HEAD | \
49
+ gzip -9 > $@
50
+ else
51
+ gem tgz:
52
+ @echo >&2 error VERSION not defined
53
+ @false
54
+ endif
55
+
56
+ package: $(gem) $(tgz)
57
+
58
+ RSYNC = rsync
59
+ publish_doc: all
60
+ $(RSYNC) --delete --exclude .gitignore -av \
61
+ www/ dcvr:/srv/bogomips/mahoro/
62
+
63
+ .PHONY: publish_doc package
data/INSTALL CHANGED
@@ -1,5 +1,27 @@
1
- INSTALL
2
- =========
1
+ libmagic installation
2
+ =====================
3
+
4
+ Mahoro is a wrapper around libmagic[1], so it needs the libmagic
5
+ development headers and libraries to run. If your operating system
6
+ provides libmagic development libraries and headers, you will not need
7
+ the "--with-magic*" command-line options below.
8
+
9
+ For Debian-based systems: apt-get install libmagic-dev
10
+ For CentOS 6.x or similar RPM-based systems: yum install file-devel
11
+ For CentOS 5.x or similar RPM-based systems: yum install file
12
+
13
+ [1] - https://en.wikipedia.org/wiki/Libmagic
14
+
15
+ INSTALL (from RubyGems)
16
+ =======================
17
+
18
+ The installation is simple, install libmagic and type the following:
19
+
20
+ # gem install mahoro -- --with-magic-include=/path/to/include \
21
+ --with-magic-lib=/path/to/lib
22
+
23
+ INSTALL (from tarball)
24
+ ======================
3
25
 
4
26
  The installation is simple, install libmagic and type the following.
5
27
 
data/README ADDED
@@ -0,0 +1,16 @@
1
+ Mahoro - a Ruby interface to libmagic
2
+
3
+ An interface to libmagic to determine file types using "magic" numbers.
4
+ This can be used in place of calling the file(1) command in Ruby scripts.
5
+ Shu-yu Guo is the original author but all maintenance is handled by
6
+ Eric Wong nowadays.
7
+
8
+ documentation: http://bogomips.org/mahoro/API
9
+ source: git clone git://bogomips.org/mahoro.git
10
+ cgit web viewer: http://bogomips.org/mahoro.git/
11
+ mailing list: mahoro@librelist.org (plain-text only, please)
12
+ maintainer: Eric Wong <normalperson@yhbt.net>
13
+ libmagic: https://en.wikipedia.org/wiki/Libmagic
14
+
15
+ Feel free to contact Eric Wong privately via plain-text email if you're not
16
+ comfortable with the public mailing list.
@@ -2,6 +2,8 @@ require 'mkmf'
2
2
 
3
3
  dir_config('magic')
4
4
  have_library('magic', 'magic_open')
5
+ have_func('rb_thread_call_without_gvl')
6
+ have_func('rb_thread_blocking_region')
5
7
  create_makefile('mahoro')
6
8
 
7
9
  # arch-tag: extconf
@@ -0,0 +1,565 @@
1
+ /*
2
+ * This file is Public Domain.
3
+ *
4
+ * Note: The current maintainer (Eric Wong) respects and preserves the
5
+ * original coding style of the original author (Shu-yu Guo) in case
6
+ * he ever chooses to return to this project.
7
+ */
8
+
9
+ #include <ruby.h>
10
+ #include <magic.h>
11
+ #include "nogvl_compat.h"
12
+
13
+ #ifndef RSTRING_LEN
14
+ # define RSTRING_LEN(s)->len
15
+ #endif
16
+ #ifndef RSTRING_PTR
17
+ # define RSTRING_PTR(s)->ptr
18
+ #endif
19
+
20
+ static VALUE eMahoroError;
21
+ static ID id_to_path;
22
+
23
+ struct nogvl_args {
24
+ magic_t cookie;
25
+ union {
26
+ const char *path;
27
+ int fd;
28
+ } as;
29
+ };
30
+
31
+ /* :nodoc: called automatically by GC */
32
+ static void
33
+ mahoro_free(ptr)
34
+ void *ptr;
35
+ {
36
+ if (ptr)
37
+ magic_close((magic_t)ptr);
38
+ }
39
+
40
+ /* :nodoc: called automatically on Mahoro#initialize */
41
+ static VALUE
42
+ mahoro_allocate(klass)
43
+ VALUE klass;
44
+ {
45
+ return Data_Wrap_Struct(klass, 0, mahoro_free, 0);
46
+ }
47
+
48
+ static void *
49
+ nogvl_load(ptr)
50
+ void *ptr;
51
+ {
52
+ struct nogvl_args *args = ptr;
53
+
54
+ return magic_load(args->cookie, args->as.path) ? ptr : NULL;
55
+ }
56
+
57
+ /*
58
+ * call-seq:
59
+ * Mahoro.new(flags = Mahoro::NONE, path = nil) -> mahoro_obj
60
+ *
61
+ * Create and initialize a new Mahoro object.
62
+ * +flags+ may be one or more of any combination of the Mahoro:: constants
63
+ * supported by Mahoro#flags=.
64
+ * +path+ (if not nil) is a colon-separated list of database files, see
65
+ * Mahoro#load.
66
+ *
67
+ * If +path+ is not given (or nil), the default database is used.
68
+ * Consult your libmagic(3) documentation for the location of that file
69
+ * as it varies by installation.
70
+ */
71
+ static VALUE
72
+ mahoro_initialize(argc, argv, self)
73
+ int argc;
74
+ VALUE *argv, self;
75
+ {
76
+ int flags = MAGIC_NONE;
77
+ struct nogvl_args args;
78
+ VALUE vpath, vflags;
79
+
80
+ args.as.path = NULL;
81
+
82
+ switch(rb_scan_args(argc, argv, "02", &vflags, &vpath)) {
83
+ case 2:
84
+ if(!NIL_P(vpath)) {
85
+ args.as.path = StringValueCStr(vpath);
86
+ }
87
+ /* fallthrough */
88
+ case 1:
89
+ flags = FIX2INT(vflags);
90
+ break;
91
+ }
92
+
93
+ if(!(args.cookie = magic_open(flags))) {
94
+ rb_raise(eMahoroError, "failed to initialize magic cookie");
95
+ }
96
+
97
+ if(NOGVL(nogvl_load, &args, RUBY_UBF_IO, NULL)) {
98
+ rb_raise(eMahoroError, "failed to load database: %s",
99
+ magic_error(args.cookie));
100
+ }
101
+
102
+ DATA_PTR(self) = args.cookie;
103
+
104
+ return self;
105
+ }
106
+
107
+ static void *
108
+ nogvl_file(ptr)
109
+ void *ptr;
110
+ {
111
+ struct nogvl_args *args = ptr;
112
+
113
+ return (void *)magic_file(args->cookie, args->as.path);
114
+ }
115
+
116
+ /*
117
+ * call-seq:
118
+ * mahoro_obj.file(filename) -> String
119
+ *
120
+ * Returns a textual description of the contents of the +filename+ given.
121
+ * Use Mahoro#buffer instead of this method if the contents of your
122
+ * file is already in memory.
123
+ * Raises Mahoro::Error on failed lookups.
124
+ */
125
+ static VALUE
126
+ mahoro_file(self, path)
127
+ VALUE self, path;
128
+ {
129
+ const char *msg;
130
+ struct nogvl_args args;
131
+
132
+ args.cookie = (magic_t)DATA_PTR(self);
133
+
134
+ /* Pathname objects may be transformed via #to_path */
135
+ if (rb_respond_to(path, id_to_path))
136
+ path = rb_funcall(path, id_to_path, 0);
137
+
138
+ args.as.path = StringValueCStr(path);
139
+
140
+ if(!(msg = NOGVL(nogvl_file, &args, RUBY_UBF_IO, NULL))) {
141
+ rb_raise(eMahoroError, "failed lookup: %s",
142
+ magic_error(args.cookie));
143
+ }
144
+
145
+ return rb_str_new2(msg);
146
+ }
147
+
148
+ /*
149
+ * call-seq:
150
+ * mahoro_obj.buffer(buffer) -> String
151
+ *
152
+ * Returns a textual description of the contents of the +buffer+ given.
153
+ * +buffer+ should be a String object.
154
+ * Use Mahoro#file instead of this method if the contents is not already
155
+ * in memory (and possibly too large to fit into memory).
156
+ * Raises Mahoro::Error on failed lookups.
157
+ */
158
+ static VALUE
159
+ mahoro_buffer(self, input)
160
+ VALUE self, input;
161
+ {
162
+ const char *msg;
163
+ magic_t cookie = (magic_t)DATA_PTR(self);
164
+
165
+ StringValue(input);
166
+
167
+ if(!(msg = magic_buffer(cookie, RSTRING_PTR(input),
168
+ RSTRING_LEN(input)))) {
169
+ rb_raise(eMahoroError, "failed lookup: %s", magic_error(cookie));
170
+ }
171
+
172
+ return rb_str_new2(msg);
173
+ }
174
+
175
+ /*
176
+ * call-seq:
177
+ * mahoro_obj.flags = flags
178
+ *
179
+ * Change the behavior of an already-initialized Mahoro object. The
180
+ * behavior of a Mahoro object is specified at load time, but may be
181
+ * changed after-the-fact.
182
+ * +flags+ is a bitwise (OR) mask of one or more of the following constants
183
+ * in the Mahoro namespace:
184
+ *
185
+ * - APPLE
186
+ * - CHECK
187
+ * - COMPRESS
188
+ * - CONTINUE
189
+ * - DEBUG
190
+ * - DEVICES
191
+ * - ERROR
192
+ * - MIME
193
+ * - MIME_ENCODING
194
+ * - MIME_TYPE
195
+ * - NONE
196
+ * - NO_CHECK_APPTYPE
197
+ * - NO_CHECK_COMPRESS
198
+ * - NO_CHECK_ELF
199
+ * - NO_CHECK_ENCODING
200
+ * - NO_CHECK_SOFT
201
+ * - NO_CHECK_TAR
202
+ * - NO_CHECK_TEXT
203
+ * - NO_CHECK_TOKENS
204
+ * - PRESERVE_ATIME
205
+ * - RAW
206
+ * - SYMLINK
207
+ */
208
+ static VALUE
209
+ mahoro_set_flags(self, flags)
210
+ VALUE self, flags;
211
+ {
212
+ magic_t cookie = (magic_t)DATA_PTR(self);
213
+
214
+ return INT2FIX(magic_setflags(cookie, FIX2INT(flags)));
215
+ }
216
+
217
+ static void *
218
+ nogvl_check(ptr)
219
+ void *ptr;
220
+ {
221
+ struct nogvl_args *args = ptr;
222
+
223
+ return magic_check(args->cookie, args->as.path) ? ptr : NULL;
224
+ }
225
+
226
+ /*
227
+ * call-seq:
228
+ * mahoro_obj.check(path = nil) -> true or false
229
+ *
230
+ * This is used to check the validity of entries in the colon separated
231
+ * database files passed in as +path+. If +path+ is not passed (or nil),
232
+ * this will check the default database.
233
+ */
234
+ static VALUE
235
+ mahoro_check(argc, argv, self)
236
+ int argc;
237
+ VALUE *argv, self;
238
+ {
239
+ struct nogvl_args args;
240
+ VALUE vpath;
241
+
242
+ args.cookie = (magic_t)DATA_PTR(self);
243
+ args.as.path = NULL;
244
+
245
+ switch(rb_scan_args(argc, argv, "01", &vpath)) {
246
+ case 1:
247
+ if(!NIL_P(vpath)) {
248
+ args.as.path = StringValueCStr(vpath);
249
+ }
250
+ break;
251
+ }
252
+
253
+ if(!NOGVL(nogvl_check, &args, RUBY_UBF_IO, 0)) {
254
+ return Qtrue;
255
+ } else {
256
+ return Qfalse;
257
+ }
258
+ }
259
+
260
+ static void *
261
+ nogvl_compile(ptr)
262
+ void *ptr;
263
+ {
264
+ struct nogvl_args *args = ptr;
265
+
266
+ return magic_compile(args->cookie, args->as.path) ? ptr : NULL;
267
+ }
268
+
269
+ /*
270
+ * call-seq:
271
+ * mahoro_obj.compile(path) -> true
272
+ *
273
+ * Compile the the colon separated list of database files passed in as +path+.
274
+ * It returns true on success and raises Mahoro::Error on failure.
275
+ * Compiled files created are named from the +File.basename+ of each file
276
+ * argument with ".mgc" appended to it.
277
+ *
278
+ * There is no need to use this function if you are using the default magic(5)
279
+ * database on your operating system. This is only needed if you require
280
+ * additional magic not in the default magic database.
281
+ *
282
+ * Users of this method are likely to need Mahoro#load (and vice-versa).
283
+ */
284
+ static VALUE
285
+ mahoro_compile(self, path)
286
+ VALUE self, path;
287
+ {
288
+ struct nogvl_args args;
289
+
290
+ args.cookie = (magic_t)DATA_PTR(self);
291
+ args.as.path = StringValueCStr(path);
292
+
293
+ if(NOGVL(nogvl_compile, &args, RUBY_UBF_IO, NULL)) {
294
+ rb_raise(eMahoroError, "failed compile: %s",
295
+ magic_error(args.cookie));
296
+ }
297
+
298
+ return Qtrue;
299
+ }
300
+
301
+ /*
302
+ * call-seq:
303
+ * Mahoro.compile(path) -> true
304
+ *
305
+ * This is a wrapper around the Mahoro#compile instance method, but does not
306
+ * require an existing Mahoro object. Use the instance method unless you only
307
+ * need to test the validity of a magic(5) database.
308
+ */
309
+ static VALUE
310
+ mahoro_s_compile(klass, path)
311
+ VALUE klass, path;
312
+ {
313
+ VALUE m = rb_funcall(klass, rb_intern("new"), 0, 0);
314
+
315
+ return mahoro_compile(m, path);
316
+ }
317
+
318
+ /*
319
+ * call-seq:
320
+ * mahoro_obj.load(path) -> mahoro_obj
321
+ *
322
+ * Used to load the the colon-separated list of database files (+path+).
323
+ * The ".mgc" suffix will be added to each filename where appropriate.
324
+ * This will raise Mahoro::Error on failure.
325
+ *
326
+ * There is no need to use this function if you are using the default magic(5)
327
+ * database on your operating system. This is only needed if you require
328
+ * additional magic not in the default magic database.
329
+ *
330
+ * The default database file is named by the MAGIC environment variable.
331
+ * Consult your libmagic installation documentation for the location of
332
+ * your default database file name.
333
+ *
334
+ * Users of this method are likely to need Mahoro#compile (and vice-versa).
335
+ */
336
+ static VALUE
337
+ mahoro_load(self, path)
338
+ VALUE self, path;
339
+ {
340
+ struct nogvl_args args;
341
+
342
+ args.cookie = (magic_t)DATA_PTR(self);
343
+ args.as.path = StringValueCStr(path);
344
+
345
+ if(NOGVL(nogvl_load, &args, RUBY_UBF_IO, NULL)) {
346
+ rb_raise(eMahoroError, "failed load: %s",
347
+ magic_error(args.cookie));
348
+ }
349
+
350
+ return self;
351
+ }
352
+
353
+ void Init_mahoro(void)
354
+ {
355
+ VALUE cMahoro;
356
+ /*
357
+ * Mahoro is a simple interface to libmagic.
358
+ *
359
+ * Common use cases:
360
+ *
361
+ * # initialize a Mahoro object for reading MIME types
362
+ * mahoro_obj = Mahoro.new(Mahoro::MIME)
363
+ *
364
+ * # get the MIME type of a file on disk
365
+ * # This is ideal for large files which you do not need to
366
+ * # read in their entirety.
367
+ * mahoro_obj.file('/path/to/file.c') -> 'text/x-c'
368
+ *
369
+ * # get the MIME type of a string buffer
370
+ * # This is only ideal if you already have the buffer in
371
+ * # memory or intend to process it soon
372
+ * str = File.read('/path/to/file.c')
373
+ * mahoro_obj.buffer(str) -> 'text/x-c'
374
+ *
375
+ * # switch the Mahoro object to return an ASCII description
376
+ * mahoro_obj.flags = Mahoro::NONE
377
+ *
378
+ * # Similar to the above example, but the Mahoro object
379
+ * # now returns a textual description
380
+ * mahoro_obj.file('/path/to/file.c') -> 'ASCII C program text'
381
+ *
382
+ * # Similar to the above example, but the Mahoro object
383
+ * # now returns a textual description
384
+ * str = File.read('/path/to/file.c')
385
+ * mahoro_obj.buffer(str) -> 'ASCII C program text'
386
+ *
387
+ * Mahoro is not thread-safe by default, see Mahoro::ThreadSafe for
388
+ * making this module thread-safe.
389
+ *
390
+ * More information about libmagic:
391
+ * https://en.wikipedia.org/wiki/Libmagic
392
+ *
393
+ * Source code is available via git:
394
+ * git clone git://bogomips.org/mahoro.git
395
+ *
396
+ * And viewable with a web browser via cgit:
397
+ * http://bogomips.org/mahoro.git
398
+ *
399
+ * Eric Wong is the current maintainer of Mahoro.
400
+ * Plain-text comments, questions, bug reports, patches and
401
+ * pull requests are all highly welcome on the public mailing list:
402
+ * mahoro@librelist.org
403
+ *
404
+ * You may contact Eric privately at normalperson@yhbt.net
405
+ *
406
+ * Please generate patches using the "git format-patch" command.
407
+ * Use of "git send-email" to send a patch is recommended.
408
+ * For reviewed patches, you may also send a pull request formatted
409
+ * using the "git request-pull" command.
410
+ *
411
+ * Do not expect Eric to read HTML email under any circumstances.
412
+ */
413
+ cMahoro = rb_define_class("Mahoro", rb_cObject);
414
+ eMahoroError = rb_define_class_under(cMahoro, "Error", rb_eStandardError);
415
+
416
+ /* No special handling, the default */
417
+ rb_define_const(cMahoro, "NONE", INT2FIX(MAGIC_NONE));
418
+
419
+ /* print debugging messages to stderr */
420
+ rb_define_const(cMahoro, "DEBUG", INT2FIX(MAGIC_DEBUG));
421
+
422
+ /* Follow symlinks */
423
+ rb_define_const(cMahoro, "SYMLINK", INT2FIX(MAGIC_SYMLINK));
424
+
425
+ /* Check inside compressed files */
426
+ rb_define_const(cMahoro, "COMPRESS", INT2FIX(MAGIC_COMPRESS));
427
+
428
+ /* Look at the contents of devices */
429
+ rb_define_const(cMahoro, "DEVICES", INT2FIX(MAGIC_DEVICES));
430
+
431
+ #ifdef MAGIC_MIME_TYPE
432
+ /*
433
+ * Return only the MIME type
434
+ * This constant may not be defined on older systems.
435
+ */
436
+ rb_define_const(cMahoro, "MIME_TYPE", INT2FIX(MAGIC_MIME_TYPE));
437
+ #endif
438
+
439
+ /* Return all matches */
440
+ rb_define_const(cMahoro, "CONTINUE", INT2FIX(MAGIC_CONTINUE));
441
+
442
+ /*
443
+ * Check the magic database for consistency and
444
+ * print warnings to stderr
445
+ */
446
+ rb_define_const(cMahoro, "CHECK", INT2FIX(MAGIC_CHECK));
447
+
448
+ /* preserve access time of files analyzed */
449
+ rb_define_const(cMahoro, "PRESERVE_ATIME",
450
+ INT2FIX(MAGIC_PRESERVE_ATIME));
451
+
452
+ /*
453
+ * Don't translate unprintable characters to a \\ooo octal
454
+ * representation
455
+ */
456
+ rb_define_const(cMahoro, "RAW", INT2FIX(MAGIC_RAW));
457
+
458
+ /*
459
+ * Treat operating system errors while trying to open files
460
+ * and follow symlinks as real errors, instead of printing
461
+ * them in the magic buffer.
462
+ */
463
+ rb_define_const(cMahoro, "ERROR", INT2FIX(MAGIC_ERROR));
464
+
465
+ #ifdef MAGIC_MIME_ENCODING
466
+ /*
467
+ * Return a MIME encoding, instead of a textual description.
468
+ * This constant may not be defined on older systems.
469
+ */
470
+ rb_define_const(cMahoro, "MIME_ENCODING", INT2FIX(MAGIC_MIME_ENCODING));
471
+ #endif
472
+
473
+ /* return both MIME type and encoding */
474
+ rb_define_const(cMahoro, "MIME", INT2FIX(MAGIC_MIME));
475
+
476
+ #ifdef MAGIC_APPLE
477
+ /*
478
+ * Return both Apple creator and type.
479
+ * This constant may not be defined on older systems.
480
+ */
481
+ rb_define_const(cMahoro, "APPLE", INT2FIX(MAGIC_APPLE));
482
+ #endif
483
+
484
+ #ifdef MAGIC_NO_CHECK_COMPRESS
485
+ /*
486
+ * Don't check for or inside compressed files.
487
+ * This constant may not be defined on older systems.
488
+ */
489
+ rb_define_const(cMahoro, "NO_CHECK_COMPRESS",
490
+ INT2FIX(MAGIC_NO_CHECK_COMPRESS));
491
+ #endif
492
+
493
+ #ifdef MAGIC_NO_CHECK_TAR
494
+ /*
495
+ * Don't examine tar files.
496
+ * This constant may not be defined on older systems.
497
+ */
498
+ rb_define_const(cMahoro, "NO_CHECK_TAR", INT2FIX(MAGIC_NO_CHECK_TAR));
499
+ #endif
500
+
501
+ #ifdef MAGIC_NO_CHECK_SOFT
502
+ /*
503
+ * Don't consult magic files.
504
+ * This constant may not be defined on older systems.
505
+ */
506
+ rb_define_const(cMahoro, "NO_CHECK_SOFT", INT2FIX(MAGIC_NO_CHECK_SOFT));
507
+ #endif
508
+
509
+ #ifdef MAGIC_NO_CHECK_APPTYPE
510
+ /*
511
+ * Don't check application type (EMX only).
512
+ * This constant may not be defined on older systems.
513
+ */
514
+ rb_define_const(cMahoro, "NO_CHECK_APPTYPE",
515
+ INT2FIX(MAGIC_NO_CHECK_APPTYPE));
516
+ #endif
517
+
518
+ #ifdef MAGIC_NO_CHECK_ELF
519
+ /*
520
+ * Don't check for ELF details.
521
+ * This constant may not be defined on older systems.
522
+ */
523
+ rb_define_const(cMahoro, "NO_CHECK_ELF", INT2FIX(MAGIC_NO_CHECK_ELF));
524
+ #endif
525
+
526
+ #ifdef MAGIC_NO_CHECK_ASCII
527
+ /*
528
+ * Don't check for various types of ASCII text files.
529
+ * This constant may not be defined on older systems.
530
+ */
531
+ rb_define_const(cMahoro, "NO_CHECK_TEXT",
532
+ INT2FIX(MAGIC_NO_CHECK_ASCII));
533
+ #endif
534
+
535
+ #ifdef MAGIC_NO_CHECK_TOKENS
536
+ /*
537
+ * Don't check for known tokens inside ASCII files.
538
+ * This constant may not be defined on older systems.
539
+ */
540
+ rb_define_const(cMahoro, "NO_CHECK_TOKENS",
541
+ INT2FIX(MAGIC_NO_CHECK_TOKENS));
542
+ #endif
543
+
544
+ #ifdef MAGIC_NO_CHECK_ENCODING
545
+ /*
546
+ * Don't check for text encodings.
547
+ * This constant may not be defined on older systems.
548
+ */
549
+ rb_define_const(cMahoro, "NO_CHECK_ENCODING",
550
+ INT2FIX(MAGIC_NO_CHECK_ENCODING));
551
+ #endif
552
+
553
+ rb_define_alloc_func(cMahoro, mahoro_allocate);
554
+ rb_define_method(cMahoro, "initialize", mahoro_initialize, -1);
555
+ rb_define_method(cMahoro, "file", mahoro_file, 1);
556
+ rb_define_method(cMahoro, "buffer", mahoro_buffer, 1);
557
+ rb_define_method(cMahoro, "flags=", mahoro_set_flags, 1);
558
+ rb_define_method(cMahoro, "valid?", mahoro_check, -1);
559
+ rb_define_singleton_method(cMahoro, "compile", mahoro_s_compile, 1);
560
+ rb_define_method(cMahoro, "compile", mahoro_compile, 1);
561
+ rb_define_method(cMahoro, "load", mahoro_load, 1);
562
+ id_to_path = rb_intern("to_path");
563
+ }
564
+
565
+ /* arch-tag: mahoro */