xlat: do not strip "1<<" prefix from xlat strings

* xlat/gen.sh (cond_xlat, gen_header): Do not strip "1<<" prefix
from xlat strings to fix incorrect output.
* tests/caps.awk: Update.

Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
diff --git a/tests/caps.awk b/tests/caps.awk
index ecf1a28..67003ac 100644
--- a/tests/caps.awk
+++ b/tests/caps.awk
@@ -28,7 +28,7 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 BEGIN {
-	cap = "(0|CAP_[A-Z_]+(\\|CAP_[A-Z_]+)*|CAP_[A-Z_]+(\\|CAP_[A-Z_]+){37}\\|0xffffffc0)"
+	cap = "(0|1<<CAP_[A-Z_]+(\\|1<<CAP_[A-Z_]+)*|1<<CAP_[A-Z_]+(\\|1<<CAP_[A-Z_]+){37}\\|0xffffffc0)"
 	s_efault = "-1 EFAULT (Bad address)"
 	r_efault = "-1 EFAULT \\(Bad address\\)"
 	r_addr = "0x[[:xdigit:]]+"
@@ -36,7 +36,7 @@
 	r[2] = "^capget\\(" r_addr ", " r_addr "\\) = " r_efault
 	r[3] = "^capget\\(\\{_LINUX_CAPABILITY_VERSION_3, 0\\}, " r_addr "\\) = " r_efault
 	r[4] = "^capget\\(\\{_LINUX_CAPABILITY_VERSION_3, 0\\}, \\{" cap ", " cap ", " cap "\\}\\) = 0$"
-	capset_data = "{CAP_DAC_OVERRIDE|CAP_WAKE_ALARM, CAP_DAC_READ_SEARCH|CAP_BLOCK_SUSPEND, 0}"
+	capset_data = "{1<<CAP_DAC_OVERRIDE|1<<CAP_WAKE_ALARM, 1<<CAP_DAC_READ_SEARCH|1<<CAP_BLOCK_SUSPEND, 0}"
 	s[5] = "capset({_LINUX_CAPABILITY_VERSION_3, 0}, " capset_data ") = -1 EPERM (Operation not permitted)"
 	s[6] = "+++ exited with 0 +++"
 
diff --git a/xlat/gen.sh b/xlat/gen.sh
index 1a0b4d1..bc6982e 100755
--- a/xlat/gen.sh
+++ b/xlat/gen.sh
@@ -86,20 +86,19 @@
 
 cond_xlat()
 {
-	local line val m def xlat str
+	local line val m def xlat
 	line="$1"; shift
-	str="$1"; shift
 
 	val="$(printf %s "${line}" | sed -n 's/^\([^[:space:]]\+\).*$/\1/p')"
 	m="${val%%|*}"
 	def="$(printf %s "${line}" |
 	       sed -n 's/^[^[:space:]]\+[[:space:]]\+\([^[:space:]].*\)$/\1/p')"
 
-	if [ -z "${str}" ]; then
+	if [ "${m}" = "${m#1<<}" ]; then
 		xlat="$(print_xlat "${val}")"
 	else
+		xlat="$(print_xlat_pair "1ULL<<${val#1<<}" "${val}")"
 		m="${m#1<<}"
-		xlat="$(print_xlat_pair "1ULL<<${val#1<<}" "${str}")"
 	fi
 
 	if [ -z "${def}" ]; then
@@ -204,14 +203,14 @@
 			if [ -n "${unconditional}" ]; then
 				print_xlat "${line}"
 			else
-				cond_xlat "${line}" ''
+				cond_xlat "${line}"
 			fi
 			;;
 		'1<<'[A-Z_]*)	# symbolic constants with shift
 			if [ -n "${unconditional}" ]; then
-				print_xlat_pair "1ULL<<${line#1<<}" "${line#1<<}"
+				print_xlat_pair "1ULL<<${line#1<<}" "${line}"
 			else
-				cond_xlat "${line}" "${line#1<<}"
+				cond_xlat "${line}"
 			fi
 			;;
 		[0-9]*)	# numeric constants