/* 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 #include #include #include #include #if defined (HAVE_MAGIC_T) && defined (HAVE_MAGIC_H) && defined (USE_LTDL) #include #include 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) */ }