public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] scripts: add typdef removal tool
@ 2009-08-14  5:39 Luis R. Rodriguez
  2009-08-17  6:02 ` Amerigo Wang
  2010-09-19  8:19 ` Pekka Enberg
  0 siblings, 2 replies; 13+ messages in thread
From: Luis R. Rodriguez @ 2009-08-14  5:39 UTC (permalink / raw)
  To: akpm
  Cc: linux-kernel, devel, mcgrof, Luis R. Rodriguez, Julia Lawall,
	Joe Perches, Nicolas Palix, Yoann Padioleau

If you are porting drivers and need to remove tydpefs you can use
this to help you port the driver faster. Until we don't have a fully
correct and complete way to do this through Coccinelle spatch we
might as well help developers porting drivers with something. spatch
also has a learning curve, people working on staging may not end
up using it for a while.

Cc: Julia Lawall <julia@diku.dk>
Cc: Joe Perches <joe@perches.com>
Cc: Nicolas Palix <npalix@diku.dk>
Cc: Yoann Padioleau <yoann.padioleau@gmail.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---

 scripts/remove-typedef |   70 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 70 insertions(+), 0 deletions(-)
 create mode 100755 scripts/remove-typedef

diff --git a/scripts/remove-typedef b/scripts/remove-typedef
new file mode 100755
index 0000000..17b8034
--- /dev/null
+++ b/scripts/remove-typedef
@@ -0,0 +1,70 @@
+#!/bin/bash
+#
+# Copyright 2009 Joe Perches <joe@perches.com>
+# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
+#
+# Lets you remove typedefs from C/header files.
+#
+# We do simple sed substituation for logical places where you would
+# use the typedef, and also replace the typedef declaration to a simple
+# struct declaration.
+
+function usage()
+{
+	echo "Usage $0 <typedef-name> <struct-name> <paths>"
+	exit 1
+}
+
+function remove_typedef()
+{
+	if [ ! -f $1 ]; then
+		return;
+	fi
+
+	# This replaces the typedef usages with simple structs
+	sed -r -i -e "s/\b$from\b/struct $to/g" $1
+	sed -r -i -e "s/\bP$from\b/struct $to \*/g" $1
+	sed -r -i -e "s/struct $to\s*\*\s*\b/struct $to \*/g" $1
+	sed -r -i -e "s/\(struct $to\s*\*\)\s*/\(struct $to \*\)/g" $1
+
+	# This replaces the typedef declaration for a simple struct declaration - style 0
+	perl -i -e "local $/; while(<>) { s/\btypedef\s+struct\s+([\d\D]+?)\s*\{([\d\D]+?)\}\s*struct\s+$to\b[^;]*;/struct $to \{\2\};/g; print; }" $1
+
+	# This replaces the typedef declaration for a simple struct declaration - style 1
+	perl -i -e "local $/; while(<>) { s/\btypedef\s+struct\s+_$from\s*\{([\d\D]+?)\}\s*struct\s+$to\b[^;]*;/struct $to \{\1\};/g; print; }" $1
+
+	# This replaces the typedef declaration for a simple struct declaration - style 2
+	perl -i -e "local $/; while(<>) { s/\btypedef\s+struct\s+$to\s*\{([\d\D]+?)\}\s*$from\b[^;]*;/struct $to \{\1\};/g; print; }" $1
+
+}
+
+if [[ $# -lt 3 ]]; then
+	usage
+fi
+
+from=$1
+to=$2
+shift
+
+echo "Converting typedef $from to struct $to"
+
+while shift; do
+	REM_PATH=$1
+
+	if [ -z $REM_PATH ]; then
+		continue;
+	fi
+
+	if [ ! -d $REM_PATH ]; then
+		echo "No directory $REM_PATH";
+		continue;
+	fi
+
+	for i in $(find $REM_PATH -type f -name *.c); do
+		remove_typedef $i
+	done
+
+	for i in $(find $REM_PATH -type f -name *.h); do
+		remove_typedef $i
+	done
+done
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-09-19 15:03 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-14  5:39 [PATCH v2] scripts: add typdef removal tool Luis R. Rodriguez
2009-08-17  6:02 ` Amerigo Wang
2009-08-21  8:48   ` Jiri Slaby
2009-08-23 13:09     ` Matthias Urlichs
2009-08-23 16:06       ` Américo Wang
2009-08-23 13:22   ` Matthias Urlichs
2009-08-23 16:04     ` Américo Wang
2009-08-23 17:59     ` Jiri Slaby
2009-08-25 14:35       ` Matthias Urlichs
2010-09-19  8:19 ` Pekka Enberg
2010-09-19  8:49   ` Joe Perches
2010-09-19  9:30     ` Pekka Enberg
2010-09-19 15:03       ` Luis R. Rodriguez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox