2008-10-14 17:27:53

by J.R. Mauro

[permalink] [raw]
Subject: Lindent and __user, etc.

Indent doesn't understand macros and typedefs, so when running Lindent
it makes some wrong suggestions about pointers. For example, something
like "void fun(void __iomem *ptr)" comes back as "void fun(void
__iomem * ptr)" from Lindent. I emailed the maintainer, and as indent
doesn't do any parsing, the only solution is by telling it your
typedefs with -T. Obviously, telling Lindent about every typedef and
special macro in the kernel might be prohibitive, but should it at
least know about __kernel, __user, etc. and all the u8, u16, etc.
typedefs?

Letting indent know about some common typenames will also help it find
other style bugs it currently misses. I can submit more examples if
desired, and I'll submit a patch to Lindent if people think it would
be a good idea. Please CC me directly with replies.

Thanks,
J.R.


2008-10-18 04:54:36

by J.R. Mauro

[permalink] [raw]
Subject: Re: Lindent and __user, etc.

Here's a patch that outlines the basic idea. Obviously more types should
be added to catch more things that Lindent currently misses if this change seems
beneficial.


Make Lindent aware of sparse annotations and integer declarations

Signed-off by: J.R. Mauro <[email protected]>
--

--- Lindent 2008-10-17 18:16:56.000000000 -0400
+++ Lindent-mod 2008-10-18 00:37:49.000000000 -0400
@@ -1,5 +1,7 @@
#!/bin/sh
PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1"
+CHECK="-T __user -T __kernel -T __safe -T __force -T __nocast -T __iomem"
+TYPES="-T s8 -T u8 -T s16 -T u16 -T s32 -T u32 -T s64 -T u64"
RES=`indent --version`
V1=`echo $RES | cut -d' ' -f3 | cut -d'.' -f1`
V2=`echo $RES | cut -d' ' -f3 | cut -d'.' -f2`
@@ -15,4 +17,4 @@ elif [ $V1 -eq 2 ]; then
fi
fi
fi
-indent $PARAM "$@"
+indent $PARAM $CHECK $TYPES "$@"