-
Notifications
You must be signed in to change notification settings - Fork 455
Closed
Labels
Type: FeatureNew FeatureNew Feature
Description
現状の問題点
ラズパイマウスのデバドラでは独自関数を使用してデバイスファイルに書き込んだ文字列をintに変換しています。
RaspberryPiMouse/src/drivers/rtmouse.c
Line 838 in 88c78fe
| static int parseFreq(const char __user *buf, size_t count, int *ret) |
この関数では"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を返すように変更すると、ファイルへの書き込みが正常終了せず後方互換性が失われます。
その他
この変更について、社内で確認したところ既存のマニュアルや本デバイスドライバを利用したプログラムで不都合がおきることはなさそうでした。
Metadata
Metadata
Assignees
Labels
Type: FeatureNew FeatureNew Feature