lkml.org 
[lkml]   [2011]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3] mfd/ab8500: Convert to kstrtou8_from_user
    Date
    This patch replaces the code for getting an number from a
    userspace buffer by a simple call to kstrou8_from_user.
    This makes it easier to read and less error prone.

    This patch replaces the code for getting an number from a
    userspace buffer by a simple call to kstrou8_from_user.
    This makes it easier to read and less error prone.

    Since the old buffers held only values up to 255, we don't need
    kstrtoul, but rather kstrtou8.

    Kernel Version: v3.0-rc3

    Changes in v2:
    - Use kstrtou8 instead of kstrtoul due to small numbers
    - Dropped then unnecessary checks
    (Both remarks from Alexey Dobriyan, Thanks!)
    Changes in v3:
    The local struct dev variable isn't needed anymore

    Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
    ---
    drivers/mfd/ab8500-debugfs.c | 62 +++++++++++------------------------------
    1 files changed, 17 insertions(+), 45 deletions(-)

    diff --git a/drivers/mfd/ab8500-debugfs.c b/drivers/mfd/ab8500-debugfs.c
    index 64748e4..bb78f4a 100644
    --- a/drivers/mfd/ab8500-debugfs.c
    +++ b/drivers/mfd/ab8500-debugfs.c
    @@ -419,20 +419,13 @@ static ssize_t ab8500_bank_write(struct file *file,
    size_t count, loff_t *ppos)
    {
    struct device *dev = ((struct seq_file *)(file->private_data))->private;
    - char buf[32];
    - int buf_size;
    - unsigned long user_bank;
    + u8 user_bank;
    int err;

    - /* Get userspace string and assure termination */
    - buf_size = min(count, (sizeof(buf) - 1));
    - if (copy_from_user(buf, user_buf, buf_size))
    - return -EFAULT;
    - buf[buf_size] = 0;
    -
    - err = strict_strtoul(buf, 0, &user_bank);
    + /* Get userspace string and convert to number */
    + err = kstrtou8_from_user(user_buf, count, 0, &user_bank);
    if (err)
    - return -EINVAL;
    + return err;

    if (user_bank >= AB8500_NUM_BANKS) {
    dev_err(dev, "debugfs error input > number of banks\n");
    @@ -441,7 +434,7 @@ static ssize_t ab8500_bank_write(struct file *file,

    debug_bank = user_bank;

    - return buf_size;
    + return count;
    }

    static int ab8500_address_print(struct seq_file *s, void *p)
    @@ -458,27 +451,16 @@ static ssize_t ab8500_address_write(struct file *file,
    const char __user *user_buf,
    size_t count, loff_t *ppos)
    {
    - struct device *dev = ((struct seq_file *)(file->private_data))->private;
    - char buf[32];
    - int buf_size;
    - unsigned long user_address;
    + u8 user_address;
    int err;

    - /* Get userspace string and assure termination */
    - buf_size = min(count, (sizeof(buf) - 1));
    - if (copy_from_user(buf, user_buf, buf_size))
    - return -EFAULT;
    - buf[buf_size] = 0;
    -
    - err = strict_strtoul(buf, 0, &user_address);
    + /* Get userspace string and convert to number*/
    + err = kstrtou8_from_user(user_buf, count, 0, &user_address);
    if (err)
    - return -EINVAL;
    - if (user_address > 0xff) {
    - dev_err(dev, "debugfs error input > 0xff\n");
    - return -EINVAL;
    - }
    + return err;
    +
    debug_address = user_address;
    - return buf_size;
    + return count;
    }

    static int ab8500_val_print(struct seq_file *s, void *p)
    @@ -509,24 +491,14 @@ static ssize_t ab8500_val_write(struct file *file,
    size_t count, loff_t *ppos)
    {
    struct device *dev = ((struct seq_file *)(file->private_data))->private;
    - char buf[32];
    - int buf_size;
    - unsigned long user_val;
    + u8 user_val;
    int err;

    - /* Get userspace string and assure termination */
    - buf_size = min(count, (sizeof(buf)-1));
    - if (copy_from_user(buf, user_buf, buf_size))
    - return -EFAULT;
    - buf[buf_size] = 0;
    -
    - err = strict_strtoul(buf, 0, &user_val);
    + /* Get userspace string and convert to number */
    + err = kstrtou8_from_user(user_buf, count, 0, &user_val);
    if (err)
    - return -EINVAL;
    - if (user_val > 0xff) {
    - dev_err(dev, "debugfs error input > 0xff\n");
    - return -EINVAL;
    - }
    + return err;
    +
    err = abx500_set_register_interruptible(dev,
    (u8)debug_bank, debug_address, (u8)user_val);
    if (err < 0) {
    @@ -534,7 +506,7 @@ static ssize_t ab8500_val_write(struct file *file,
    return -EINVAL;
    }

    - return buf_size;
    + return count;
    }

    static const struct file_operations ab8500_bank_fops = {
    --
    1.7.3.4


    \
     
     \ /
      Last update: 2011-06-20 21:53    [W:0.027 / U:1.032 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site