File: mem.c

package info (click to toggle)
criu 4.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,584 kB
  • sloc: ansic: 139,280; python: 7,484; sh: 3,824; java: 2,799; makefile: 2,659; asm: 1,137; perl: 206; xml: 117; exp: 45
file content (32 lines) | stat: -rw-r--r-- 629 bytes parent folder | download | duplicates (3)
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
29
30
31
32
#include <sys/sysmacros.h>
#include <string.h>
#include <stdint.h>

#include "zdtmtst.h"

dev_t get_mapping_dev(void *addr)
{
	char buf[1024];
	FILE *f;
	unsigned int major, minor;
	int ret;

	f = fopen("/proc/self/maps", "r");
	if (f == NULL) {
		pr_perror("Failed to open maps file");
		return (dev_t)-1;
	}

	while (fgets(buf, sizeof(buf), f)) {
		if ((unsigned long)addr == strtoul(buf, NULL, 16)) {
			ret = sscanf(buf, "%*x-%*x %*c%*c%*c%*c %*x %x:%x", &major, &minor);
			if (ret != 2) {
				pr_err("Can't parse /proc/self/maps\n");
				return (dev_t)-1;
			}
			return makedev(major, minor);
		}
	}

	return (dev_t)-1;
}