概要

第二回ハッカソン

前回からの進捗をまとめたり,最終的な着地点を決めたりした.

マージ

repo

前回は第一目標であったPRの作成まで完了した.

2日程経って下のメッセージと共にマージされた

Thank you for your contribution to this repostiory. Due to energy reasons, this repostiory has recently lacked maintenance. I will improve this repostiory in the near future. (Including more comprehensive documentation/automated testing under different platforms/automated testing under different kernel versions etc.) If you have good ideas, you can communicate here at any time.

調査

マージされたけど,まだ使った事が無かったので使ってみる.

改めてドキュメントを読みながらコードを書いていたらいくつか問題に気付いたので,その改善を目標とする.

問題点

version

ドキュメント読んでて気付いたが,GitHubに最新のコードが無い. crates.ioにあるバージョンは0.2.10だが,GitHubのは0.2.7

lifetime

監視対象のパスを指定するのに,オリジナルでは文字列が&'static strであった.

&'staticなデータはコンパイル時に確定している必要がある(という認識)ので,あまりにも不便である.

high_level

high_level.rsに微細なミスがあったり,なんか使いづらったりする.

改善

version

最新のバージョンのソースコードが欲しいけど,やりとりを考えると時間がかかるのでずはforkを色々改善する.

lifetime

nixを参考にtraitを実装して使いやすくした.

high_level

ここの改善が今後の目標となる.

nonblockingも使えるようにしたり, Fanotifyを生のfdから生やせるようにしたり, mountpointを監視対象に追加できるようにしたり, ちょっと綺麗にしたりした.

fanotify_event_metadataにあるmaskはイベントの種類がビットマスクで設定されているが,これが厄介で,一つのmetadataに複数のイベントが設定されることがある(man参照).

扱いが面倒なので,一旦enumでイベントを定義した

まだ実装が汚いので改善の余地あり.

また,high_levelにあるread_eventが微妙で,あまりhigh_levelな気がしないので,PoCにあったようなpollを使った実装も追加したい.