\hypertarget{group__Eina__Module__Group}{\section{Module}
\label{group__Eina__Module__Group}\index{Module@{Module}}
}


Eina module provides some helpers over P\+O\+S\+I\+X \hyperlink{group__Evil__Dlfcn_ga996da7599a89bb84423a0373171ddcee}{dlopen()}.  


\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \hyperlink{group__Eina__Module__Group_gab11c2306e567ea3f24d8da4f004e1257}{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T}(f)~\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \hyperlink{group__Eina__Module__Group_ga0535053efca6aee20c53fdff65899725}{Eina\+\_\+\+Module\+\_\+\+Init} \+\_\+\+\_\+eina\+\_\+module\+\_\+init = \&f
\begin{DoxyCompactList}\small\item\em declares the given function as the module initializer (\+\_\+\+\_\+eina\+\_\+module\+\_\+init). \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eina__Module__Group_gacac39c3b104d8b638902165d3eaf8935}{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N}(f)~\hyperlink{group__Eina__Types__Group_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+P\+I} \hyperlink{group__Eina__Module__Group_ga8b5ae1dc6eb935dc463686f1b7bba57c}{Eina\+\_\+\+Module\+\_\+\+Shutdown} \+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown = \&f
\begin{DoxyCompactList}\small\item\em declares the given function as the module shutdownializer (\+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown). \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{typedef struct \+\_\+\+Eina\+\_\+\+Module \hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module}}\label{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}

\begin{DoxyCompactList}\small\item\em Dynamic module loader handle. \end{DoxyCompactList}\item 
\hypertarget{group__Eina__Module__Group_gaafada695dd7ed46ee22aa77201300fa9}{typedef \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}($\ast$ \hyperlink{group__Eina__Module__Group_gaafada695dd7ed46ee22aa77201300fa9}{Eina\+\_\+\+Module\+\_\+\+Cb} )(\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$m, void $\ast$data)}\label{group__Eina__Module__Group_gaafada695dd7ed46ee22aa77201300fa9}

\begin{DoxyCompactList}\small\item\em Dynamic module loader callback. \end{DoxyCompactList}\item 
typedef \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}($\ast$ \hyperlink{group__Eina__Module__Group_ga0535053efca6aee20c53fdff65899725}{Eina\+\_\+\+Module\+\_\+\+Init} )(void)
\begin{DoxyCompactList}\small\item\em If a function with such signature is exported by module as \+\_\+\+\_\+eina\+\_\+module\+\_\+init, it will be called on the first load after \hyperlink{group__Evil__Dlfcn_ga996da7599a89bb84423a0373171ddcee}{dlopen()} and if \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} is returned, load will fail, \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} means the module was successfully initialized. \end{DoxyCompactList}\item 
typedef void($\ast$ \hyperlink{group__Eina__Module__Group_ga8b5ae1dc6eb935dc463686f1b7bba57c}{Eina\+\_\+\+Module\+\_\+\+Shutdown} )(void)
\begin{DoxyCompactList}\small\item\em If a function with such signature is exported by module as \+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown, it will be called before calling \hyperlink{group__Evil__Dlfcn_ga1a63f96430b0d05189b31d7885b1e555}{dlclose()} \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$ \hyperlink{group__Eina__Module__Group_ga51920ac99ce58c98f2227d01992cb93c}{eina\+\_\+module\+\_\+new} (const char $\ast$file)
\begin{DoxyCompactList}\small\item\em Return a new module. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Module__Group_gaf30d4e595f74ab7b7ecff80e683d5d3b}{eina\+\_\+module\+\_\+free} (\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$module)
\begin{DoxyCompactList}\small\item\em Delete a module. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{eina\+\_\+module\+\_\+load} (\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$module)
\begin{DoxyCompactList}\small\item\em Load a module. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}{eina\+\_\+module\+\_\+unload} (\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$module)
\begin{DoxyCompactList}\small\item\em Unload a module. \end{DoxyCompactList}\item 
void $\ast$ \hyperlink{group__Eina__Module__Group_gab2af6c454e925332ff0f4b40588ea2c7}{eina\+\_\+module\+\_\+symbol\+\_\+get} (const \hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$module, const char $\ast$symbol)
\begin{DoxyCompactList}\small\item\em Retrieve the data associated to a symbol. \end{DoxyCompactList}\item 
const char $\ast$ \hyperlink{group__Eina__Module__Group_gab214d40634cbd96075c8bee3400a48d3}{eina\+\_\+module\+\_\+file\+\_\+get} (const \hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$module)
\begin{DoxyCompactList}\small\item\em Return the file name associated to the module. \end{DoxyCompactList}\item 
void \hyperlink{group__Eina__Module__Group_ga25cc79876915b9f0e647a7292991d139}{eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set} (\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$module, \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} global)
\begin{DoxyCompactList}\small\item\em Define if on module load we should expose all symbol. \end{DoxyCompactList}\item 
char $\ast$ \hyperlink{group__Eina__Module__Group_ga47e0f52901e42e05b0829b6a829d4894}{eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get} (const void $\ast$symbol, const char $\ast$sub\+\_\+dir)
\begin{DoxyCompactList}\small\item\em Return the path built from the location of a library and a given sub directory. \end{DoxyCompactList}\item 
char $\ast$ \hyperlink{group__Eina__Module__Group_ga5a80f3b3b965e5339a77bea62dd7dc17}{eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get} (const char $\ast$env, const char $\ast$sub\+\_\+dir)
\begin{DoxyCompactList}\small\item\em Return the path built from the value of an environment variable and a given sub directory. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$ \hyperlink{group__Eina__Module__Group_gaed519754b05fa77a329472294eeacb4d}{eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get} (\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$array, const char $\ast$path, const char $\ast$arch)
\begin{DoxyCompactList}\small\item\em Get an array of modules found on the directory path matching an arch type. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$ \hyperlink{group__Eina__Module__Group_ga7a61fc6cae44ea9a085f2fe6b52e1f37}{eina\+\_\+module\+\_\+list\+\_\+get} (\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$array, const char $\ast$path, \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} recursive, \hyperlink{group__Eina__Module__Group_gaafada695dd7ed46ee22aa77201300fa9}{Eina\+\_\+\+Module\+\_\+\+Cb} cb, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Get a list of modules found on the directory path. \end{DoxyCompactList}\item 
void \hyperlink{group__Eina__Module__Group_gaf894f374f05fa6445a134b7eacc6727d}{eina\+\_\+module\+\_\+list\+\_\+load} (\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$array)
\begin{DoxyCompactList}\small\item\em Load every module on the list of modules. \end{DoxyCompactList}\item 
void \hyperlink{group__Eina__Module__Group_gaa0de0b199cd63a5906875a0a2f4c4fc0}{eina\+\_\+module\+\_\+list\+\_\+unload} (\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$array)
\begin{DoxyCompactList}\small\item\em Unload every module on the list of modules. \end{DoxyCompactList}\item 
void \hyperlink{group__Eina__Module__Group_ga12e5611bb58374c893334ff93509fcfa}{eina\+\_\+module\+\_\+list\+\_\+free} (\hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$array)
\begin{DoxyCompactList}\small\item\em {\ttfamily Free} every module on the list of modules. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Module__Group_ga76c40ee7fea1c69f1eb76b1c6d45d650}{Eina\+\_\+\+Module} $\ast$ \hyperlink{group__Eina__Module__Group_ga2f60ccf09dc1a7c57c7e2b29c57b4da7}{eina\+\_\+module\+\_\+find} (const \hyperlink{group__Eina__Array__Group_ga2a57284ee83a7e767485b7ae2f5df86c}{Eina\+\_\+\+Array} $\ast$array, const char $\ast$module)
\begin{DoxyCompactList}\small\item\em Find an module in array. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hypertarget{group__Eina__Module__Group_gaf2f65ced856a643e76460b2fb76f34cc}{\hyperlink{group__Eina__Error__Group_ga95b3cbb33e987e7d92a81ea785001686}{Eina\+\_\+\+Error} {\bfseries E\+I\+N\+A\+\_\+\+E\+R\+R\+O\+R\+\_\+\+W\+R\+O\+N\+G\+\_\+\+M\+O\+D\+U\+L\+E}}\label{group__Eina__Module__Group_gaf2f65ced856a643e76460b2fb76f34cc}

\item 
\hypertarget{group__Eina__Module__Group_ga8ee7c657caf1577ba992f9162ecc6eb8}{\hyperlink{group__Eina__Error__Group_ga95b3cbb33e987e7d92a81ea785001686}{Eina\+\_\+\+Error} {\bfseries E\+I\+N\+A\+\_\+\+E\+R\+R\+O\+R\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T\+\_\+\+F\+A\+I\+L\+E\+D}}\label{group__Eina__Module__Group_ga8ee7c657caf1577ba992f9162ecc6eb8}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
Eina module provides some helpers over P\+O\+S\+I\+X \hyperlink{group__Evil__Dlfcn_ga996da7599a89bb84423a0373171ddcee}{dlopen()}. 

These functions provide module management.

It is not meant to replace, abstract or make a \char`\"{}portable\char`\"{} version of the P\+O\+S\+I\+X, but enhance its usage by defining some good practices.

Modules are created with \hyperlink{group__Eina__Module__Group_ga51920ac99ce58c98f2227d01992cb93c}{eina\+\_\+module\+\_\+new()} and later loaded with \hyperlink{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{eina\+\_\+module\+\_\+load()}. Loads are reference counted and there must be the same number of \hyperlink{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}{eina\+\_\+module\+\_\+unload()} in order to have it to call \hyperlink{group__Evil__Dlfcn_ga1a63f96430b0d05189b31d7885b1e555}{dlclose()}. This makes simple to have different users for the same module.

The loaded shared objects may have two visible functions that will be called and might provide initialization and shutdown procedures. The symbols are {\ttfamily \+\_\+\+\_\+eina\+\_\+module\+\_\+init} and {\ttfamily \+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown} and will be defined by the macros \hyperlink{group__Eina__Module__Group_gab11c2306e567ea3f24d8da4f004e1257}{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T()} and \hyperlink{group__Eina__Module__Group_gacac39c3b104d8b638902165d3eaf8935}{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N()}.

There are some helpers to automatically create modules based on directory listing. See \hyperlink{group__Eina__Module__Group_gaed519754b05fa77a329472294eeacb4d}{eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get()}, \hyperlink{group__Eina__Module__Group_ga7a61fc6cae44ea9a085f2fe6b52e1f37}{eina\+\_\+module\+\_\+list\+\_\+get()} and \hyperlink{group__Eina__Module__Group_ga2f60ccf09dc1a7c57c7e2b29c57b4da7}{eina\+\_\+module\+\_\+find()}. 

\subsection{Macro Definition Documentation}
\hypertarget{group__Eina__Module__Group_gab11c2306e567ea3f24d8da4f004e1257}{\index{Module@{Module}!E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T@{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T}}
\index{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T@{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T}!Module@{Module}}
\subsubsection[{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+I\+N\+I\+T(
\begin{DoxyParamCaption}
\item[{}]{f}
\end{DoxyParamCaption}
)~{\bf E\+A\+P\+I} {\bf Eina\+\_\+\+Module\+\_\+\+Init} \+\_\+\+\_\+eina\+\_\+module\+\_\+init = \&f}}\label{group__Eina__Module__Group_gab11c2306e567ea3f24d8da4f004e1257}


declares the given function as the module initializer (\+\_\+\+\_\+eina\+\_\+module\+\_\+init). 

It must be of signature \hyperlink{group__Eina__Module__Group_ga0535053efca6aee20c53fdff65899725}{Eina\+\_\+\+Module\+\_\+\+Init} \hypertarget{group__Eina__Module__Group_gacac39c3b104d8b638902165d3eaf8935}{\index{Module@{Module}!E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N@{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N}}
\index{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N@{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N}!Module@{Module}}
\subsubsection[{E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+S\+H\+U\+T\+D\+O\+W\+N(
\begin{DoxyParamCaption}
\item[{}]{f}
\end{DoxyParamCaption}
)~{\bf E\+A\+P\+I} {\bf Eina\+\_\+\+Module\+\_\+\+Shutdown} \+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown = \&f}}\label{group__Eina__Module__Group_gacac39c3b104d8b638902165d3eaf8935}


declares the given function as the module shutdownializer (\+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown). 

It must be of signature \hyperlink{group__Eina__Module__Group_ga8b5ae1dc6eb935dc463686f1b7bba57c}{Eina\+\_\+\+Module\+\_\+\+Shutdown} 

\subsection{Typedef Documentation}
\hypertarget{group__Eina__Module__Group_ga0535053efca6aee20c53fdff65899725}{\index{Module@{Module}!Eina\+\_\+\+Module\+\_\+\+Init@{Eina\+\_\+\+Module\+\_\+\+Init}}
\index{Eina\+\_\+\+Module\+\_\+\+Init@{Eina\+\_\+\+Module\+\_\+\+Init}!Module@{Module}}
\subsubsection[{Eina\+\_\+\+Module\+\_\+\+Init}]{\setlength{\rightskip}{0pt plus 5cm}Eina\+\_\+\+Module\+\_\+\+Init}}\label{group__Eina__Module__Group_ga0535053efca6aee20c53fdff65899725}


If a function with such signature is exported by module as \+\_\+\+\_\+eina\+\_\+module\+\_\+init, it will be called on the first load after \hyperlink{group__Evil__Dlfcn_ga996da7599a89bb84423a0373171ddcee}{dlopen()} and if \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} is returned, load will fail, \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} means the module was successfully initialized. 

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Module__Group_ga8b5ae1dc6eb935dc463686f1b7bba57c}{Eina\+\_\+\+Module\+\_\+\+Shutdown} 
\end{DoxySeeAlso}
\hypertarget{group__Eina__Module__Group_ga8b5ae1dc6eb935dc463686f1b7bba57c}{\index{Module@{Module}!Eina\+\_\+\+Module\+\_\+\+Shutdown@{Eina\+\_\+\+Module\+\_\+\+Shutdown}}
\index{Eina\+\_\+\+Module\+\_\+\+Shutdown@{Eina\+\_\+\+Module\+\_\+\+Shutdown}!Module@{Module}}
\subsubsection[{Eina\+\_\+\+Module\+\_\+\+Shutdown}]{\setlength{\rightskip}{0pt plus 5cm}Eina\+\_\+\+Module\+\_\+\+Shutdown}}\label{group__Eina__Module__Group_ga8b5ae1dc6eb935dc463686f1b7bba57c}


If a function with such signature is exported by module as \+\_\+\+\_\+eina\+\_\+module\+\_\+shutdown, it will be called before calling \hyperlink{group__Evil__Dlfcn_ga1a63f96430b0d05189b31d7885b1e555}{dlclose()} 

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Module__Group_ga0535053efca6aee20c53fdff65899725}{Eina\+\_\+\+Module\+\_\+\+Init} 
\end{DoxySeeAlso}


\subsection{Function Documentation}
\hypertarget{group__Eina__Module__Group_ga51920ac99ce58c98f2227d01992cb93c}{\index{Module@{Module}!eina\+\_\+module\+\_\+new@{eina\+\_\+module\+\_\+new}}
\index{eina\+\_\+module\+\_\+new@{eina\+\_\+module\+\_\+new}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Module}$\ast$ eina\+\_\+module\+\_\+new (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{file}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga51920ac99ce58c98f2227d01992cb93c}


Return a new module. 


\begin{DoxyParams}{Parameters}
{\em file} & The name of the file module to load. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A new module. If {\ttfamily file} is {\ttfamily N\+U\+L\+L}, or if it does not exist, the function returns {\ttfamily N\+U\+L\+L}, otherwise, it allocates an Eina\+\_\+\+Module, stores a duplicate string of {\ttfamily file}, sets its reference to {\ttfamily 0} and its handle to {\ttfamily N\+U\+L\+L}.
\end{DoxyReturn}
When the new module is not needed anymore, use \hyperlink{group__Eina__Module__Group_gaf30d4e595f74ab7b7ecff80e683d5d3b}{eina\+\_\+module\+\_\+free()} to free the allocated memory.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{eina\+\_\+module\+\_\+load} 
\end{DoxySeeAlso}


References D\+B\+G, E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, and E\+R\+R.

\hypertarget{group__Eina__Module__Group_gaf30d4e595f74ab7b7ecff80e683d5d3b}{\index{Module@{Module}!eina\+\_\+module\+\_\+free@{eina\+\_\+module\+\_\+free}}
\index{eina\+\_\+module\+\_\+free@{eina\+\_\+module\+\_\+free}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Bool} eina\+\_\+module\+\_\+free (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Module} $\ast$}]{module}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_gaf30d4e595f74ab7b7ecff80e683d5d3b}


Delete a module. 


\begin{DoxyParams}{Parameters}
{\em module} & The module to delete. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} otherwise.
\end{DoxyReturn}
This function calls \hyperlink{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}{eina\+\_\+module\+\_\+unload()} if {\ttfamily module} has been previously loaded and frees the allocated memory. On success this function returns \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} and \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} otherwise. If {\ttfamily module} is {\ttfamily N\+U\+L\+L}, the function returns immediately. 

References D\+B\+G, E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, eina\+\_\+module\+\_\+unload(), and E\+I\+N\+A\+\_\+\+T\+R\+U\+E.



Referenced by eina\+\_\+module\+\_\+list\+\_\+free().

\hypertarget{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{\index{Module@{Module}!eina\+\_\+module\+\_\+load@{eina\+\_\+module\+\_\+load}}
\index{eina\+\_\+module\+\_\+load@{eina\+\_\+module\+\_\+load}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+load}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Bool} eina\+\_\+module\+\_\+load (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Module} $\ast$}]{module}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}


Load a module. 


\begin{DoxyParams}{Parameters}
{\em module} & The module to load. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} otherwise.
\end{DoxyReturn}
This function load the shared file object passed in \hyperlink{group__Eina__Module__Group_ga51920ac99ce58c98f2227d01992cb93c}{eina\+\_\+module\+\_\+new()}. If it is a internal Eina module (like the mempools), it also initialize it. If the shared file object can not be loaded, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} is returned. If it is an internal Eina module and the module can not be initialized, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} is returned. If the module has already been loaded, it's reference counter is increased by one and \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} is returned. If {\ttfamily module} is {\ttfamily N\+U\+L\+L}, the function returns immediately \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E}.

When the symbols of the shared file objects are not needed anymore, call \hyperlink{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}{eina\+\_\+module\+\_\+unload()} to unload the module. 

References D\+B\+G, dlclose(), dlerror(), dlopen(), dlsym(), E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, E\+I\+N\+A\+\_\+\+T\+R\+U\+E, R\+T\+L\+D\+\_\+\+G\+L\+O\+B\+A\+L, R\+T\+L\+D\+\_\+\+L\+A\+Z\+Y, R\+T\+L\+D\+\_\+\+N\+O\+W, and W\+R\+N.



Referenced by eina\+\_\+module\+\_\+list\+\_\+load().

\hypertarget{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}{\index{Module@{Module}!eina\+\_\+module\+\_\+unload@{eina\+\_\+module\+\_\+unload}}
\index{eina\+\_\+module\+\_\+unload@{eina\+\_\+module\+\_\+unload}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+unload}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Bool} eina\+\_\+module\+\_\+unload (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Module} $\ast$}]{module}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}


Unload a module. 


\begin{DoxyParams}{Parameters}
{\em module} & The module to load. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} otherwise.
\end{DoxyReturn}
This function unload the module {\ttfamily module} that has been previously loaded by \hyperlink{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{eina\+\_\+module\+\_\+load()}. If the reference counter of {\ttfamily module} is strictly greater than {\ttfamily 1}, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E} is returned. Otherwise, the shared object file is closed and if it is a internal Eina module, it is shutted down just before. In that case, \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E} is returned. In all case, the reference counter is decreased. If {\ttfamily module} is {\ttfamily N\+U\+L\+L}, the function returns immediately \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E}. 

References D\+B\+G, dlclose(), dlsym(), E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, and E\+I\+N\+A\+\_\+\+T\+R\+U\+E.



Referenced by eina\+\_\+module\+\_\+free(), and eina\+\_\+module\+\_\+list\+\_\+unload().

\hypertarget{group__Eina__Module__Group_gab2af6c454e925332ff0f4b40588ea2c7}{\index{Module@{Module}!eina\+\_\+module\+\_\+symbol\+\_\+get@{eina\+\_\+module\+\_\+symbol\+\_\+get}}
\index{eina\+\_\+module\+\_\+symbol\+\_\+get@{eina\+\_\+module\+\_\+symbol\+\_\+get}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+symbol\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ eina\+\_\+module\+\_\+symbol\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+Module} $\ast$}]{module, }
\item[{const char $\ast$}]{symbol}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_gab2af6c454e925332ff0f4b40588ea2c7}


Retrieve the data associated to a symbol. 


\begin{DoxyParams}{Parameters}
{\em module} & The module. \\
\hline
{\em symbol} & The symbol. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The data associated to the symbol, or {\ttfamily N\+U\+L\+L} on failure.
\end{DoxyReturn}
This function returns the data associated to {\ttfamily symbol} of {\ttfamily module}. {\ttfamily module} must have been loaded before with \hyperlink{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{eina\+\_\+module\+\_\+load()}. If {\ttfamily module} is {\ttfamily N\+U\+L\+L}, or if it has not been correctly loaded before, the function returns immediately {\ttfamily N\+U\+L\+L}. 

References dlsym().



Referenced by ecore\+\_\+evas\+\_\+extn\+\_\+plug\+\_\+new(), ecore\+\_\+evas\+\_\+extn\+\_\+socket\+\_\+new(), ecore\+\_\+evas\+\_\+fb\+\_\+new(), ecore\+\_\+evas\+\_\+gl\+\_\+x11\+\_\+new(), ecore\+\_\+evas\+\_\+gl\+\_\+x11\+\_\+pixmap\+\_\+new(), ecore\+\_\+evas\+\_\+software\+\_\+x11\+\_\+new(), and ecore\+\_\+evas\+\_\+software\+\_\+x11\+\_\+pixmap\+\_\+new().

\hypertarget{group__Eina__Module__Group_gab214d40634cbd96075c8bee3400a48d3}{\index{Module@{Module}!eina\+\_\+module\+\_\+file\+\_\+get@{eina\+\_\+module\+\_\+file\+\_\+get}}
\index{eina\+\_\+module\+\_\+file\+\_\+get@{eina\+\_\+module\+\_\+file\+\_\+get}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+file\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ eina\+\_\+module\+\_\+file\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+Module} $\ast$}]{module}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_gab214d40634cbd96075c8bee3400a48d3}


Return the file name associated to the module. 


\begin{DoxyParams}{Parameters}
{\em module} & The module. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The file name.
\end{DoxyReturn}
This function returns the file name passed in \hyperlink{group__Eina__Module__Group_ga51920ac99ce58c98f2227d01992cb93c}{eina\+\_\+module\+\_\+new()}. If {\ttfamily module} is {\ttfamily N\+U\+L\+L}, the function returns immediately {\ttfamily N\+U\+L\+L}. The returned value must no be freed. 

Referenced by eina\+\_\+module\+\_\+find().

\hypertarget{group__Eina__Module__Group_ga25cc79876915b9f0e647a7292991d139}{\index{Module@{Module}!eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set@{eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set}}
\index{eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set@{eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set}]{\setlength{\rightskip}{0pt plus 5cm}void eina\+\_\+module\+\_\+symbol\+\_\+global\+\_\+set (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Module} $\ast$}]{module, }
\item[{{\bf Eina\+\_\+\+Bool}}]{global}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga25cc79876915b9f0e647a7292991d139}


Define if on module load we should expose all symbol. 


\begin{DoxyParams}{Parameters}
{\em module} & The module to turn off/on symbol to be exposed \\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+11 
\end{DoxySince}
\hypertarget{group__Eina__Module__Group_ga47e0f52901e42e05b0829b6a829d4894}{\index{Module@{Module}!eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get@{eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get}}
\index{eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get@{eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ eina\+\_\+module\+\_\+symbol\+\_\+path\+\_\+get (
\begin{DoxyParamCaption}
\item[{const void $\ast$}]{symbol, }
\item[{const char $\ast$}]{sub\+\_\+dir}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga47e0f52901e42e05b0829b6a829d4894}


Return the path built from the location of a library and a given sub directory. 


\begin{DoxyParams}{Parameters}
{\em symbol} & The symbol to search for. \\
\hline
{\em sub\+\_\+dir} & The subdirectory to append. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The built path on success, {\ttfamily N\+U\+L\+L} otherwise.
\end{DoxyReturn}
This function returns the path built by concatenating the path of the library containing the symbol {\ttfamily symbol} and {\ttfamily sub\+\_\+dir}. {\ttfamily sub\+\_\+dir} can be {\ttfamily N\+U\+L\+L}. The returned path must be freed when not used anymore. If the symbol is not found, or dl\+\_\+addr() is not supported, or allocation fails, this function returns {\ttfamily N\+U\+L\+L}. 

References dladdr(), and Dl\+\_\+info\+::dli\+\_\+fname.

\hypertarget{group__Eina__Module__Group_ga5a80f3b3b965e5339a77bea62dd7dc17}{\index{Module@{Module}!eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get@{eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get}}
\index{eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get@{eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ eina\+\_\+module\+\_\+environment\+\_\+path\+\_\+get (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{env, }
\item[{const char $\ast$}]{sub\+\_\+dir}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga5a80f3b3b965e5339a77bea62dd7dc17}


Return the path built from the value of an environment variable and a given sub directory. 


\begin{DoxyParams}{Parameters}
{\em env} & The environment variable to expand. \\
\hline
{\em sub\+\_\+dir} & The subdirectory to append. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The built path on success, {\ttfamily N\+U\+L\+L} otherwise.
\end{DoxyReturn}
This function returns the path built by concatenating the value of the environment variable named {\ttfamily env} and {\ttfamily sub\+\_\+dir}. {\ttfamily sub\+\_\+dir} can be {\ttfamily N\+U\+L\+L}. The returned path must be freed when not used anymore. If the symbol is not found, or {\ttfamily env} does not exist, or allocation fails, this function returns {\ttfamily N\+U\+L\+L}. \hypertarget{group__Eina__Module__Group_gaed519754b05fa77a329472294eeacb4d}{\index{Module@{Module}!eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get@{eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get}}
\index{eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get@{eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Array}$\ast$ eina\+\_\+module\+\_\+arch\+\_\+list\+\_\+get (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Array} $\ast$}]{array, }
\item[{const char $\ast$}]{path, }
\item[{const char $\ast$}]{arch}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_gaed519754b05fa77a329472294eeacb4d}


Get an array of modules found on the directory path matching an arch type. 


\begin{DoxyParams}{Parameters}
{\em array} & The array that stores the list of the modules. \\
\hline
{\em path} & The directory's path to search for modules. \\
\hline
{\em arch} & The architecture string. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The array of modules found in {\ttfamily path} matching {\ttfamily arch}.
\end{DoxyReturn}
This function adds to {\ttfamily array} the module names found in {\ttfamily path} which match the cpu architecture {\ttfamily arch}. If {\ttfamily path} or {\ttfamily arch} is {\ttfamily N\+U\+L\+L}, the function returns immediately {\ttfamily array}. {\ttfamily array} can be {\ttfamily N\+U\+L\+L}. In that case, it is created with 4 elements. 

References eina\+\_\+array\+\_\+new(), and eina\+\_\+file\+\_\+dir\+\_\+list().

\hypertarget{group__Eina__Module__Group_ga7a61fc6cae44ea9a085f2fe6b52e1f37}{\index{Module@{Module}!eina\+\_\+module\+\_\+list\+\_\+get@{eina\+\_\+module\+\_\+list\+\_\+get}}
\index{eina\+\_\+module\+\_\+list\+\_\+get@{eina\+\_\+module\+\_\+list\+\_\+get}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+list\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Array}$\ast$ eina\+\_\+module\+\_\+list\+\_\+get (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Array} $\ast$}]{array, }
\item[{const char $\ast$}]{path, }
\item[{{\bf Eina\+\_\+\+Bool}}]{recursive, }
\item[{{\bf Eina\+\_\+\+Module\+\_\+\+Cb}}]{cb, }
\item[{void $\ast$}]{data}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga7a61fc6cae44ea9a085f2fe6b52e1f37}


Get a list of modules found on the directory path. 


\begin{DoxyParams}{Parameters}
{\em array} & The array that stores the list of the modules. \\
\hline
{\em path} & The directory's path to search for modules. \\
\hline
{\em recursive} & Iterate recursively on the path. \\
\hline
{\em cb} & Callback function to call on each module. \\
\hline
{\em data} & Data passed to the callback function. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The array of modules found in {\ttfamily path}.
\end{DoxyReturn}
This function adds to {\ttfamily array} the list of modules found in {\ttfamily path}. If {\ttfamily recursive} is \hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+U\+E}, then recursive search is done. The callback {\ttfamily cb} is called on each module found, and {\ttfamily data} is passed to {\ttfamily cb}. If {\ttfamily path} is {\ttfamily N\+U\+L\+L}, the function returns immediately {\ttfamily array}. If the returned value of {\ttfamily cb} is {\ttfamily 0}, the module will not be added to the list, otherwise it will be added. {\ttfamily array} can be {\ttfamily N\+U\+L\+L}. In that case, it is created with 4 elements. {\ttfamily cb} can be {\ttfamily N\+U\+L\+L}. 

References eina\+\_\+array\+\_\+new(), and eina\+\_\+file\+\_\+dir\+\_\+list().

\hypertarget{group__Eina__Module__Group_gaf894f374f05fa6445a134b7eacc6727d}{\index{Module@{Module}!eina\+\_\+module\+\_\+list\+\_\+load@{eina\+\_\+module\+\_\+list\+\_\+load}}
\index{eina\+\_\+module\+\_\+list\+\_\+load@{eina\+\_\+module\+\_\+list\+\_\+load}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+list\+\_\+load}]{\setlength{\rightskip}{0pt plus 5cm}void eina\+\_\+module\+\_\+list\+\_\+load (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Array} $\ast$}]{array}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_gaf894f374f05fa6445a134b7eacc6727d}


Load every module on the list of modules. 


\begin{DoxyParams}{Parameters}
{\em array} & The array of modules to load.\\
\hline
\end{DoxyParams}
This function calls \hyperlink{group__Eina__Module__Group_ga53e898fe0c85e8c64e045151c3704e59}{eina\+\_\+module\+\_\+load()} on each element found in {\ttfamily array}. If {\ttfamily array} is {\ttfamily N\+U\+L\+L}, this function does nothing. 

References \+\_\+\+Eina\+\_\+\+Array\+::count, D\+B\+G, E\+I\+N\+A\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+I\+T\+E\+R\+\_\+\+N\+E\+X\+T, and eina\+\_\+module\+\_\+load().

\hypertarget{group__Eina__Module__Group_gaa0de0b199cd63a5906875a0a2f4c4fc0}{\index{Module@{Module}!eina\+\_\+module\+\_\+list\+\_\+unload@{eina\+\_\+module\+\_\+list\+\_\+unload}}
\index{eina\+\_\+module\+\_\+list\+\_\+unload@{eina\+\_\+module\+\_\+list\+\_\+unload}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+list\+\_\+unload}]{\setlength{\rightskip}{0pt plus 5cm}void eina\+\_\+module\+\_\+list\+\_\+unload (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Array} $\ast$}]{array}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_gaa0de0b199cd63a5906875a0a2f4c4fc0}


Unload every module on the list of modules. 


\begin{DoxyParams}{Parameters}
{\em array} & The array of modules to unload.\\
\hline
\end{DoxyParams}
This function calls \hyperlink{group__Eina__Module__Group_ga3ad28a963a93027359665f06268d95aa}{eina\+\_\+module\+\_\+unload()} on each element found in {\ttfamily array}. If {\ttfamily array} is {\ttfamily N\+U\+L\+L}, this function does nothing. 

References \+\_\+\+Eina\+\_\+\+Array\+::count, D\+B\+G, E\+I\+N\+A\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+I\+T\+E\+R\+\_\+\+N\+E\+X\+T, and eina\+\_\+module\+\_\+unload().

\hypertarget{group__Eina__Module__Group_ga12e5611bb58374c893334ff93509fcfa}{\index{Module@{Module}!eina\+\_\+module\+\_\+list\+\_\+free@{eina\+\_\+module\+\_\+list\+\_\+free}}
\index{eina\+\_\+module\+\_\+list\+\_\+free@{eina\+\_\+module\+\_\+list\+\_\+free}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+list\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}void eina\+\_\+module\+\_\+list\+\_\+free (
\begin{DoxyParamCaption}
\item[{{\bf Eina\+\_\+\+Array} $\ast$}]{array}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga12e5611bb58374c893334ff93509fcfa}


{\ttfamily Free} every module on the list of modules. 


\begin{DoxyParams}{Parameters}
{\em array} & The array of modules to free.\\
\hline
\end{DoxyParams}
This function calls \hyperlink{group__Eina__Module__Group_gaf30d4e595f74ab7b7ecff80e683d5d3b}{eina\+\_\+module\+\_\+free()} on each element found in {\ttfamily array}. If {\ttfamily array} is {\ttfamily N\+U\+L\+L}, this function does nothing. 

References \+\_\+\+Eina\+\_\+\+Array\+::count, D\+B\+G, eina\+\_\+array\+\_\+flush(), E\+I\+N\+A\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+I\+T\+E\+R\+\_\+\+N\+E\+X\+T, and eina\+\_\+module\+\_\+free().

\hypertarget{group__Eina__Module__Group_ga2f60ccf09dc1a7c57c7e2b29c57b4da7}{\index{Module@{Module}!eina\+\_\+module\+\_\+find@{eina\+\_\+module\+\_\+find}}
\index{eina\+\_\+module\+\_\+find@{eina\+\_\+module\+\_\+find}!Module@{Module}}
\subsubsection[{eina\+\_\+module\+\_\+find}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Module}$\ast$ eina\+\_\+module\+\_\+find (
\begin{DoxyParamCaption}
\item[{const {\bf Eina\+\_\+\+Array} $\ast$}]{array, }
\item[{const char $\ast$}]{module}
\end{DoxyParamCaption}
)}}\label{group__Eina__Module__Group_ga2f60ccf09dc1a7c57c7e2b29c57b4da7}


Find an module in array. 


\begin{DoxyParams}{Parameters}
{\em array} & The array to find the module. \\
\hline
{\em module} & The name of module to be searched. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The module to find on success, {\ttfamily N\+U\+L\+L} otherwise.
\end{DoxyReturn}
This function finds an {\ttfamily module} in {\ttfamily array}. If the element is found the function returns the module, else {\ttfamily N\+U\+L\+L} is returned. 

References alloca(), E\+I\+N\+A\+\_\+\+A\+R\+R\+A\+Y\+\_\+\+I\+T\+E\+R\+\_\+\+N\+E\+X\+T, and eina\+\_\+module\+\_\+file\+\_\+get().

