diff options
| author | John W. Linville <linville@tuxdriver.com> | 2006-05-05 16:50:23 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2006-05-05 16:50:23 -0400 |
| commit | aad61439e6a00bdb72cb649e11f6e166590c5f66 (patch) | |
| tree | 2279f3c2a15f81526d14182c6acb358cafd0b359 /drivers/rtc/rtc-dev.c | |
| parent | 3c304956755fa63ee80ca51ce38078fe1c4e8818 (diff) | |
| parent | d98550e334715b2d9e45f8f0f4e1608720108640 (diff) | |
Merge branch 'from-linus' 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; } |
