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

Function fl_log_iterator_buffer_init

sql/handler.cc:369–426  ·  view source on GitHub ↗

@brief returns buffer, to be assigned in handler_iterator struct */

Source from the content-addressed store, hash-verified

367 returns buffer, to be assigned in handler_iterator struct
368*/
369enum handler_create_iterator_result
370fl_log_iterator_buffer_init(struct handler_iterator *iterator)
371{
372 MY_DIR *dirp;
373 struct fl_buff *buff;
374 char *name_ptr;
375 uchar *ptr;
376 FILEINFO *file;
377 uint32 i;
378
379 /* to be able to make my_free without crash in case of error */
380 iterator->buffer= 0;
381
382 if (!(dirp = my_dir(fl_dir, MYF(0))))
383 {
384 return HA_ITERATOR_ERROR;
385 }
386 if ((ptr= (uchar*)my_malloc(ALIGN_SIZE(sizeof(fl_buff)) +
387 ((ALIGN_SIZE(sizeof(LEX_STRING)) +
388 sizeof(enum log_status) +
389 + FN_REFLEN + 1) *
390 (uint) dirp->number_off_files),
391 MYF(0))) == 0)
392 {
393 return HA_ITERATOR_ERROR;
394 }
395 buff= (struct fl_buff *)ptr;
396 buff->entries= buff->current= 0;
397 ptr= ptr + (ALIGN_SIZE(sizeof(fl_buff)));
398 buff->names= (LEX_STRING*) (ptr);
399 ptr= ptr + ((ALIGN_SIZE(sizeof(LEX_STRING)) *
400 (uint) dirp->number_off_files));
401 buff->statuses= (enum log_status *)(ptr);
402 name_ptr= (char *)(ptr + (sizeof(enum log_status) *
403 (uint) dirp->number_off_files));
404 for (i=0 ; i < (uint) dirp->number_off_files ; i++)
405 {
406 enum log_status st;
407 file= dirp->dir_entry + i;
408 if ((file->name[0] == '.' &&
409 ((file->name[1] == '.' && file->name[2] == '\0') ||
410 file->name[1] == '\0')))
411 continue;
412 if ((st= fl_get_log_status(file->name)) == HA_LOG_STATUS_NOSUCHLOG)
413 continue;
414 name_ptr= strxnmov(buff->names[buff->entries].str= name_ptr,
415 FN_REFLEN, fl_dir, file->name, NullS);
416 buff->names[buff->entries].length= (name_ptr -
417 buff->names[buff->entries].str);
418 buff->statuses[buff->entries]= st;
419 buff->entries++;
420 }
421
422 iterator->buffer= buff;
423 iterator->next= &fl_log_iterator_next;
424 iterator->destroy= &fl_log_iterator_destroy;
425 return HA_ITERATOR_OK;
426}

Callers 1

fl_create_iteratorFunction · 0.85

Calls 4

my_dirFunction · 0.85
my_mallocFunction · 0.85
fl_get_log_statusFunction · 0.85
strxnmovFunction · 0.85

Tested by

no test coverage detected