summaryrefslogtreecommitdiff
path: root/external/liblangtag/liblangtag-0.5.1-include-last-record-in-language-subtag-registry.patch
blob: c28727c3b1fa4ba551c3dc55d3e575060cd5e535 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Upstream 6564b87c2f6dac2482e530bc43b038a3e93a0e07
resolves #6, include last record in language-subtag-registry.xml

The '%%' in language-subtag-registry is a record delimiter, not record
end marker, it is not present on the last record at file end.

(cherry picked from commit 4fff73a834f94a7ca256c086d99ea0a654a6c287)

diff --git a/data/reg2xml.c b/data/reg2xml.c
--- UnpackedTarball/langtag.orig/data/reg2xml.c
+++ UnpackedTarball/langtag/data/reg2xml.c
@@ -48,6 +48,7 @@ _parse(const char *filename,
 	FILE *fp;
 	char buffer[1024], *range = NULL, *begin = NULL, *end = NULL;
 	lt_bool_t in_entry = FALSE;
+	lt_bool_t file_end = FALSE;
 	xmlNodePtr ent = NULL;
 
 	if ((fp = fopen(filename, "rb")) == NULL) {
@@ -56,10 +57,13 @@ _parse(const char *filename,
 	}
 	while (1) {
 		fgets(buffer, 1024, fp);
-		if (feof(fp))
-			break;
+		if (feof(fp)) {
+            if (!in_entry)
+                break;
+            file_end = TRUE;
+        }
 		_drop_crlf(buffer);
-		if (lt_strcmp0(buffer, "%%") == 0) {
+		if (lt_strcmp0(buffer, "%%") == 0 || file_end) {
 			if (in_entry) {
 				if (ent) {
 					if (range) {
@@ -102,7 +106,7 @@ _parse(const char *filename,
 				ent = NULL;
 				range = NULL;
 			}
-			in_entry = TRUE;
+			in_entry = !file_end;
 		} else {
 			if (!in_entry) {
 				/* ignore it */

--------------erAck-patch-parts--