mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| /* 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) */
 | |
| }
 |