Document of c-modernization-kit (funcman) 1.0.0
Loading...
Searching...
No Matches
funcman.h
Go to the documentation of this file.
1
22
23#ifndef FUNCMAN_H
24#define FUNCMAN_H
25
26#ifndef _WIN32
27 #ifndef _GNU_SOURCE
28 #define _GNU_SOURCE
29 #endif /* _GNU_SOURCE */
30#endif /* _WIN32 */
31
32#include <stddef.h>
33
34#ifndef _WIN32
35 #include <dlfcn.h>
36 #include <pthread.h>
37#else /* _WIN32 */
38 #include <windows.h>
39#endif /* _WIN32 */
40
41#ifdef __cplusplus
42extern "C"
43{
44#endif /* __cplusplus */
45
50#ifndef _WIN32
51 #define MODULE_HANDLE void *
52#else /* _WIN32 */
53 #define MODULE_HANDLE HMODULE
54#endif /* _WIN32 */
55
56#define FUNCMAN_NAME_MAX 256
57
66 typedef struct
67 {
68 const char *func_key;
72 void *func_ptr;
74 int padding;
75#ifndef _WIN32
76 pthread_mutex_t mutex;
77#else /* _WIN32 */
78 SRWLOCK lock;
79#endif /* _WIN32 */
81
89#ifndef _WIN32
90 #define NEW_FUNCMAN_OBJECT(key, type) {(key), {0}, {0}, NULL, NULL, 0, 0, PTHREAD_MUTEX_INITIALIZER}
91#else /* _WIN32 */
92 #define NEW_FUNCMAN_OBJECT(key, type) {(key), {0}, {0}, NULL, NULL, 0, 0, SRWLOCK_INIT}
93#endif /* _WIN32 */
94
105 extern void *_funcman_get_func(funcman_object *fobj);
106
114#define funcman_get_func(fobj, type) ((type)_funcman_get_func(fobj))
115
128
140 extern void funcman_init(funcman_object *const *fobj_array, const size_t fobj_length,
141 const char *configpath);
142
153 extern void funcman_dispose(funcman_object *const *fobj_array, const size_t fobj_length);
154
164 extern int funcman_info(funcman_object *const *fobj_array, const size_t fobj_length);
165
176 extern int get_lib_path(char *out_path, const size_t out_path_sz, const void *func_addr);
177
191 extern int get_lib_basename(char *out_basename, const size_t out_basename_sz,
192 const void *func_addr);
193
194#ifdef __cplusplus
195}
196#endif /* __cplusplus */
197
198#endif /* FUNCMAN_H */
int get_lib_basename(char *out_basename, const size_t out_basename_sz, const void *func_addr)
指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。
#define MODULE_HANDLE
Linux/Windows 共通のモジュールハンドル型。
Definition funcman.h:51
void funcman_dispose(funcman_object *const *fobj_array, const size_t fobj_length)
funcman_object ポインタ配列を解放します。
#define FUNCMAN_NAME_MAX
lib_name / func_name 配列の最大長 (終端 '\0' を含む)。
Definition funcman.h:56
int funcman_info(funcman_object *const *fobj_array, const size_t fobj_length)
funcman_object ポインタ配列の内容を標準出力に表示します。
int funcman_is_declared_default(funcman_object *fobj)
funcman_object が明示的デフォルトかどうかを返します。
void * _funcman_get_func(funcman_object *fobj)
拡張関数ポインタを返します。この関数は内部用です。
void funcman_init(funcman_object *const *fobj_array, const size_t fobj_length, const char *configpath)
funcman_object ポインタ配列を初期化します。
int get_lib_path(char *out_path, const size_t out_path_sz, const void *func_addr)
指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。
関数ポインタキャッシュエントリ。
Definition funcman.h:67
MODULE_HANDLE handle
キャッシュ済みハンドル (NULL = 未ロード)。
Definition funcman.h:71
int padding
パディング。
Definition funcman.h:74
char func_name[FUNCMAN_NAME_MAX]
関数シンボル名。[0]=='\0' = 未設定。
Definition funcman.h:70
int resolved
解決済フラグ (0 = 未解決)。
Definition funcman.h:73
void * func_ptr
キャッシュ済み関数ポインタ (NULL = 未取得)。
Definition funcman.h:72
char lib_name[FUNCMAN_NAME_MAX]
拡張子なしライブラリ名。[0]=='\0' = 未設定。
Definition funcman.h:69
const char * func_key
この関数インスタンスの識別キー。
Definition funcman.h:68
pthread_mutex_t mutex
ロード処理を保護する mutex (Linux)。
Definition funcman.h:76