nullify handle when cs_open() fails. besides, return CS_ERR_ARCH when arch is unsupported
diff --git a/cs.c b/cs.c
index a7bc704..7eb0f5d 100644
--- a/cs.c
+++ b/cs.c
@@ -54,17 +54,19 @@
 		return CS_ERR_MEM;
 	}
 
-	ud->errnum = CS_ERR_OK;
-	ud->arch = arch;
-	ud->mode = mode;
-	ud->big_endian = mode & CS_MODE_BIG_ENDIAN;
-	ud->reg_name = NULL;
-	ud->detail = CS_OPT_ON;	// by default break instruction into details
+	if (arch < CS_ARCH_MAX && arch_init[ud->arch]) {
+		ud->errnum = CS_ERR_OK;
+		ud->arch = arch;
+		ud->mode = mode;
+		ud->big_endian = mode & CS_MODE_BIG_ENDIAN;
+		ud->reg_name = NULL;
+		ud->detail = CS_OPT_ON;	// by default break instruction into details
 
-	if (arch_init[ud->arch])
 		arch_init[ud->arch](ud);
-	else
-		return CS_ERR_HANDLE;
+	} else {
+		*handle = 0;
+		return CS_ERR_ARCH;
+	}
 
 	*handle = (uintptr_t)ud;