1
2
3
4
5
6
7
8
9#include "libbb.h"
10
11
12int FAST_FUNC starts_with_cpu(const char *str)
13{
14 return ((str[0] - 'c') | (str[1] - 'p') | (str[2] - 'u')) == 0;
15}
16
17
18
19
20
21
22unsigned FAST_FUNC get_cpu_count(void)
23{
24 FILE *fp;
25 char line[256];
26 int proc_nr = -1;
27
28 fp = xfopen_for_read("/proc/stat");
29 while (fgets(line, sizeof(line), fp)) {
30 if (!starts_with_cpu(line)) {
31 if (proc_nr >= 0)
32 break;
33 continue;
34 }
35 if (line[3] != ' ') {
36 int num_proc;
37 if (sscanf(line + 3, "%u", &num_proc) == 1
38 && num_proc > proc_nr
39 ) {
40 proc_nr = num_proc;
41 }
42 }
43 }
44
45 fclose(fp);
46 return proc_nr + 1;
47}
48