MCPcopy Create free account
hub / github.com/MariaDB/server / json_normalize_number

Function json_normalize_number

strings/json_normalize.c:149–235  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

147
148
149int
150json_normalize_number(DYNAMIC_STRING *out, const char *str, size_t str_len)
151{
152 int err= 0;
153 long int magnitude= 0;
154 int negative= 0;
155 size_t i= 0;
156 size_t j= 0;
157 size_t k= 0;
158 char *buf= NULL;
159 size_t buf_size = str_len + 1;
160
161 buf= json_norm_malloc(buf_size);
162 if (!buf)
163 return 1;
164
165 memset(buf, 0x00, buf_size);
166
167 if (str[0] == '-')
168 {
169 negative= 1;
170 ++i;
171 }
172
173 /* grab digits preceding the decimal */
174 for (; i < str_len && str[i] != '.' && str[i] != 'e' && str[i] != 'E'; ++i)
175 buf[j++] = str[i];
176
177 magnitude = (long)(j - 1);
178
179 if (i < str_len)
180 {
181 /* skip the . */
182 if (str[i] == '.')
183 ++i;
184
185 /* grab rest of digits before the E */
186 for (; i < str_len && str[i] != 'e' && str[i] != 'E'; ++i)
187 buf[j++] = str[i];
188 }
189
190 /* trim trailing zeros */
191 for (k = j - 1; k && buf[k] == '0'; --k, --j)
192 buf[k] = '\0';
193
194 /* trim the leading zeros */
195 for (k = 0; buf[k] && buf[k] == '0'; ++k);
196 if (k)
197 {
198 memmove(buf, buf + k, j - k);
199 j = j - k;
200 buf[j] = '\0';
201 magnitude -= (long)k;
202 }
203
204 if (!j)
205 {
206 err= dynstr_append_mem(out, STRING_WITH_LEN("0.0E0"));

Callers 2

check_number_normalizeFunction · 0.85

Calls 4

json_norm_mallocFunction · 0.85
dynstr_append_memFunction · 0.85
my_freeFunction · 0.85
dynstr_appendFunction · 0.85

Tested by

no test coverage detected