diff options
author | rodrigc <rodrigc@FreeBSD.org> | 2007-01-04 04:18:03 +0000 |
---|---|---|
committer | rodrigc <rodrigc@FreeBSD.org> | 2007-01-04 04:18:03 +0000 |
commit | d665dfeb8c64ab88cb98bc2de95fa5460a51e5bf (patch) | |
tree | 587e43c69b20455de707f7e7466011fef48edb8f /usr.bin | |
parent | ac26dc2c91a8a093586c11cd739db04c72cce6cd (diff) | |
download | FreeBSD-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')
-rw-r--r-- | usr.bin/kdump/mksubr | 30 |
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_ |