rt-net / RaspberryPiMouse

Raspberry Pi Mouse Device Driver
Other
60 stars 458 forks source link

parseFreqで整数形式に変換できなければエラーを返すようにする #55

Closed Tiryoh closed 2 years ago

Tiryoh commented 4 years ago

現状の問題点

ラズパイマウスのデバドラでは独自関数を使用してデバイスファイルに書き込んだ文字列をintに変換しています。 https://github.com/rt-net/RaspberryPiMouse/blob/88c78fea2d6b9b9f53d84d76867966538598b239/src/drivers/rtmouse.c#L838

この関数では"12.5"や"12-5"のような数字以外の文字列を含む入力の場合、どちらも"125"と変換されます。 現状のROSパッケージやサンプルプログラムではint以外を入力しない使い方をしているので問題は出ていないようですが、"12.5"を入力した際に"12"ではなく"125"と変換されるのは望ましい実装ではないと思います。

改善案

そこでこのparseFreq関数ではint以外を受け付けないことにしている(intだけを引数として取る前提)ため、Linux kernelのkstrtox.c内の関数と同様に、intに変換できない値が指定された場合にはInvalid argument(-22)を返すように変更しようと思います。 https://github.com/torvalds/linux/blob/master/lib/kstrtox.c

現状ではintに変換できないような値が書き込まれた場合、エラーを返さず、正常にデバイスファイルへ書き込みできたことを示す値(デバイスファイルへの入力文字数)を返しています。これをInvalid argumentを返すように変更すると、ファイルへの書き込みが正常終了せず後方互換性が失われます。

その他

この変更について、社内で確認したところ既存のマニュアルや本デバイスドライバを利用したプログラムで不都合がおきることはなさそうでした。