12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /* Copyright (C) 2006, 2007 Free Software Foundation
- This file is part of libgcj.
- This software is copyrighted work licensed under the terms of the
- Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
- details. */
- #include <config.h>
- #include <java/net/VMURLConnection.h>
- #include <gcj/cni.h>
- #include <java/lang/UnsupportedOperationException.h>
- #include <stdio.h>
- #if defined (HAVE_MAGIC_T) && defined (HAVE_MAGIC_H) && defined (USE_LTDL)
- #include <magic.h>
- #include <ltdl.h>
- static magic_t cookie;
- static magic_t (*p_magic_open)(int flags);
- static int (*p_magic_load)(magic_t cookie, const char *filename);
- static void (*p_magic_close)(magic_t cookie);
- static const char * (*p_magic_buffer) (magic_t cookie, const void *buffer,
- size_t length);
- #endif /* HAVE_MAGIC_T && HAVE_MAGIC_H && defined (USE_LTDL) */
- void
- java::net::VMURLConnection::init ()
- {
- #if defined (HAVE_MAGIC_T) && defined (HAVE_MAGIC_H) && defined (USE_LTDL)
- lt_dlhandle handle = lt_dlopenext ("libmagic.so");
- if (!handle)
- return;
- p_magic_open = (typeof (p_magic_open))lt_dlsym(handle, "magic_open");
- if (p_magic_open == NULL)
- return;
- p_magic_buffer = (typeof (p_magic_buffer))lt_dlsym(handle, "magic_buffer");
- if (p_magic_buffer == NULL)
- return;
- p_magic_close = (typeof (p_magic_close))lt_dlsym(handle, "magic_close");
- if (p_magic_close == NULL)
- return;
- p_magic_load = (typeof (p_magic_load))lt_dlsym(handle, "magic_load");
- if (p_magic_load == NULL)
- return;
- cookie = p_magic_open (MAGIC_MIME);
- if (cookie == (magic_t) NULL)
- return;
- if (p_magic_load (cookie, NULL) == -1)
- {
- p_magic_close (cookie);
- cookie = (magic_t) NULL;
- }
- #endif /* HAVE_MAGIC_T && HAVE_MAGIC_H && defined (USE_LTDL) */
- }
- ::java::lang::String *
- java::net::VMURLConnection::guessContentTypeFromBuffer (jbyteArray bytes __attribute__ ((unused)),
- jint valid __attribute__ ((unused)))
- {
- #if defined (HAVE_MAGIC_T) && defined (HAVE_MAGIC_H) && defined (USE_LTDL)
- const char *result;
- if (cookie == (magic_t) NULL)
- return NULL;
- result = p_magic_buffer (cookie, elements(bytes), valid);
- if (result == NULL)
- return NULL;
- return _Jv_NewStringUTF (result);
- #else
- return NULL;
- #endif /* HAVE_MAGIC_T && HAVE_MAGIC_H && defined (USE_LTDL) */
- }
|