diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-05-02 22:33:57 +0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-05-02 22:33:57 +0400 |
commit | 1fb5fef9b80d9a3b5368e22031627afd1585487b (patch) | |
tree | 54f07a532b5b2622b8642156bbcaeca637fcdb8f /drivers/rtc/rtc-dev.c | |
parent | 1a2e8a6f8ec0a068911a882a19e0912a0c89be6e (diff) | |
parent | 330ab71619bacc4d4494227a6cfc9b7f5500403d (diff) | |
download | linux-1fb5fef9b80d9a3b5368e22031627afd1585487b.tar.xz |
Merge branch 'master' into upstream
Diffstat (limited to 'drivers/rtc/rtc-dev.c')
-rw-r--r-- | drivers/rtc/rtc-dev.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index b1e3e6179e56..6c9ad92747fd 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c @@ -58,7 +58,7 @@ rtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) unsigned long data; ssize_t ret; - if (count < sizeof(unsigned long)) + if (count != sizeof(unsigned int) && count < sizeof(unsigned long)) return -EINVAL; add_wait_queue(&rtc->irq_queue, &wait); @@ -90,11 +90,16 @@ rtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) if (ret == 0) { /* Check for any data updates */ if (rtc->ops->read_callback) - data = rtc->ops->read_callback(rtc->class_dev.dev, data); - - ret = put_user(data, (unsigned long __user *)buf); - if (ret == 0) - ret = sizeof(unsigned long); + data = rtc->ops->read_callback(rtc->class_dev.dev, + data); + + if (sizeof(int) != sizeof(long) && + count == sizeof(unsigned int)) + ret = put_user(data, (unsigned int __user *)buf) ?: + sizeof(unsigned int); + else + ret = put_user(data, (unsigned long __user *)buf) ?: + sizeof(unsigned long); } return ret; } |