proper constraints return values

diff --git a/libasn1compiler/asn1c_constraint.c b/libasn1compiler/asn1c_constraint.c
index 22b6543..deeba8f 100644
--- a/libasn1compiler/asn1c_constraint.c
+++ b/libasn1compiler/asn1c_constraint.c
@@ -322,7 +322,7 @@
 	if(utf8_full_alphabet_check) {
 		OUT("if(UTF8String_length((UTF8String_t *)sptr, td->name, \n");
 		OUT("\tapp_errlog, app_key) == -1)\n");
-		OUT("\t\treturn 0; /* Alphabet (sic!) test failed. */\n");
+		OUT("\t\treturn -1; /* Alphabet (sic!) test failed. */\n");
 		OUT("\n");
 	} else {
 		if(use_table) {
@@ -333,7 +333,7 @@
 			emit_alphabet_check_loop(arg, range);
 		}
 	}
-	OUT("return 1;\n");
+	OUT("return 0;\n");
 	INDENT(-1);
 	OUT("}\n");
 	OUT("\n");
@@ -366,33 +366,33 @@
 		OUT("for(; ch < end; ch++) {\n");
 			INDENT(+1);
 			OUT("uint8_t cv = *ch;\n");
-			if(!range) OUT("if(cv >= 0x80) return 0;\n");
+			if(!range) OUT("if(cv >= 0x80) return -1;\n");
 		natural_stop = 0xffffffffUL;
 		break;
 	case ASN_STRING_UniversalString:
 		OUT("const uint32_t *ch = st->buf;\n");
 		OUT("const uint32_t *end = ch + st->size;\n");
 		OUT("\n");
-		OUT("if(st->size % 4) return 0; /* (size%4)! */\n");
+		OUT("if(st->size % 4) return -1; /* (size%4)! */\n");
 		OUT("for(; ch < end; ch++) {\n");
 			INDENT(+1);
 			OUT("uint32_t cv = (((const uint8_t *)ch)[0] << 24)\n");
 			OUT("\t\t| (((const uint8_t *)ch)[1] << 16)\n");
 			OUT("\t\t| (((const uint8_t *)ch)[2] << 8)\n");
 			OUT("\t\t|  ((const uint8_t *)ch)[3];\n");
-			if(!range) OUT("if(cv > 255) return 0;\n");
+			if(!range) OUT("if(cv > 255) return -1;\n");
 		natural_stop = 0xffffffffUL;
 		break;
 	case ASN_STRING_BMPString:
 		OUT("const uint16_t *ch = st->buf;\n");
 		OUT("const uint16_t *end = ch + st->size;\n");
 		OUT("\n");
-		OUT("if(st->size % 2) return 0; /* (size%2)! */\n");
+		OUT("if(st->size % 2) return -1; /* (size%2)! */\n");
 		OUT("for(; ch < end; ch++) {\n");
 			INDENT(+1);
 			OUT("uint16_t cv = (((const uint8_t *)ch)[0] << 8)\n");
 			OUT("\t\t| ((const uint8_t *)ch)[1];\n");
-			if(!range) OUT("if(cv > 255) return 0;\n");
+			if(!range) OUT("if(cv > 255) return -1;\n");
 		natural_stop = 0xffff;
 		break;
 	case ASN_BASIC_OCTET_STRING:
@@ -410,9 +410,9 @@
 	if(range) {
 		OUT("if(!(");
 		emit_range_comparison_code(arg, range, "cv", 0, natural_stop);
-		OUT(")) return 0;\n");
+		OUT(")) return -1;\n");
 	} else {
-		OUT("if(!table[cv]) return 0;\n");
+		OUT("if(!table[cv]) return -1;\n");
 	}
 
 	INDENT(-1);
diff --git a/tests/19-param-OK.asn1.-P b/tests/19-param-OK.asn1.-P
index 6d3b865..17066a2 100644
--- a/tests/19-param-OK.asn1.-P
+++ b/tests/19-param-OK.asn1.-P
@@ -246,9 +246,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!table[cv]) return 0;
+		if(!table[cv]) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -268,7 +268,7 @@
 	
 	if(check_permitted_alphabet_1(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index aaa2e9f..a934fff 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -52,7 +52,7 @@
 	
 	if((size >= 1)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -359,7 +359,7 @@
 	
 	if((size >= 1)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
diff --git a/tests/50-constraint-OK.asn1.-P b/tests/50-constraint-OK.asn1.-P
index 38416db..6fca2aa 100644
--- a/tests/50-constraint-OK.asn1.-P
+++ b/tests/50-constraint-OK.asn1.-P
@@ -140,7 +140,7 @@
 	
 	if((value >= 0)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -259,7 +259,7 @@
 	
 	if((value >= 0 && value <= 10)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -491,7 +491,7 @@
 	
 	if((value == 5)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -810,9 +810,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv <= 127)) return 0;
+		if(!(cv <= 127)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -836,7 +836,7 @@
 	if(((size <= 20) || (size >= 25 && size <= 30))
 		 && check_permitted_alphabet_1(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -953,9 +953,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!table[cv]) return 0;
+		if(!table[cv]) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -979,7 +979,7 @@
 	if(((size >= 10 && size <= 20) || (size >= 25 && size <= 27))
 		 && check_permitted_alphabet_2(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -1085,9 +1085,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv >= 65 && cv <= 70)) return 0;
+		if(!(cv >= 65 && cv <= 70)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -1108,7 +1108,7 @@
 	
 	if(check_permitted_alphabet_3(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -1214,9 +1214,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv >= 69 && cv <= 70)) return 0;
+		if(!(cv >= 69 && cv <= 70)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -1237,7 +1237,7 @@
 	
 	if(check_permitted_alphabet_4(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -1343,9 +1343,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv >= 65 && cv <= 70)) return 0;
+		if(!(cv >= 65 && cv <= 70)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -1366,7 +1366,7 @@
 	
 	if(check_permitted_alphabet_5(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -1698,9 +1698,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv >= 65 && cv <= 70)) return 0;
+		if(!(cv >= 65 && cv <= 70)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -1724,7 +1724,7 @@
 	if((size >= 1 && size <= 4)
 		 && check_permitted_alphabet_6(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -1830,9 +1830,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv >= 65 && cv <= 68)) return 0;
+		if(!(cv >= 65 && cv <= 68)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -1856,7 +1856,7 @@
 	if((size >= 1 && size <= 4)
 		 && check_permitted_alphabet_7(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -1962,9 +1962,9 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(!(cv >= 65 && cv <= 70)) return 0;
+		if(!(cv >= 65 && cv <= 70)) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -1985,7 +1985,7 @@
 	
 	if(check_permitted_alphabet_8(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -2103,10 +2103,10 @@
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
-		if(cv >= 0x80) return 0;
-		if(!table[cv]) return 0;
+		if(cv >= 0x80) return -1;
+		if(!table[cv]) return -1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -2131,7 +2131,7 @@
 	if((size >= 1 && size <= 2)
 		 && check_permitted_alphabet_9(sptr)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);
@@ -2247,7 +2247,7 @@
 	
 	if((size >= 1 && size <= 2)) {
 		/* Constraint check succeeded */
-		return 1;
+		return 0;
 	} else {
 		_ASN_ERRLOG(app_errlog, app_key,
 			"%s: constraint failed", td->name);