| 317 | */ |
| 318 | |
| 319 | static 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 | |
| 326 | start: |
| 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); |
no test coverage detected