unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Andreas Schwab <schwab@linux-m68k.org>
To: joakim@verona.se
Cc: Stefan Monnier <monnier@iro.umontreal.ca>,
	Emacs Development <emacs-devel@gnu.org>
Subject: Re: using libmagic in Emacs?
Date: Fri, 21 Aug 2009 00:08:21 +0200	[thread overview]
Message-ID: <m2r5v6nnoq.fsf@igel.home> (raw)
In-Reply-To: <m3ws4yfg3j.fsf@verona.se> (joakim@verona.se's message of "Thu, 20 Aug 2009 21:19:28 +0200")

joakim@verona.se writes:

> diff --git a/configure.in b/configure.in
> index f4096db..cb74523 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -137,6 +137,8 @@ OPTION_DEFAULT_ON([xft],[don't use XFT for anti aliased fonts])
>  OPTION_DEFAULT_ON([libotf],[don't use libotf for OpenType font support])
>  OPTION_DEFAULT_ON([m17n-flt],[don't use m17n-flt for text shaping])
>  
> +OPTION_DEFAULT_ON([filemagic],[don't compile with filemagic support])

IMHO the option should be named libmagic, since that's how the library
is named.

> diff --git a/src/config.in b/src/config.in
> index 404e00b..c966a09 100644
> --- a/src/config.in
> +++ b/src/config.in
> @@ -262,6 +262,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
>  /* Define to 1 if you have the gpm library (-lgpm). */
>  #undef HAVE_GPM
>  
> +/* Define to 1 if you have the filemagic library (-lmagic). */
> +#undef HAVE_LIBMAGIC
> +
>  /* Define to 1 if you have the `grantpt' function. */
>  #undef HAVE_GRANTPT
>  

This is generated by autoheader.

> diff --git a/src/fileio.c b/src/fileio.c
> index 3702d4c..375502e 100644
> --- a/src/fileio.c
> +++ b/src/fileio.c
> @@ -205,6 +205,10 @@ Lisp_Object Vdirectory_sep_char;
>  int write_region_inhibit_fsync;
>  #endif
>  
> +#ifdef HAVE_LIBMAGIC
> +#include <magic.h>
> +#endif
> +
>  /* Non-zero means call move-file-to-trash in Fdelete_file or
>     Fdelete_directory.  */
>  int delete_by_moving_to_trash;
> @@ -2997,6 +3001,45 @@ DEFUN ("unix-sync", Funix_sync, Sunix_sync, 0, 0, "",
>  
>  #endif /* HAVE_SYNC */
>  
> +#ifdef HAVE_LIBMAGIC
> +DEFUN ("file-magic-file", Ffile_magic_file, Sfile_magic_file, 1,1,0,
> +       doc: /* Return (MIME_TYPE MIME_ENCODING DESCRIPTION) for FILENAME.
> +Return nil on error. */)
> +  (filename)
> +     Lisp_Object filename;
> +{
> +  magic_t cookie=NULL;
> +  if (!STRINGP (filename)) goto libmagic_error;

Just use CHECK_STRING.

> +  char* f = SDATA (filename);
> +  char* rvs;

No C99 features yet.  Be careful with raw string pointers and GC.

> +  cookie = magic_open (MAGIC_NONE);
> +  magic_load (cookie,NULL); //load default database

if (cookie == NULL) ?

> +
> +  magic_setflags (cookie, MAGIC_MIME_TYPE);  
> +  rvs = magic_file (cookie, f);
> +  if (rvs == NULL) goto libmagic_error;

Use report_file_error, provided that magic_file sets errno appropriately.

> +  Lisp_Object file_freetext = make_specified_string (rvs, strlen(rvs), strlen(rvs), NULL);    

Use build_string.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




  reply	other threads:[~2009-08-20 22:08 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-18 18:35 using libmagic in Emacs? joakim
2009-08-18 19:23 ` Stefan Monnier
2009-08-18 20:01   ` Chong Yidong
2009-08-18 20:35     ` joakim
2009-08-18 21:11       ` Stefan Monnier
2009-08-19  2:58         ` Eli Zaretskii
2009-08-19  3:21           ` Stefan Monnier
2009-08-19 13:47             ` Chong Yidong
2009-08-19 15:57               ` joakim
2009-08-19 19:46               ` next bugfix release? [was: Re: using libmagic in Emacs?] Dan Nicolaescu
2009-08-19 21:06                 ` next bugfix release? Chong Yidong
2009-08-19 21:53                   ` Dan Nicolaescu
2009-08-19 22:56                   ` Alan Mackenzie
2009-08-19 23:16                     ` Nick Roberts
2009-08-20  9:02                       ` Lennart Borgman
2009-08-20 11:19                         ` Eric M. Ludlam
2009-08-20 15:13                       ` Alan Mackenzie
2009-08-20 15:47                         ` Lennart Borgman
2009-08-19 19:05             ` installing features on trunk (was: using libmagic in Emacs?) Eli Zaretskii
2009-08-21 18:59               ` Bidi support Stefan Monnier
2009-08-21 20:44                 ` Eli Zaretskii
2009-08-22  3:39                   ` Stefan Monnier
2009-08-22  8:18                   ` Jason Rumney
2009-08-22  5:39                 ` Stephen J. Turnbull
2009-08-22  7:31                   ` Eli Zaretskii
2009-08-24  1:45                   ` Kenichi Handa
2009-08-24  3:12                     ` Eli Zaretskii
2009-08-24  7:17                       ` Kenichi Handa
2009-08-24  3:25                     ` Stephen J. Turnbull
2009-08-19  0:57   ` using libmagic in Emacs? Juri Linkov
2009-08-20  3:42     ` Richard Stallman
2009-08-22 23:36       ` Juri Linkov
2009-08-24  0:07         ` Richard Stallman
2009-08-24  0:17           ` Juri Linkov
2009-08-24  7:33             ` joakim
2009-08-25  2:08             ` Richard Stallman
2009-08-25  2:19               ` Miles Bader
2009-08-25  5:09                 ` joakim
2009-08-25 13:27                 ` James Cloos
2009-08-25 21:41                 ` Thien-Thi Nguyen
2009-08-25 17:36               ` Stefan Monnier
2009-08-25 20:37               ` Juri Linkov
2009-08-29 23:19               ` Juri Linkov
2009-08-30  3:09                 ` Eli Zaretskii
2009-08-30 20:54                   ` Juri Linkov
2009-08-31  2:49                     ` Eli Zaretskii
2009-08-31 16:17                       ` Juri Linkov
2009-08-31 17:58                         ` Eli Zaretskii
2009-09-01 12:16                           ` Richard Stallman
2009-09-01 16:12                             ` Stefan Monnier
2009-09-01 21:20                               ` Richard Stallman
2009-09-03 19:42                                 ` Stefan Monnier
2009-09-04  7:52                                   ` Richard Stallman
2009-08-31 22:21                       ` Richard Stallman
2009-08-31  3:33                   ` Richard Stallman
2009-08-31 15:03                     ` Chong Yidong
2009-08-31 16:19                       ` Juri Linkov
2009-08-31 23:47                       ` Stefan Monnier
2009-09-01  3:16                         ` Eli Zaretskii
2009-09-01  5:37                           ` Stefan Monnier
2009-09-01 12:16                       ` Richard Stallman
2009-08-25 20:36           ` Juri Linkov
2009-08-19 22:49   ` joakim
2009-08-19 23:20     ` Dan Nicolaescu
2009-08-20  1:03     ` Stephen J. Turnbull
2009-08-20  3:12       ` Eli Zaretskii
2009-08-20  4:50         ` Stephen J. Turnbull
2009-08-20 18:20           ` Eli Zaretskii
2009-08-21  0:19             ` Stephen J. Turnbull
2009-08-20 18:32         ` Richard Stallman
2009-08-21 19:10           ` Stefan Monnier
2009-08-22  5:03             ` Stephen J. Turnbull
2009-08-23  1:03               ` Stefan Monnier
2009-08-20 13:57     ` Stefan Monnier
2009-08-20 19:19       ` joakim
2009-08-20 22:08         ` Andreas Schwab [this message]
2009-08-21  9:55           ` joakim
2009-08-21 11:01             ` Eli Zaretskii
2009-08-21 17:38               ` joakim
2009-08-21 17:46                 ` Rupert Swarbrick
2009-08-21 18:31                 ` Andreas Schwab
2009-08-21 19:13                   ` Drew Adams
2009-08-21 18:42                 ` Eli Zaretskii
2009-08-21 21:48                   ` joakim
2009-08-21 22:46                     ` Andreas Schwab
2009-08-22 20:18                       ` joakim
2009-08-22 23:13                         ` Ken Raeburn
2009-08-23 23:38                           ` joakim
2009-08-24  3:05                             ` Eli Zaretskii
2009-08-24 12:30                               ` joakim
2009-08-23  3:24                         ` Eli Zaretskii
2009-08-21 19:18               ` Stefan Monnier
2009-08-21 13:19             ` Andreas Schwab
2009-08-20 18:32     ` Richard Stallman
2009-08-20 20:27       ` Reiner Steib
2009-08-21 14:08         ` Richard Stallman
2009-08-21 19:16       ` Stefan Monnier
2009-08-28  0:27 ` Language identification (was: using libmagic in Emacs) Juri Linkov
2009-08-28  4:58   ` Language identification Stefan Monnier
2009-08-28  9:00     ` Stephen J. Turnbull
2009-08-28 14:56       ` Stefan Monnier
2009-08-29  4:11         ` Stephen J. Turnbull
2009-08-29 14:21           ` Chong Yidong
2009-08-29  0:46       ` Richard Stallman
2009-08-29  4:13         ` Stephen J. Turnbull
2009-08-29 15:28           ` Stefan Monnier
2009-08-29 16:27             ` Stephen J. Turnbull
2009-08-28 19:16     ` Juri Linkov
2009-08-29  1:12       ` Stefan Monnier
2009-08-30 16:01         ` Richard Stallman
2009-08-29 20:20       ` Richard Stallman
2009-08-29 22:48         ` Juri Linkov
2009-08-31  3:32           ` Richard Stallman
2009-08-31  8:42             ` David Kastrup
2009-08-31  8:59             ` Jan D.
2009-08-31  3:33           ` Richard Stallman
2009-08-28  6:45   ` Alex Ott
2009-08-28  6:46   ` Alex Ott
2009-08-28 19:08     ` Juri Linkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2r5v6nnoq.fsf@igel.home \
    --to=schwab@linux-m68k.org \
    --cc=emacs-devel@gnu.org \
    --cc=joakim@verona.se \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).