mskanji.c.patch   [plain text]


--- mskanji.c.orig	Tue May 20 15:21:44 2003
+++ mskanji.c	Wed Jun 18 12:02:06 2003
@@ -43,6 +43,7 @@
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <ctype.h>
 
 rune_t	_MSKanji_sgetrune(const char *, size_t, char const **);
 int	_MSKanji_sputrune(rune_t, char *, size_t, char **);
@@ -67,20 +68,23 @@
 {
 	rune_t rune = 0;
 
-	if (n < 1) {
-		if (result != NULL)
-			*result = string;
+	if (result != NULL)
+		*result = string;
+	if (n < 1)
 		return (_INVALID_RUNE);
-	}
 
 	rune = *string++ & 0xff;
 	if ((rune > 0x80 && rune < 0xa0) ||
 	    (rune >= 0xe0 && rune < 0xfd)) {
-		if (n < 2) {
-			rune = _INVALID_RUNE;
-			--string;
-		} else
+		if (n < 2)
+			return (_INVALID_RUNE);
+		else
 			rune = (rune << 8) | (*string++ & 0xff);
+	}
+	if (!isrune(rune)) {
+		if (result != NULL)
+			(*result)++;
+		return (_INVALID_RUNE);
 	}
 	if (result != NULL)
 		*result = string;