diff options
author | Sergey Vlasov <vsu@altlinux.ru> | 2006-11-09 00:34:27 -0500 |
---|---|---|
committer | Dmitry Torokhov <dtor@insightbb.com> | 2006-11-09 00:34:27 -0500 |
commit | eb5d5829b368c5e32f248a70797bee5a414a2ef0 (patch) | |
tree | 5c65bfd305a720f0d9802f4a086a09e129091b91 /drivers/input/mouse/psmouse-base.c | |
parent | 721556150e397f606a3f029736d77a27503f94e2 (diff) |
Input: psmouse - fix attribute access on 64-bit systems
psmouse_show_int_attr() and psmouse_set_int_attr() were accessing
unsigned int fields as unsigned long, which gave garbage on x86_64.
Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/mouse/psmouse-base.c')
-rw-r--r-- | drivers/input/mouse/psmouse-base.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 9144df65e703..58beca99a9c3 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c | |||
@@ -1349,14 +1349,14 @@ ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *dev | |||
1349 | 1349 | ||
1350 | static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf) | 1350 | static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf) |
1351 | { | 1351 | { |
1352 | unsigned long *field = (unsigned long *)((char *)psmouse + (size_t)offset); | 1352 | unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset); |
1353 | 1353 | ||
1354 | return sprintf(buf, "%lu\n", *field); | 1354 | return sprintf(buf, "%u\n", *field); |
1355 | } | 1355 | } |
1356 | 1356 | ||
1357 | static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t count) | 1357 | static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t count) |
1358 | { | 1358 | { |
1359 | unsigned long *field = (unsigned long *)((char *)psmouse + (size_t)offset); | 1359 | unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset); |
1360 | unsigned long value; | 1360 | unsigned long value; |
1361 | char *rest; | 1361 | char *rest; |
1362 | 1362 | ||
@@ -1364,6 +1364,9 @@ static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const | |||
1364 | if (*rest) | 1364 | if (*rest) |
1365 | return -EINVAL; | 1365 | return -EINVAL; |
1366 | 1366 | ||
1367 | if ((unsigned int)value != value) | ||
1368 | return -EINVAL; | ||
1369 | |||
1367 | *field = value; | 1370 | *field = value; |
1368 | 1371 | ||
1369 | return count; | 1372 | return count; |