OSDN Git Service

643f90a978ca4f4a371ac995028687f154874a91
[pf3gnuchains/gcc-fork.git] / libjava / java / net / natVMURLConnection.cc
1 /* Copyright (C) 2006, 2007  Free Software Foundation
2
3    This file is part of libgcj.
4
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8
9 #include <config.h>
10
11 #include <java/net/VMURLConnection.h>
12 #include <gcj/cni.h>
13 #include <java/lang/UnsupportedOperationException.h>
14 #include <stdio.h>
15
16 #if defined (HAVE_MAGIC_H) && defined (USE_LTDL)
17
18 #include <magic.h>
19 #include <ltdl.h>
20
21 static magic_t cookie;
22
23 static magic_t (*p_magic_open)(int flags);
24 static int (*p_magic_load)(magic_t cookie, const char *filename);
25 static void (*p_magic_close)(magic_t cookie);
26 static const char * (*p_magic_buffer) (magic_t cookie, const void *buffer,
27                                        size_t length);
28
29 #endif /* HAVE_MAGIC_H && defined (USE_LTDL) */
30
31 void
32 java::net::VMURLConnection::init ()
33 {
34 #if defined (HAVE_MAGIC_H) && defined (USE_LTDL)
35   lt_dlhandle handle = lt_dlopenext ("libmagic.so");
36   if (!handle)
37     return;
38
39   p_magic_open = (typeof (p_magic_open))lt_dlsym(handle, "magic_open");
40   if (p_magic_open == NULL)
41     return;
42   p_magic_buffer = (typeof (p_magic_buffer))lt_dlsym(handle, "magic_buffer");
43   if (p_magic_buffer == NULL)
44     return;
45   p_magic_close = (typeof (p_magic_close))lt_dlsym(handle, "magic_close");
46   if (p_magic_close == NULL)
47     return;
48   p_magic_load = (typeof (p_magic_load))lt_dlsym(handle, "magic_load");
49   if (p_magic_load == NULL)
50     return;
51
52   cookie = p_magic_open (MAGIC_MIME);
53   if (cookie == (magic_t) NULL)
54     return;
55   if (p_magic_load (cookie, NULL) == -1)
56     {
57       p_magic_close (cookie);
58       cookie = (magic_t) NULL;
59     }
60 #endif /* HAVE_MAGIC_H  && defined (USE_LTDL) */
61 }
62
63 ::java::lang::String *
64 java::net::VMURLConnection::guessContentTypeFromBuffer (jbyteArray bytes,
65                                                         jint valid)
66 {
67 #if defined (HAVE_MAGIC_H) && defined (USE_LTDL)
68   const char *result;
69
70   if (cookie == (magic_t) NULL)
71     return NULL;
72
73   result = p_magic_buffer (cookie, elements(bytes), valid);
74
75   if (result == NULL)
76     return NULL;
77   return _Jv_NewStringUTF (result);
78 #else
79   return NULL;
80 #endif /* HAVE_MAGIC_H  && defined (USE_LTDL) */
81 }