- const size_t buffer_size = 30;
- char buffer[buffer_size];
- int res = snprintf(buffer, buffer_size, "/proc/%lli/mem", (long long) pid);
- if (res < 0 || (size_t) res >= buffer_size) {
- errno = ENAMETOOLONG;
- return -1;
- }
- return open(buffer, flags);
-}
-
-static void MC_process_open_memory_file(mc_process_t process)
-{
- if (MC_process_is_self(process) || process->memory_file >= 0)
- return;
-
- int fd = MC_process_vm_open(process->pid, O_RDWR);
- if (fd<0)
- xbt_die("Could not open file for process virtual address space");
- process->memory_file = fd;
-}
-
-static ssize_t pread_whole(int fd, void *buf, size_t count, off_t offset)
-{
- char* buffer = (char*) buf;
- ssize_t real_count = count;
- while (count) {
- ssize_t res = pread(fd, buffer, count, offset);
- if (res > 0) {
- count -= res;
- buffer += res;
- offset += res;
- } else if (res==0) {
- return -1;
- } else if (errno != EINTR) {
- return -1;
- }
- }
- return real_count;
-}
-
-static ssize_t pwrite_whole(int fd, const void *buf, size_t count, off_t offset)
-{
- const char* buffer = (const char*) buf;
- ssize_t real_count = count;
- while (count) {
- ssize_t res = pwrite(fd, buffer, count, offset);
- if (res > 0) {
- count -= res;
- buffer += res;
- offset += res;
- } else if (res==0) {
- return -1;
- } else if (errno != EINTR) {
- return -1;
- }
- }
- return real_count;
-}
-
-const void* MC_process_read(mc_process_t process, adress_space_read_flags_t flags,
- void* local, const void* remote, size_t len,
- int process_index)
-{
- if (process_index != MC_PROCESS_INDEX_DISABLED) {
- mc_object_info_t info = MC_process_find_object_info_rw(process, remote);