sim: strip the SW from the returned data, as SW is passed in msgb->cb
diff --git a/src/sim/reader.c b/src/sim/reader.c
index 71fb763..5d6033b 100644
--- a/src/sim/reader.c
+++ b/src/sim/reader.c
@@ -27,11 +27,15 @@
 #include <string.h>
 #include <stdio.h>
 
+#include <netinet/in.h>
+
+#include <osmocom/core/msgb.h>
 #include <osmocom/sim/sim.h>
 
 
 #include "sim_int.h"
 
+/* remove the SW from end of the message */
 static int get_sw(struct msgb *resp)
 {
 	int ret;
@@ -39,8 +43,7 @@
 	if (!msgb_apdu_de(resp) || msgb_apdu_le(resp) < 2)
 		return -EIO;
 
-	ret = resp->data[resp->len-2] << 8;
-	ret |= resp->data[resp->len-1];
+	ret = msgb_get_u16(resp);
 
 	return ret;
 }
diff --git a/utils/osmo-sim-test.c b/utils/osmo-sim-test.c
index f7dc48d..482ca31 100644
--- a/utils/osmo-sim-test.c
+++ b/utils/osmo-sim-test.c
@@ -164,7 +164,7 @@
 	struct tlv_parsed tp;
 	int rc;
 
-	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
+	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-2, 0, 0);
 	if (rc < 0)
 		return rc;
 
@@ -223,7 +223,7 @@
 	int rc, i;
 
 	msg = select_file(st, 0x2f00);
-	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
+	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-2, 0, 0);
 	if (rc < 0)
 		return NULL;
 
@@ -302,7 +302,7 @@
 		goto out;
 	}
 
-	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
+	rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-2, 0, 0);
 	if (rc < 0) {
 		printf("Unable to parse FCP\n");
 		goto out;