MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / process_args

Function process_args

strings/my_vsnprintf.c:319–520  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

317*/
318
319static char *process_args(const CHARSET_INFO *cs, char *to, char *end,
320 const char* fmt, size_t arg_index, va_list ap)
321{
322 ARGS_INFO args_arr[MAX_ARGS];
323 PRINT_INFO print_arr[MAX_PRINT_INFO];
324 uint idx= 0, arg_count= arg_index;
325
326start:
327 /* Here we are at the beginning of positional argument, right after $ */
328 arg_index--;
329 print_arr[idx].flags= 0;
330 if (*fmt == '`')
331 {
332 print_arr[idx].flags|= ESCAPED_ARG;
333 fmt++;
334 }
335 if (*fmt == '-')
336 fmt++;
337 print_arr[idx].length= print_arr[idx].width= 0;
338 /* Get print length */
339 if (*fmt == '*')
340 {
341 fmt++;
342 fmt= get_length(fmt, &print_arr[idx].length, &print_arr[idx].flags);
343 print_arr[idx].length--;
344 DBUG_ASSERT(*fmt == '$' && print_arr[idx].length < MAX_ARGS);
345 args_arr[print_arr[idx].length].arg_type= 'd';
346 args_arr[print_arr[idx].length].have_longlong= 0;
347 print_arr[idx].flags|= LENGTH_ARG;
348 arg_count= MY_MAX(arg_count, print_arr[idx].length + 1);
349 fmt++;
350 }
351 else
352 fmt= get_length(fmt, &print_arr[idx].length, &print_arr[idx].flags);
353
354 if (*fmt == '.')
355 {
356 fmt++;
357 /* Get print width */
358 if (*fmt == '*')
359 {
360 fmt++;
361 fmt= get_width(fmt, &print_arr[idx].width);
362 print_arr[idx].width--;
363 DBUG_ASSERT(*fmt == '$' && print_arr[idx].width < MAX_ARGS);
364 args_arr[print_arr[idx].width].arg_type= 'd';
365 args_arr[print_arr[idx].width].have_longlong= 0;
366 print_arr[idx].flags|= WIDTH_ARG;
367 arg_count= MY_MAX(arg_count, print_arr[idx].width + 1);
368 fmt++;
369 }
370 else
371 fmt= get_width(fmt, &print_arr[idx].width);
372 }
373 else
374 print_arr[idx].width= SIZE_T_MAX;
375
376 fmt= check_longlong(fmt, &args_arr[arg_index].have_longlong);

Callers 1

my_vsnprintf_exFunction · 0.85

Calls 8

get_lengthFunction · 0.85
get_widthFunction · 0.85
process_str_argFunction · 0.85
process_bin_argFunction · 0.85
process_dbl_argFunction · 0.85
process_int_argFunction · 0.85
strnmovFunction · 0.85
check_longlongFunction · 0.70

Tested by

no test coverage detected