summaryrefslogtreecommitdiff
path: root/kexec/phys_arch.c
blob: 1571a0f2ca807aa4aab8a269bed5b942c6de8551 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "kexec.h"
#include <errno.h>
#include <string.h>
#include <sys/utsname.h>

long physical_arch(void)
{
	struct utsname utsname;
	int i, result = uname(&utsname);
	if (result < 0) {
		fprintf(stderr, "uname failed: %s\n",
			strerror(errno));
		return -1;
	}

	for (i = 0; arches[i].machine; ++i) {
		if (strcmp(utsname.machine, arches[i].machine) == 0)
			return arches[i].arch;
		if ((strcmp(arches[i].machine, "arm") == 0) &&
		    (strncmp(utsname.machine, arches[i].machine,
		     strlen(arches[i].machine)) == 0))
			return arches[i].arch;
	}

	fprintf(stderr, "Unsupported machine type: %s\n",
		utsname.machine);
	return -1;
}