mahoro 0.3 → 0.4

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.
@@ -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 */