Deleted Added
full compact
rune.c (92986) rune.c (101498)
1/*-
2 * Copyright (c) 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Paul Borman at Krystal Technologies.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 24 unchanged lines hidden (view full) ---

33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 */
36
37#if defined(LIBC_SCCS) && !defined(lint)
38static char sccsid[] = "@(#)rune.c 8.1 (Berkeley) 6/4/93";
39#endif /* LIBC_SCCS and not lint */
40#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Paul Borman at Krystal Technologies.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 24 unchanged lines hidden (view full) ---

33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 */
36
37#if defined(LIBC_SCCS) && !defined(lint)
38static char sccsid[] = "@(#)rune.c 8.1 (Berkeley) 6/4/93";
39#endif /* LIBC_SCCS and not lint */
40#include <sys/cdefs.h>
41__FBSDID("$FreeBSD: head/lib/libc/locale/rune.c 92986 2002-03-22 21:53:29Z obrien $");
41__FBSDID("$FreeBSD: head/lib/libc/locale/rune.c 101498 2002-08-08 05:51:54Z ache $");
42
43#include "namespace.h"
44#include <arpa/inet.h>
42
43#include "namespace.h"
44#include <arpa/inet.h>
45#include <errno.h>
45#include <rune.h>
46#include <stdio.h>
47#include <string.h>
48#include <stdlib.h>
49#include <sys/types.h>
50#include <sys/stat.h>
51#include "un-namespace.h"
52
53_RuneLocale *
54_Read_RuneMagi(fp)
55 FILE *fp;
56{
57 char *data;
58 void *lastp;
59 _RuneLocale *rl;
60 _RuneEntry *rr;
61 struct stat sb;
46#include <rune.h>
47#include <stdio.h>
48#include <string.h>
49#include <stdlib.h>
50#include <sys/types.h>
51#include <sys/stat.h>
52#include "un-namespace.h"
53
54_RuneLocale *
55_Read_RuneMagi(fp)
56 FILE *fp;
57{
58 char *data;
59 void *lastp;
60 _RuneLocale *rl;
61 _RuneEntry *rr;
62 struct stat sb;
62 int x;
63 int x, saverr;
63
64 if (_fstat(fileno(fp), &sb) < 0)
64
65 if (_fstat(fileno(fp), &sb) < 0)
65 return(0);
66 return (NULL);
66
67
67 if (sb.st_size < sizeof(_RuneLocale))
68 return(0);
68 if (sb.st_size < sizeof(_RuneLocale)) {
69 errno = EFTYPE;
70 return (NULL);
71 }
69
72
70 if ((data = malloc(sb.st_size)) == NULL)
71 return(0);
73 if ((data = malloc(sb.st_size)) == NULL) {
74 errno = ENOMEM;
75 return (NULL);
76 }
72
77
78 errno = 0;
73 rewind(fp); /* Someone might have read the magic number once already */
79 rewind(fp); /* Someone might have read the magic number once already */
80 if (errno) {
81 saverr = errno;
82 free(data);
83 errno = saverr;
84 return (NULL);
85 }
74
75 if (fread(data, sb.st_size, 1, fp) != 1) {
86
87 if (fread(data, sb.st_size, 1, fp) != 1) {
88 saverr = errno;
76 free(data);
89 free(data);
77 return(0);
90 errno = saverr;
91 return (NULL);
78 }
79
80 rl = (_RuneLocale *)data;
81 lastp = data + sb.st_size;
82
83 rl->variable = rl + 1;
84
85 if (memcmp(rl->magic, _RUNE_MAGIC_1, sizeof(rl->magic))) {
86 free(data);
92 }
93
94 rl = (_RuneLocale *)data;
95 lastp = data + sb.st_size;
96
97 rl->variable = rl + 1;
98
99 if (memcmp(rl->magic, _RUNE_MAGIC_1, sizeof(rl->magic))) {
100 free(data);
87 return(0);
101 errno = EFTYPE;
102 return (NULL);
88 }
89
90 rl->invalid_rune = ntohl(rl->invalid_rune);
91 rl->variable_len = ntohl(rl->variable_len);
92 rl->runetype_ext.nranges = ntohl(rl->runetype_ext.nranges);
93 rl->maplower_ext.nranges = ntohl(rl->maplower_ext.nranges);
94 rl->mapupper_ext.nranges = ntohl(rl->mapupper_ext.nranges);
95
96 for (x = 0; x < _CACHED_RUNES; ++x) {
97 rl->runetype[x] = ntohl(rl->runetype[x]);
98 rl->maplower[x] = ntohl(rl->maplower[x]);
99 rl->mapupper[x] = ntohl(rl->mapupper[x]);
100 }
101
102 rl->runetype_ext.ranges = (_RuneEntry *)rl->variable;
103 rl->variable = rl->runetype_ext.ranges + rl->runetype_ext.nranges;
104 if (rl->variable > lastp) {
105 free(data);
103 }
104
105 rl->invalid_rune = ntohl(rl->invalid_rune);
106 rl->variable_len = ntohl(rl->variable_len);
107 rl->runetype_ext.nranges = ntohl(rl->runetype_ext.nranges);
108 rl->maplower_ext.nranges = ntohl(rl->maplower_ext.nranges);
109 rl->mapupper_ext.nranges = ntohl(rl->mapupper_ext.nranges);
110
111 for (x = 0; x < _CACHED_RUNES; ++x) {
112 rl->runetype[x] = ntohl(rl->runetype[x]);
113 rl->maplower[x] = ntohl(rl->maplower[x]);
114 rl->mapupper[x] = ntohl(rl->mapupper[x]);
115 }
116
117 rl->runetype_ext.ranges = (_RuneEntry *)rl->variable;
118 rl->variable = rl->runetype_ext.ranges + rl->runetype_ext.nranges;
119 if (rl->variable > lastp) {
120 free(data);
106 return(0);
121 errno = EFTYPE;
122 return (NULL);
107 }
108
109 rl->maplower_ext.ranges = (_RuneEntry *)rl->variable;
110 rl->variable = rl->maplower_ext.ranges + rl->maplower_ext.nranges;
111 if (rl->variable > lastp) {
112 free(data);
123 }
124
125 rl->maplower_ext.ranges = (_RuneEntry *)rl->variable;
126 rl->variable = rl->maplower_ext.ranges + rl->maplower_ext.nranges;
127 if (rl->variable > lastp) {
128 free(data);
113 return(0);
129 errno = EFTYPE;
130 return (NULL);
114 }
115
116 rl->mapupper_ext.ranges = (_RuneEntry *)rl->variable;
117 rl->variable = rl->mapupper_ext.ranges + rl->mapupper_ext.nranges;
118 if (rl->variable > lastp) {
119 free(data);
131 }
132
133 rl->mapupper_ext.ranges = (_RuneEntry *)rl->variable;
134 rl->variable = rl->mapupper_ext.ranges + rl->mapupper_ext.nranges;
135 if (rl->variable > lastp) {
136 free(data);
120 return(0);
137 errno = EFTYPE;
138 return (NULL);
121 }
122
123 for (x = 0; x < rl->runetype_ext.nranges; ++x) {
124 rr = rl->runetype_ext.ranges;
125
126 rr[x].min = ntohl(rr[x].min);
127 rr[x].max = ntohl(rr[x].max);
128 if ((rr[x].map = ntohl(rr[x].map)) == 0) {
129 int len = rr[x].max - rr[x].min + 1;
130 rr[x].types = rl->variable;
131 rl->variable = rr[x].types + len;
132 if (rl->variable > lastp) {
133 free(data);
139 }
140
141 for (x = 0; x < rl->runetype_ext.nranges; ++x) {
142 rr = rl->runetype_ext.ranges;
143
144 rr[x].min = ntohl(rr[x].min);
145 rr[x].max = ntohl(rr[x].max);
146 if ((rr[x].map = ntohl(rr[x].map)) == 0) {
147 int len = rr[x].max - rr[x].min + 1;
148 rr[x].types = rl->variable;
149 rl->variable = rr[x].types + len;
150 if (rl->variable > lastp) {
151 free(data);
134 return(0);
152 errno = EFTYPE;
153 return (NULL);
135 }
136 while (len-- > 0)
137 rr[x].types[len] = ntohl(rr[x].types[len]);
138 } else
139 rr[x].types = 0;
140 }
141
142 for (x = 0; x < rl->maplower_ext.nranges; ++x) {

--- 8 unchanged lines hidden (view full) ---

151 rr = rl->mapupper_ext.ranges;
152
153 rr[x].min = ntohl(rr[x].min);
154 rr[x].max = ntohl(rr[x].max);
155 rr[x].map = ntohl(rr[x].map);
156 }
157 if (((char *)rl->variable) + rl->variable_len > (char *)lastp) {
158 free(data);
154 }
155 while (len-- > 0)
156 rr[x].types[len] = ntohl(rr[x].types[len]);
157 } else
158 rr[x].types = 0;
159 }
160
161 for (x = 0; x < rl->maplower_ext.nranges; ++x) {

--- 8 unchanged lines hidden (view full) ---

170 rr = rl->mapupper_ext.ranges;
171
172 rr[x].min = ntohl(rr[x].min);
173 rr[x].max = ntohl(rr[x].max);
174 rr[x].map = ntohl(rr[x].map);
175 }
176 if (((char *)rl->variable) + rl->variable_len > (char *)lastp) {
177 free(data);
159 return(0);
178 errno = EFTYPE;
179 return (NULL);
160 }
161
162 /*
163 * Go out and zero pointers that should be zero.
164 */
165 if (!rl->variable_len)
166 rl->variable = 0;
167
168 if (!rl->runetype_ext.nranges)
169 rl->runetype_ext.ranges = 0;
170
171 if (!rl->maplower_ext.nranges)
172 rl->maplower_ext.ranges = 0;
173
174 if (!rl->mapupper_ext.nranges)
175 rl->mapupper_ext.ranges = 0;
176
180 }
181
182 /*
183 * Go out and zero pointers that should be zero.
184 */
185 if (!rl->variable_len)
186 rl->variable = 0;
187
188 if (!rl->runetype_ext.nranges)
189 rl->runetype_ext.ranges = 0;
190
191 if (!rl->maplower_ext.nranges)
192 rl->maplower_ext.ranges = 0;
193
194 if (!rl->mapupper_ext.nranges)
195 rl->mapupper_ext.ranges = 0;
196
177 return(rl);
197 return (rl);
178}
198}