Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int open_map(int fd, struct stat *sb, const char * const name)
- {
- // !!! Map process into memory
- new_files[num_new_files].start = mmap(NULL, sb->st_size, PROT_READ, MAP_SHARED, fd, 0);
- if(new_files[num_new_files].start == MAP_FAILED)
- {
- log(LOG_ERR, "Error mmaping %s: %s", name, strerror(errno));
- close(fd);
- return 0;
- }
- // !!! Lock in-memory process down
- if(mlock(new_files[num_new_files].start, sb->st_size) == -1)
- {
- log(LOG_ERR, "Can't lock memory for %s, error %s", name, strerror(errno));
- munmap(new_files[num_new_files].start, sb->st_size);
- close(fd);
- return 0;
- }
- if(sb->st_size % page_size)
- new_files[num_new_files].map_size = sb->st_size - (sb->st_size % page_size)
- + page_size;
- else
- new_files[num_new_files].map_size = sb->st_size;
- new_files[num_new_files].fd = fd;
- memcpy(&new_files[num_new_files].sb, sb, sizeof(struct stat));
- new_files[num_new_files].name = strdup(name);
- num_new_files++;
- log(LOG_INFO, "Mapped file %s", name);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement