Gnash  0.8.11dev
sharedlib.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
3 // Free Software Foundation, Inc
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 
19 #ifndef GNASH_SHAREDLIB_H
20 #define GNASH_SHAREDLIB_H
21 
22 #ifdef HAVE_CONFIG_H
23 #include "gnashconfig.h"
24 #endif
25 
26 #include <mutex>
27 #include <string>
28 #include "dsodefs.h" // DSOEXPORT
29 
30 #ifdef _WIN32
31 #undef DLL_EXPORT
32 #define LIBLTDL_DLL_IMPORT 1
33 #endif
34 
35 #include <ltdl.h>
36 
37 // Used on Darwin for basename
38 #ifdef HAVE_LIBGEN_H
39 #include <libgen.h>
40 #endif
41 
42 namespace gnash {
43  class as_object;
44 }
45 
46 namespace gnash {
47 
49 class SharedLib
50 {
51  typedef std::lock_guard<std::mutex> scoped_lock;
52 
53 public:
54  // Typedefs for function pointers to keep the code readable
55  typedef bool entrypoint (void *obj);
56  typedef void initentry(as_object &obj);
57 
58  DSOEXPORT SharedLib(const std::string& filespec);
59 
60  DSOEXPORT bool openLib();
61  bool openLib(const std::string &filespec);
62 
63  // Get a C symbol from the shared library based on the name
64  entrypoint *getDllSymbol (const std::string& symbol);
65  DSOEXPORT initentry *getInitEntry (const std::string& symbol);
66 
67 private:
68 
69  bool closeLib();
70 
71 #ifdef HAVE_LTDL
72  lt_dlhandle _dlhandle;
73 #endif
74  std::string _filespec;
75  std::mutex _libMutex;
76 };
77 
78 } // end of gnash namespace
79 
80 // GNASH_SHAREDLIB_H
81 #endif
82 
83 // Local Variables:
84 // mode: C++
85 // indent-tabs-mode: t
86 // End:
DSOEXPORT initentry * getInitEntry(const std::string &symbol)
Definition: sharedlib.cpp:123
bool entrypoint(void *obj)
Definition: sharedlib.h:55
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:40
The base class for all ActionScript objects.
Definition: as_object.h:161
DSOEXPORT SharedLib(const std::string &filespec)
Definition: sharedlib.cpp:60
#define DSOEXPORT
Definition: dsodefs.h:55
DSOEXPORT bool openLib()
Definition: sharedlib.cpp:90
void initentry(as_object &obj)
Definition: sharedlib.h:56
TODO: document this class.
Definition: sharedlib.h:49
entrypoint * getDllSymbol(const std::string &symbol)
Definition: sharedlib.cpp:147