summaryrefslogtreecommitdiffstats
path: root/usr.bin/kdump/mksubr
diff options
context:
space:
mode:
authorrodrigc <rodrigc@FreeBSD.org>2007-01-04 04:18:03 +0000
committerrodrigc <rodrigc@FreeBSD.org>2007-01-04 04:18:03 +0000
commitd665dfeb8c64ab88cb98bc2de95fa5460a51e5bf (patch)
tree587e43c69b20455de707f7e7466011fef48edb8f /usr.bin/kdump/mksubr
parentac26dc2c91a8a093586c11cd739db04c72cce6cd (diff)
downloadFreeBSD-src-d665dfeb8c64ab88cb98bc2de95fa5460a51e5bf.zip
FreeBSD-src-d665dfeb8c64ab88cb98bc2de95fa5460a51e5bf.tar.gz
Add auto_if_type() function, which is similar to auto_switch_type().
However, auto_if_type() uses if/else statements in C instead of a single switch statement, when mapping an integer value to a #define. For certain cases where multiple #define constants alias to a single integer value, auto_if_type() makes things easier to parse than auto_switch_type().
Diffstat (limited to 'usr.bin/kdump/mksubr')
-rw-r--r--usr.bin/kdump/mksubr30
1 files changed, 30 insertions, 0 deletions
diff --git a/usr.bin/kdump/mksubr b/usr.bin/kdump/mksubr
index 1e9825a..8cf4f94 100644
--- a/usr.bin/kdump/mksubr
+++ b/usr.bin/kdump/mksubr
@@ -96,6 +96,36 @@ cat <<_EOF_
_EOF_
}
+#
+# Automatically generates a C function used when the argument
+# maps to a #definition
+#
+auto_if_type () {
+ local name grep file
+ name=$1
+ grep=$2
+ file=$3
+
+ cat <<_EOF_
+/* AUTO */
+void
+$name (int arg)
+{
+_EOF_
+ egrep "^#[[:space:]]*define[[:space:]]+"${grep}"[[:space:]]*" \
+ $include_dir/$file | \
+ awk '{ printf "\t"; \
+ if (NR > 1) \
+ printf "else " ; \
+ printf "if (arg == %s) \n\t\tprintf(\"%s\");\n", $2, $2 }'
+cat <<_EOF_
+ else /* Should not reach */
+ (void)printf("<invalid=%ld>", (long)arg);
+}
+
+_EOF_
+}
+
# C start
cat <<_EOF_
OpenPOWER on IntegriCloud