Sysinfo.cc от gutil отсутствует закрывающая скобка при вычислении num_cpus? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть файл sysinfo.cc от gutil, который идентичен этому: https://github.com/cloudera/kudu/blob/master/src/kudu/gutil/sysinfo.cc#L248 Я хотел бы знать, правильно ли работает функция InitializeSystemInfo () для Linux, учитывая, что я не слишком знаком с C ++.

Я не могу найти закрывающую скобку для этого оператора do в строке 248, так что он все равно будет правильно вычислять numcpus?

 do {   // we'll exit when the last read didn't read anything
    // Move the next line to the beginning of the buffer
    const int oldlinelen = strlen(line);
    if (sizeof(line) == oldlinelen + 1)    // oldlinelen took up entire line
      line[0] = '\0';
    else                                   // still other lines left to save
      memmove(line, line + oldlinelen+1, sizeof(line) - (oldlinelen+1));
    // Terminate the new line, reading more if we can't find the newline
    char* newline = strchr(line, '\n');
    if (newline == NULL) {
      const int linelen = strlen(line);
      const int bytes_to_read = sizeof(line)-1 - linelen;
      CHECK_GT(bytes_to_read, 0);  // because the memmove recovered >=1 bytes
      chars_read = read(fd, line + linelen, bytes_to_read);
      line[linelen + chars_read] = '\0';
      newline = strchr(line, '\n');
    }
    if (newline != NULL)
      *newline = '\0';

1 Ответ

0 голосов
/ 06 февраля 2019

Закрывающая скобка находится в строке 305.

Стиль программирования в этом файле труден для чтения, так как функция имеет несколько экранов длиной и использует несколько ветвей #ifdef.Это необходимо, хотя.Этот исходный файл скрывает части, относящиеся к операционной системе, от остальной части кода, поэтому может показаться, что это сложно.

Другой код может просто получить доступ к переменной cpuinfo_cycles_per_second, что делает действительно простой API.

...