# funcman/libsrc/funcman/get_lib_info.c

# 1 ファイル

## 1.1 funcman/libsrc/funcman/get_lib_info.c

共有ライブラリ自身 (.so/.dll) の絶対パスと basename (パスなし・拡張子なし) を取得します。

Linux(gcc) では dladdr() で共有オブジェクトを特定し、realpath() で可能な限り正規化 (絶対化・symlink 解決) します。 Windows(MSVC) では GetModuleHandleEx() で DLL の HMODULE を得て、GetModuleFileNameW() でパスを取得します。

### 1.1.1 作者

c-modenization-kit sample team

### 1.1.2 バージョン

1.0.0

### 1.1.3 日付

2026/02/23

### 1.1.4 補足

- 「絶対パス」は OS/ローダの情報とファイルシステム状態に依存します。 Linux でロード後にファイルが移動/削除される等により realpath() が失敗する場合、可能な範囲で絶対化した文字列を返します。

- Windows は基本的にフルパスが得られますが、古い環境では MAX_PATH 制約が残る場合があります。

### 1.1.5 著作権

Copyright (C) CompanyName, Ltd. 2026. All rights reserved.

# 2 関数

## 2.1 copy_str

    static get_lib_info_status_t copy_str ( char *dst, size_t dst_sz, const char *src )

文字列を安全にコピーします (UTF-8 想定だが単なる byte 列として扱う)。

### 2.1.1 引数

- dst [out] 出力バッファ。
- dst_sz [in] 出力バッファサイズ[byte]。
- src [in] 入力文字列 (NULL 終端)。

### 2.1.2 戻り値

get_lib_info_status_t

## 2.2 get_ilename_part

    static const char *get_ilename_part ( const char *path )

パス文字列からファイル名部分 (最後の区切り文字以降) を返します。

### 2.2.1 引数

- path [in] パス。

### 2.2.2 戻り値

const char* ファイル名部分へのポインタ (元の文字列内)。

## 2.3 strip_extension_inplace

    static void strip_extension_inplace ( char *s )

拡張子を取り除きます (その場で書き換え)。

- Linux: “.so.” が含まれる場合はそこから先を削除 (例: libx.so.1.2.3 -> libx)
  - Linux: 末尾が “.so” の場合は削除 (例: libx.so -> libx)
  - その他: 最後の ‘.’ 以降を削除 (一般的な拡張子扱い)

### 2.3.1 引数

- s [in,out] 対象文字列 (NULL 終端)。

## 2.4 get_self_path_posix

    static get_lib_info_status_t get_self_path_posix ( char *out_path, size_t out_path_sz, const void *func_addr )

.so 自身の絶対パスを取得します (Linux/Unix)。

dladdr() に指定された関数アドレスを渡して所属共有オブジェクトを取得し、
realpath() で可能な限り絶対化・正規化します。

### 2.4.1 引数

- out_path [out] 出力 (UTF-8、NULL 終端)。
- out_path_sz [in] 出力バッファサイズ[byte]。
- func_addr [in] 所属モジュールを特定するための関数アドレス。

### 2.4.2 戻り値

get_lib_info_status_t

## 2.5 get_lib_path

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

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

### 2.5.1 引数

- out_path [out] 出力バッファ。
- out_path_sz [in] 出力バッファサイズ[byte]。
- func_addr [in] 所属モジュールを特定するための関数アドレス。

### 2.5.2 戻り値

関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。

## 2.6 get_lib_basename

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

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

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

### 2.6.1 引数

- out_basename [out] 出力バッファ。
- out_basename_sz [in] 出力バッファサイズ[byte]。
- func_addr [in] 所属モジュールを特定するための関数アドレス。

### 2.6.2 戻り値

関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。

# 3 型

## 3.1 get_lib_info_status_t

内部関数の戻り値(ステータス)。

列挙子 | 値 | 説明
--- | --- | ---
MYLIB_OK | 0 | 成功
MYLIB_EINVAL | -1 | 引数不正 (NULL、サイズ0など)
MYLIB_ENOBUFS | -2 | バッファ不足 (出力が収まらない)
MYLIB_EFAIL | -3 | その他の失敗 (取得不能、OS API 失敗など)

## 3.2 get_lib_info_status_t

    typedef enum get_lib_info_status_t get_lib_info_status_t;

内部関数の戻り値(ステータス)。