xref: /aosp_15_r20/external/cpuinfo/tools/cpuinfo-dump.c (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin Li #include <stdio.h>
2*2b54f0dbSXin Li #include <stdlib.h>
3*2b54f0dbSXin Li #include <string.h>
4*2b54f0dbSXin Li 
5*2b54f0dbSXin Li #include <unistd.h>
6*2b54f0dbSXin Li #include <fcntl.h>
7*2b54f0dbSXin Li #include <errno.h>
8*2b54f0dbSXin Li 
9*2b54f0dbSXin Li 
10*2b54f0dbSXin Li #define BUFFER_SIZE 4096
11*2b54f0dbSXin Li char buffer[BUFFER_SIZE];
12*2b54f0dbSXin Li 
13*2b54f0dbSXin Li #define CPUINFO_PATH "/proc/cpuinfo"
14*2b54f0dbSXin Li 
main(int argc,char ** argv)15*2b54f0dbSXin Li int main(int argc, char** argv) {
16*2b54f0dbSXin Li 	int file = open(CPUINFO_PATH, O_RDONLY);
17*2b54f0dbSXin Li 	if (file == -1) {
18*2b54f0dbSXin Li 		fprintf(stderr, "Error: failed to open %s: %s\n", CPUINFO_PATH, strerror(errno));
19*2b54f0dbSXin Li 		exit(EXIT_FAILURE);
20*2b54f0dbSXin Li 	}
21*2b54f0dbSXin Li 
22*2b54f0dbSXin Li 	/* Only used for error reporting */
23*2b54f0dbSXin Li 	size_t position = 0;
24*2b54f0dbSXin Li 	char* data_start = buffer;
25*2b54f0dbSXin Li 	ssize_t bytes_read;
26*2b54f0dbSXin Li 	do {
27*2b54f0dbSXin Li 		bytes_read = read(file, buffer, BUFFER_SIZE);
28*2b54f0dbSXin Li 		if (bytes_read < 0) {
29*2b54f0dbSXin Li 			fprintf(stderr, "Error: failed to read file %s at position %zu: %s\n",
30*2b54f0dbSXin Li 				CPUINFO_PATH, position, strerror(errno));
31*2b54f0dbSXin Li 			exit(EXIT_FAILURE);
32*2b54f0dbSXin Li 		}
33*2b54f0dbSXin Li 
34*2b54f0dbSXin Li 		position += (size_t) bytes_read;
35*2b54f0dbSXin Li 		if (bytes_read > 0) {
36*2b54f0dbSXin Li 			fwrite(buffer, 1, (size_t) bytes_read, stdout);
37*2b54f0dbSXin Li 		}
38*2b54f0dbSXin Li 	} while (bytes_read != 0);
39*2b54f0dbSXin Li 
40*2b54f0dbSXin Li 	if (close(file) != 0) {
41*2b54f0dbSXin Li 		fprintf(stderr, "Error: failed to close %s: %s\n", CPUINFO_PATH, strerror(errno));
42*2b54f0dbSXin Li 		exit(EXIT_FAILURE);
43*2b54f0dbSXin Li 	}
44*2b54f0dbSXin Li 	return EXIT_SUCCESS;
45*2b54f0dbSXin Li }
46