From df1a1fffd0c0319fa625d6716acc6a4a8d60bd7c Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 14 Oct 2014 20:50:38 -0700 Subject: [PATCH] magic: bindings for libmagic. --- extra/magic/authors.txt | 1 + extra/magic/ffi/ffi.factor | 52 ++++++++++++++++++++++++++++++++++ extra/magic/magic-tests.factor | 6 ++++ extra/magic/magic.factor | 29 +++++++++++++++++++ extra/magic/platforms.txt | 1 + extra/magic/summary.txt | 1 + 6 files changed, 90 insertions(+) create mode 100644 extra/magic/authors.txt create mode 100644 extra/magic/ffi/ffi.factor create mode 100644 extra/magic/magic-tests.factor create mode 100644 extra/magic/magic.factor create mode 100644 extra/magic/platforms.txt create mode 100644 extra/magic/summary.txt diff --git a/extra/magic/authors.txt b/extra/magic/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/magic/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/magic/ffi/ffi.factor b/extra/magic/ffi/ffi.factor new file mode 100644 index 0000000000..8832e095be --- /dev/null +++ b/extra/magic/ffi/ffi.factor @@ -0,0 +1,52 @@ +! Copyright (C) 2014 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: alien alien.c-types alien.destructors alien.libraries +alien.libraries.finder alien.syntax kernel literals ; + +IN: magic.ffi + +"libmagic" dup find-library cdecl add-library + +LIBRARY: libmagic + +CONSTANT: MAGIC_NONE 0x000000 +CONSTANT: MAGIC_DEBUG 0x000001 +CONSTANT: MAGIC_SYMLINK 0x000002 +CONSTANT: MAGIC_COMPRESS 0x000004 +CONSTANT: MAGIC_DEVICES 0x000008 +CONSTANT: MAGIC_MIME_TYPE 0x000010 +CONSTANT: MAGIC_CONTINUE 0x000020 +CONSTANT: MAGIC_CHECK 0x000040 +CONSTANT: MAGIC_PRESERVE_ATIME 0x000080 +CONSTANT: MAGIC_RAW 0x000100 +CONSTANT: MAGIC_ERROR 0x000200 +CONSTANT: MAGIC_MIME_ENCODING 0x000400 +CONSTANT: MAGIC_MIME flags{ MAGIC_MIME_TYPE MAGIC_MIME_ENCODING } +CONSTANT: MAGIC_NO_CHECK_COMPRESS 0x001000 +CONSTANT: MAGIC_NO_CHECK_TAR 0x002000 +CONSTANT: MAGIC_NO_CHECK_SOFT 0x004000 +CONSTANT: MAGIC_NO_CHECK_APPTYPE 0x008000 +CONSTANT: MAGIC_NO_CHECK_ELF 0x010000 +CONSTANT: MAGIC_NO_CHECK_ASCII 0x020000 +CONSTANT: MAGIC_NO_CHECK_TROFF 0x040000 +CONSTANT: MAGIC_NO_CHECK_FORTRAN 0x080000 +CONSTANT: MAGIC_NO_CHECK_TOKENS 0x100000 + +TYPEDEF: void* magic_t +FUNCTION: magic_t magic_open ( int flags ) ; +FUNCTION: void magic_close ( magic_t magic ) ; + +FUNCTION: c-string magic_file ( magic_t magic, c-string path ) ; +FUNCTION: c-string magic_descriptor ( magic_t magic, int fd ) ; +FUNCTION: c-string magic_buffer ( magic_t magic, void* buffer, size_t size ) ; + +FUNCTION: c-string magic_error ( magic_t magic ) ; +FUNCTION: int magic_setflags ( magic_t magic, int flags ) ; + +FUNCTION: int magic_load ( magic_t magic, c-string path ) ; +FUNCTION: int magic_compile ( magic_t magic, c-string path ) ; +FUNCTION: int magic_check ( magic_t magic, c-string path ) ; +FUNCTION: int magic_errno ( magic_t magic ) ; + +DESTRUCTOR: magic_close diff --git a/extra/magic/magic-tests.factor b/extra/magic/magic-tests.factor new file mode 100644 index 0000000000..cb057e9ad7 --- /dev/null +++ b/extra/magic/magic-tests.factor @@ -0,0 +1,6 @@ +USING: system tools.test ; +IN: magic + +{ "data" } [ image guess-file ] unit-test +{ "application/octet-stream" } [ image guess-mime-type ] unit-test +{ "binary" } [ image guess-mime-encoding ] unit-test diff --git a/extra/magic/magic.factor b/extra/magic/magic.factor new file mode 100644 index 0000000000..2b640678e8 --- /dev/null +++ b/extra/magic/magic.factor @@ -0,0 +1,29 @@ +! Copyright (C) 2014 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: destructors io.backend kernel magic.ffi ; + +IN: magic + + + +: guess-file ( path -- file-type ) + MAGIC_NONE magic-file ; + +: guess-mime-type ( path -- mime-type ) + MAGIC_MIME_TYPE magic-file ; + +: guess-mime-encoding ( path -- encoding ) + MAGIC_MIME_ENCODING magic-file ; diff --git a/extra/magic/platforms.txt b/extra/magic/platforms.txt new file mode 100644 index 0000000000..509143d863 --- /dev/null +++ b/extra/magic/platforms.txt @@ -0,0 +1 @@ +unix diff --git a/extra/magic/summary.txt b/extra/magic/summary.txt new file mode 100644 index 0000000000..b84de69b12 --- /dev/null +++ b/extra/magic/summary.txt @@ -0,0 +1 @@ +libmagic binding