このページを編集する際は、[[解読日記一覧]]の「概要」に従ってください。

*タイトル [#p4aedd7d]

-同じ名前の下位関数が複数存在:errstart()/解読日記

*事例 [#u5ec67a7]

-[[errstart()/postgresql-8.1.4]]
-[[ereport()/postgresql-8.1.4]]

*課題 [#l4fae8c3]

関数ereport()から下位関数errstart()が呼び出されている。

しかし、関数errstart()をソース全体からgrepすると、elog.c と ipc_test.c の2つのファイルで定義が存在する。

*解決方法 [#o2fa7185]

通常は、以下の青の領域のソースファイルがコンパイル・リンクされ、矢印の流れで関数が呼び出されると想像される。

#ref(./original_bin.gif,nolink);

しかし、ipc_testのメイクファイルを確認したところ、elog.cはリンク対象に含まれておらず、さらにerrstart()がipc_test.c内で定義されている。

つまり、ipc_testをビルドした場合は、以下のオレンジの領域のソースファイルがコンパイル・リンクされ、ビルドされたipc_testを実行すると矢印の流れで関数が呼び出される。

#ref(./test_bin.gif,nolink);

現在は、ipc_testバイナリについて読解しているので、[[errstart()/postgresql-8.1.4]]の概要に、以下のような説明を付記することにする。

-以下のバイナリでリンクされている。
--ipc_test(メイン関数[[main()/ipc_test/postgresql-8.1.4]])

また、同じ ereport() を使用していても、 elog.c と ipc_test.c のどちらをリンクしているかで、動作が異なり、リンク方法によって、ereport()の概要が異なってくることがわかる。
対応として、上位関数[[ereport()/postgresql-8.1.4]]内でのコメントでは、以下のように記載することにする。

-バイナリipc_test(メイン関数[[main()/ipc_test/postgresql-8.1.4]])の場合 -- elevelが20以上ならTRUE、それ以外はFALSEを返す。

さらに、[[ereport()/postgresql-8.1.4]]の概要についても、バイナリ毎に説明を分けて記載するようにする。

**2007/11/11追記: [#sf9660b9]

Wikiページのフォーマットを下記のように変更した。

''1.各Wikiページのページ名に、バイナリ名を含める''

例:バイナリがipc_testであれば、
PGSharedMemoryCreate()/postgresql-8.1.4⇒PGSharedMemoryCreate()/ipc_test/postgresql-8.1.4

-同じソースであっても、リンクしているバイナリによって動作が異なる場合があると考えたので、バイナリによって別のページにして読むことにする。
-同じソースに関するページが複数になってしまうのが、これらをどのように整理するかは今後考える。
-同じソースに関するページが複数になってしまうが、これらをどのように整理するかは今後考える。

''2.「対象」項目をバージョン表記からバイナリ名を含めた形に拡張''

例:バイナリがipc_testであれば、
対象:8.1.4⇒対象:ipc_test/postgresql-8.1.4

-ソースファイル毎の関数一覧のように、バイナリ毎の関数一覧も作る。


*履歴 [#if97d49e]

|更新日|更新者|更新内容|
|2007/07/08|[[testnoda/ページ作者]]|新規作成|
|2007/11/11|[[testnoda/ページ作者]]|追記|

*コメント [#c8515f32]

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS