Document of c-modernization-kit (funcman) 1.0.0
Loading...
Searching...
No Matches
funcman.h File Reference

関数動的呼び出し機構 (funcman) の公開 API ヘッダー。 More...

#include <stddef.h>
#include <dlfcn.h>
#include <pthread.h>
Include dependency graph for funcman.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  funcman_object
 関数ポインタキャッシュエントリ。 More...

Macros

#define _GNU_SOURCE
#define MODULE_HANDLE   void *
 Linux/Windows 共通のモジュールハンドル型。
#define FUNCMAN_NAME_MAX   256
 lib_name / func_name 配列の最大長 (終端 '\0' を含む)。
#define NEW_FUNCMAN_OBJECT(key, type)
 funcman_object 静的変数の初期化マクロ。
#define funcman_get_func(fobj, type)
 拡張関数ポインタを返します。

Functions

void * _funcman_get_func (funcman_object *fobj)
 拡張関数ポインタを返します。この関数は内部用です。
int funcman_is_declared_default (funcman_object *fobj)
 funcman_object が明示的デフォルトかどうかを返します。
void funcman_init (funcman_object *const *fobj_array, const size_t fobj_length, const char *configpath)
 funcman_object ポインタ配列を初期化します。
void funcman_dispose (funcman_object *const *fobj_array, const size_t fobj_length)
 funcman_object ポインタ配列を解放します。
int funcman_info (funcman_object *const *fobj_array, const size_t fobj_length)
 funcman_object ポインタ配列の内容を標準出力に表示します。
int get_lib_path (char *out_path, const size_t out_path_sz, const void *func_addr)
 指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。
int get_lib_basename (char *out_basename, const size_t out_basename_sz, const void *func_addr)
 指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。

Detailed Description

関数動的呼び出し機構 (funcman) の公開 API ヘッダー。

Author
c-modenization-kit sample team
Date
2026/03/17
Version
1.0.0

funcman は、テキスト設定ファイルから関数シンボルとライブラリ名を読み込み、 実行時に動的リンクで関数を解決するキャッシュ機構です。

使用方法:

  1. funcman_object を NEW_FUNCMAN_OBJECT マクロで静的初期化する。
  2. funcman_init() でテキスト設定ファイルを読み込む (DllMain/constructor から呼ぶ)。
  3. funcman_get_func() で関数ポインタを取得して呼び出す。
  4. funcman_dispose() でリソースを解放する (DllMain/destructor から呼ぶ)。

Definition in file funcman.h.

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 28 of file funcman.h.

◆ MODULE_HANDLE

#define MODULE_HANDLE   void *

Linux/Windows 共通のモジュールハンドル型。

Definition at line 51 of file funcman.h.

◆ FUNCMAN_NAME_MAX

#define FUNCMAN_NAME_MAX   256

lib_name / func_name 配列の最大長 (終端 '\0' を含む)。

Definition at line 56 of file funcman.h.

Referenced by _funcman_get_func(), and funcman_init().

◆ NEW_FUNCMAN_OBJECT

#define NEW_FUNCMAN_OBJECT ( key,
type )
Value:
{(key), {0}, {0}, NULL, NULL, 0, 0, PTHREAD_MUTEX_INITIALIZER}

funcman_object 静的変数の初期化マクロ。

Parameters
[in]keyこの関数インスタンスの識別キー (文字列リテラル)。
[in]type格納する関数ポインタの型 (例: sample_func_t)。

Definition at line 90 of file funcman.h.

◆ funcman_get_func

#define funcman_get_func ( fobj,
type )
Value:
((type)_funcman_get_func(fobj))
void * _funcman_get_func(funcman_object *fobj)
拡張関数ポインタを返します。この関数は内部用です。

拡張関数ポインタを返します。

Parameters
[in]fobjfuncman_object へのポインタ。
[in]typeNEW_FUNCMAN_OBJECT で指定したものと同じ関数ポインタ型。

Definition at line 114 of file funcman.h.

Function Documentation

◆ _funcman_get_func()

void * _funcman_get_func ( funcman_object * fobj)
extern

拡張関数ポインタを返します。この関数は内部用です。

既にロード済みの場合は即座に格納済みの関数ポインタを返します。

Parameters
[in,out]fobjfuncman_object へのポインタ。
Returns
成功時 void * (関数ポインタ)、失敗時 NULL。

Definition at line 21 of file funcman_get_func.c.

References funcman_object::func_name, funcman_object::func_ptr, FUNCMAN_NAME_MAX, funcman_object::handle, funcman_object::lib_name, funcman_object::mutex, and funcman_object::resolved.

Referenced by funcman_info(), and funcman_is_declared_default().

Here is the caller graph for this function:

◆ funcman_is_declared_default()

int funcman_is_declared_default ( funcman_object * fobj)
extern

funcman_object が明示的デフォルトかどうかを返します。

lib_name と func_name がともに定義ファイルで default に設定されている場合に 1 を返します。
それ以外の場合は 0 を返します。

Parameters
[in]fobjfuncman_object へのポインタ。
Returns
明示的デフォルトの場合は 1、それ以外は 0。

Definition at line 17 of file funcman_is_declared_default.c.

References _funcman_get_func(), and funcman_object::resolved.

Here is the call graph for this function:

◆ funcman_init()

void funcman_init ( funcman_object *const * fobj_array,
const size_t fobj_length,
const char * configpath )
extern

funcman_object ポインタ配列を初期化します。

必ず、constructor / DllMain コンテキストから呼ぶようにしてください。

Parameters
[in]fobj_arrayfuncman_object ポインタ配列。
[in]fobj_length配列の要素数。
[in]configpath定義ファイルのパス。

Definition at line 37 of file funcman_init.c.

References CONFIG_LINE_MAX, funcman_object::func_key, funcman_object::func_name, FUNCMAN_NAME_MAX, and funcman_object::lib_name.

◆ funcman_dispose()

void funcman_dispose ( funcman_object *const * fobj_array,
const size_t fobj_length )
extern

funcman_object ポインタ配列を解放します。

必ず、destructor / DllMain コンテキストから呼ぶようにしてください。

Parameters
[in]fobj_arrayfuncman_object ポインタ配列。
[in]fobj_length配列の要素数。

Definition at line 17 of file funcman_dispose.c.

References funcman_object::func_ptr, and funcman_object::handle.

◆ funcman_info()

int funcman_info ( funcman_object *const * fobj_array,
const size_t fobj_length )
extern

funcman_object ポインタ配列の内容を標準出力に表示します。

Parameters
[in]fobj_arrayfuncman_object ポインタ配列。
[in]fobj_length配列の要素数。
Returns
すべてのエントリが正常に解決されている場合は 0、1 つでも失敗している場合は -1 を返します。

Definition at line 21 of file funcman_info.c.

References _funcman_get_func(), funcman_object::func_key, funcman_object::func_name, funcman_object::func_ptr, funcman_object::handle, funcman_object::lib_name, and funcman_object::resolved.

Here is the call graph for this function:

◆ get_lib_path()

int get_lib_path ( char * out_path,
const size_t out_path_sz,
const void * func_addr )
extern

指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。

Parameters
[out]out_path出力バッファ。
[in]out_path_sz出力バッファサイズ[byte]。
[in]func_addr所属モジュールを特定するための関数アドレス。
Returns
関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。

Definition at line 313 of file get_lib_info.c.

References get_self_path_posix(), and MYLIB_OK.

Referenced by get_lib_basename().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_lib_basename()

int get_lib_basename ( char * out_basename,
const size_t out_basename_sz,
const void * func_addr )
extern

指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。

Linux の .so.1.2.3 のようなバージョン付きは ".so." より前を basename とみなします。

Parameters
[out]out_basename出力バッファ。
[in]out_basename_sz出力バッファサイズ[byte]。
[in]func_addr所属モジュールを特定するための関数アドレス。
Returns
関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。

Definition at line 331 of file get_lib_info.c.

References copy_str(), get_ilename_part(), get_lib_path(), MYLIB_EFAIL, MYLIB_EINVAL, MYLIB_OK, and strip_extension_inplace().

Here is the call graph for this function: