* [PATCH] HID: roccat: Drop cast
@ 2014-06-26 17:28 Himangi Saraogi
2014-06-26 17:38 ` Joe Perches
2014-06-26 22:35 ` Jiri Kosina
0 siblings, 2 replies; 9+ messages in thread
From: Himangi Saraogi @ 2014-06-26 17:28 UTC (permalink / raw)
To: Stefan Achatz, Jiri Kosina, linux-input, linux-kernel; +Cc: julia.lawall
This patch removes the cast on data of type void* as it is not needed.
The following Coccinelle semantic patch was used for making the change:
@r@
expression x;
void* e;
type T;
identifier f;
@@
(
*((T *)e)
|
((T *)x)[...]
|
((T *)x)->f
|
- (T *)
e
)
Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
Acked-by: Julia Lawall <julia.lawall@lip6.fr>
---
drivers/hid/hid-roccat-lua.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/hid/hid-roccat-lua.c b/drivers/hid/hid-roccat-lua.c
index 6adc0fa..65e2e76 100644
--- a/drivers/hid/hid-roccat-lua.c
+++ b/drivers/hid/hid-roccat-lua.c
@@ -61,7 +61,7 @@ static ssize_t lua_sysfs_write(struct file *fp, struct kobject *kobj,
return -EINVAL;
mutex_lock(&lua->lua_lock);
- retval = roccat_common2_send(usb_dev, command, (void *)buf, real_size);
+ retval = roccat_common2_send(usb_dev, command, buf, real_size);
mutex_unlock(&lua->lua_lock);
return retval ? retval : real_size;
--
1.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-26 17:28 [PATCH] HID: roccat: Drop cast Himangi Saraogi
@ 2014-06-26 17:38 ` Joe Perches
2014-06-27 5:29 ` Julia Lawall
2014-06-26 22:35 ` Jiri Kosina
1 sibling, 1 reply; 9+ messages in thread
From: Joe Perches @ 2014-06-26 17:38 UTC (permalink / raw)
To: Himangi Saraogi
Cc: Stefan Achatz, Jiri Kosina, linux-input, linux-kernel, julia.lawall
On Thu, 2014-06-26 at 22:58 +0530, Himangi Saraogi wrote:
> This patch removes the cast on data of type void* as it is not needed.
Hi Himangi
The cast of a const void * to a void * was odd.
Maybe a mechanism to verify appropriateness of
loss of constness for any pointer might be useful.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-26 17:28 [PATCH] HID: roccat: Drop cast Himangi Saraogi
2014-06-26 17:38 ` Joe Perches
@ 2014-06-26 22:35 ` Jiri Kosina
1 sibling, 0 replies; 9+ messages in thread
From: Jiri Kosina @ 2014-06-26 22:35 UTC (permalink / raw)
To: Himangi Saraogi; +Cc: Stefan Achatz, linux-input, linux-kernel, julia.lawall
On Thu, 26 Jun 2014, Himangi Saraogi wrote:
> This patch removes the cast on data of type void* as it is not needed.
> The following Coccinelle semantic patch was used for making the change:
>
> @r@
> expression x;
> void* e;
> type T;
> identifier f;
> @@
>
> (
> *((T *)e)
> |
> ((T *)x)[...]
> |
> ((T *)x)->f
> |
> - (T *)
> e
> )
>
> Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
> Acked-by: Julia Lawall <julia.lawall@lip6.fr>
> ---
> drivers/hid/hid-roccat-lua.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/hid/hid-roccat-lua.c b/drivers/hid/hid-roccat-lua.c
> index 6adc0fa..65e2e76 100644
> --- a/drivers/hid/hid-roccat-lua.c
> +++ b/drivers/hid/hid-roccat-lua.c
> @@ -61,7 +61,7 @@ static ssize_t lua_sysfs_write(struct file *fp, struct kobject *kobj,
> return -EINVAL;
>
> mutex_lock(&lua->lua_lock);
> - retval = roccat_common2_send(usb_dev, command, (void *)buf, real_size);
> + retval = roccat_common2_send(usb_dev, command, buf, real_size);
> mutex_unlock(&lua->lua_lock);
Applied, thanks.
--
Jiri Kosina
SUSE Labs
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-26 17:38 ` Joe Perches
@ 2014-06-27 5:29 ` Julia Lawall
2014-06-27 5:52 ` Joe Perches
0 siblings, 1 reply; 9+ messages in thread
From: Julia Lawall @ 2014-06-27 5:29 UTC (permalink / raw)
To: Joe Perches
Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel
On Thu, 26 Jun 2014, Joe Perches wrote:
> On Thu, 2014-06-26 at 22:58 +0530, Himangi Saraogi wrote:
> > This patch removes the cast on data of type void* as it is not needed.
>
> Hi Himangi
>
> The cast of a const void * to a void * was odd.
>
> Maybe a mechanism to verify appropriateness of
> loss of constness for any pointer might be useful.
I tried the following, but didn't find anything interesting:
@disable drop_cast@
type T;
const T e;
@@
* (T)e
julia
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-27 5:29 ` Julia Lawall
@ 2014-06-27 5:52 ` Joe Perches
2014-06-27 7:59 ` Julia Lawall
2014-06-29 16:34 ` Julia Lawall
0 siblings, 2 replies; 9+ messages in thread
From: Joe Perches @ 2014-06-27 5:52 UTC (permalink / raw)
To: Julia Lawall
Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel
On Fri, 2014-06-27 at 07:29 +0200, Julia Lawall wrote:
> On Thu, 26 Jun 2014, Joe Perches wrote:
> > The cast of a const void * to a void * was odd.
> >
> > Maybe a mechanism to verify appropriateness of
> > loss of constness for any pointer might be useful.
>
> I tried the following, but didn't find anything interesting:
>
> @disable drop_cast@
> type T;
> const T e;
> @@
>
> * (T)e
What code does this match?
Do you have an example match?
This doesn't find a cast of a void type like:
void func(const void * const p)
{
char *p2 = p;
p2[0] = 1;
}
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-27 5:52 ` Joe Perches
@ 2014-06-27 7:59 ` Julia Lawall
2014-06-29 16:34 ` Julia Lawall
1 sibling, 0 replies; 9+ messages in thread
From: Julia Lawall @ 2014-06-27 7:59 UTC (permalink / raw)
To: Joe Perches
Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel
On Thu, 26 Jun 2014, Joe Perches wrote:
> On Fri, 2014-06-27 at 07:29 +0200, Julia Lawall wrote:
> > On Thu, 26 Jun 2014, Joe Perches wrote:
> > > The cast of a const void * to a void * was odd.
> > >
> > > Maybe a mechanism to verify appropriateness of
> > > loss of constness for any pointer might be useful.
> >
> > I tried the following, but didn't find anything interesting:
> >
> > @disable drop_cast@
> > type T;
> > const T e;
> > @@
> >
> > * (T)e
>
> What code does this match?
> Do you have an example match?
>
> This doesn't find a cast of a void type like:
>
> void func(const void * const p)
> {
> char *p2 = p;
>
> p2[0] = 1;
> }
The results are below. Except in the first case, none are pointer types.
The first case looks very intentional, although if the intention is
needed, perhaps the types should be listed differently.
I was surprised not to get more results. Maybe there is not enough type
information. I did use --all-includes but not --recursive-includes, ie
only explicitly mentioned include files are taken into account.
My rule doesn't consider implicit casts like in your example. I can try
that.
julia
diff -u -p /var/linuxes/linux-next/lib/devres.c /tmp/nothing/lib/devres.c
--- /var/linuxes/linux-next/lib/devres.c
+++ /tmp/nothing/lib/devres.c
@@ -296,7 +296,6 @@ void __iomem *pcim_iomap(struct pci_dev
BUG_ON(bar >= PCIM_IOMAP_MAX);
- tbl = (void __iomem **)pcim_iomap_table(pdev);
if (!tbl || tbl[bar]) /* duplicate mappings not allowed */
return NULL;
@@ -319,7 +318,6 @@ void pcim_iounmap(struct pci_dev *pdev,
pci_iounmap(pdev, addr);
- tbl = (void __iomem **)pcim_iomap_table(pdev);
BUG_ON(!tbl);
for (i = 0; i < PCIM_IOMAP_MAX; i++)
diff -u -p /var/linuxes/linux-next/drivers/video/fbdev/smscufx.c /tmp/nothing/drivers/video/fbdev/smscufx.c
--- /var/linuxes/linux-next/drivers/video/fbdev/smscufx.c
+++ /tmp/nothing/drivers/video/fbdev/smscufx.c
@@ -976,7 +976,6 @@ static void ufx_dpy_deferred_io(struct f
const int width = dev->info->var.xres;
const int y = (cur->index << PAGE_SHIFT) / (width * 2);
int height = (PAGE_SIZE / (width * 2)) + 1;
- height = min(height, (int)(dev->info->var.yres - y));
BUG_ON(y >= dev->info->var.yres);
BUG_ON((y + height) > dev->info->var.yres);
diff -u -p /var/linuxes/linux-next/drivers/mtd/chips/jedec_probe.c /tmp/nothing/drivers/mtd/chips/jedec_probe.c
--- /var/linuxes/linux-next/drivers/mtd/chips/jedec_probe.c
+++ /tmp/nothing/drivers/mtd/chips/jedec_probe.c
@@ -2027,11 +2027,8 @@ static inline int jedec_match( uint32_t
}
break;
case CFI_DEVICETYPE_X16:
- mfr = (uint16_t)finfo->mfr_id;
- id = (uint16_t)finfo->dev_id;
break;
case CFI_DEVICETYPE_X32:
- mfr = (uint16_t)finfo->mfr_id;
id = (uint32_t)finfo->dev_id;
break;
default:
diff -u -p /var/linuxes/linux-next/drivers/net/wireless/libertas/defs.h /tmp/nothing/drivers/net/wireless/libertas/defs.h
--- /var/linuxes/linux-next/drivers/net/wireless/libertas/defs.h
+++ /tmp/nothing/drivers/net/wireless/libertas/defs.h
@@ -105,7 +105,6 @@ static inline void lbs_deb_hex(unsigned
printk("\n");
printk(DRV_NAME " %s: ", prompt);
}
- printk("%02x ", (u8) * buf);
buf++;
}
printk("\n");
diff -u -p /var/linuxes/linux-next/drivers/media/i2c/tvp5150.c /tmp/nothing/drivers/media/i2c/tvp5150.c
--- /var/linuxes/linux-next/drivers/media/i2c/tvp5150.c
+++ /tmp/nothing/drivers/media/i2c/tvp5150.c
@@ -95,7 +95,6 @@ static void dump_reg_range(struct v4l2_s
{
int i = 0;
- while (init != (u8)(end + 1)) {
if ((i % max_line) == 0) {
if (i > 0)
printk("\n");
diff -u -p /var/linuxes/linux-next/net/netfilter/ipvs/ip_vs_sync.c /tmp/nothing/net/netfilter/ipvs/ip_vs_sync.c
--- /var/linuxes/linux-next/net/netfilter/ipvs/ip_vs_sync.c
+++ /tmp/nothing/net/netfilter/ipvs/ip_vs_sync.c
@@ -1543,7 +1543,6 @@ ip_vs_send_async(struct socket *sock, co
iov.iov_base = (void *)buffer;
iov.iov_len = length;
- len = kernel_sendmsg(sock, &msg, &iov, 1, (size_t)(length));
LeaveFunction(7);
return len;
@@ -1575,7 +1574,6 @@ ip_vs_receive(struct socket *sock, char
/* Receive a packet */
iov.iov_base = buffer;
- iov.iov_len = (size_t)buflen;
len = kernel_recvmsg(sock, &msg, &iov, 1, buflen, MSG_DONTWAIT);
diff -u -p /var/linuxes/linux-next/net/ipv4/tcp_output.c /tmp/nothing/net/ipv4/tcp_output.c
--- /var/linuxes/linux-next/net/ipv4/tcp_output.c
+++ /tmp/nothing/net/ipv4/tcp_output.c
@@ -177,7 +177,6 @@ static void tcp_event_data_sent(struct t
/* If it is a reply for ato after last received
* packet, enter pingpong mode.
*/
- if ((u32)(now - icsk->icsk_ack.lrcvtime) < icsk->icsk_ack.ato &&
(!dst || !dst_metric(dst, RTAX_QUICKACK)))
icsk->icsk_ack.pingpong = 1;
}
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-27 5:52 ` Joe Perches
2014-06-27 7:59 ` Julia Lawall
@ 2014-06-29 16:34 ` Julia Lawall
2014-06-29 18:25 ` Joe Perches
1 sibling, 1 reply; 9+ messages in thread
From: Julia Lawall @ 2014-06-29 16:34 UTC (permalink / raw)
To: Joe Perches
Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel
On Thu, 26 Jun 2014, Joe Perches wrote:
> On Fri, 2014-06-27 at 07:29 +0200, Julia Lawall wrote:
> > On Thu, 26 Jun 2014, Joe Perches wrote:
> > > The cast of a const void * to a void * was odd.
> > >
> > > Maybe a mechanism to verify appropriateness of
> > > loss of constness for any pointer might be useful.
> >
> > I tried the following, but didn't find anything interesting:
> >
> > @disable drop_cast@
> > type T;
> > const T e;
> > @@
> >
> > * (T)e
>
> What code does this match?
> Do you have an example match?
>
> This doesn't find a cast of a void type like:
>
> void func(const void * const p)
> {
> char *p2 = p;
>
> p2[0] = 1;
> }
Is this a real example? Because gcc complains about this sort of problem.
I made a semantic patch that detects this, but since gcc does the same
thing, it doesn't seem very interesting. Coccinelle gives a few false
positives due to lack of type information.
julia
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-29 16:34 ` Julia Lawall
@ 2014-06-29 18:25 ` Joe Perches
2014-06-30 9:08 ` Geert Uytterhoeven
0 siblings, 1 reply; 9+ messages in thread
From: Joe Perches @ 2014-06-29 18:25 UTC (permalink / raw)
To: Julia Lawall
Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel
On Sun, 2014-06-29 at 18:34 +0200, Julia Lawall wrote:
> On Thu, 26 Jun 2014, Joe Perches wrote:
> > void func(const void * const p)
> > {
> > char *p2 = p;
> >
> > p2[0] = 1;
> > }
>
> Is this a real example?
No, it's not.
I think I've seen code in the kernel like
char *p2 = (void *)p;
where p is const and p2 is dereferenced and set.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] HID: roccat: Drop cast
2014-06-29 18:25 ` Joe Perches
@ 2014-06-30 9:08 ` Geert Uytterhoeven
0 siblings, 0 replies; 9+ messages in thread
From: Geert Uytterhoeven @ 2014-06-30 9:08 UTC (permalink / raw)
To: Joe Perches
Cc: Julia Lawall, Himangi Saraogi, Stefan Achatz, Jiri Kosina,
linux-input, linux-kernel
On Sun, Jun 29, 2014 at 8:25 PM, Joe Perches <joe@perches.com> wrote:
> I think I've seen code in the kernel like
> char *p2 = (void *)p;
> where p is const and p2 is dereferenced and set.
I can imagine there's code like that.
Still hoping for gcc to gain an option to warn about all casts, except in header
files...
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-06-30 9:08 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-26 17:28 [PATCH] HID: roccat: Drop cast Himangi Saraogi
2014-06-26 17:38 ` Joe Perches
2014-06-27 5:29 ` Julia Lawall
2014-06-27 5:52 ` Joe Perches
2014-06-27 7:59 ` Julia Lawall
2014-06-29 16:34 ` Julia Lawall
2014-06-29 18:25 ` Joe Perches
2014-06-30 9:08 ` Geert Uytterhoeven
2014-06-26 22:35 ` Jiri Kosina
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.