Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int iom_init (size_t len, const char *path, io_map_t *proc)
- {
- size_t filesize;
- (proc)->pos = 0;
- (proc)->fd = open(path, O_RDWR|O_CREAT);
- if ((proc)->fd < 0)
- goto out;
- filesize = lseek((proc)->fd, 0, SEEK_END);
- if (!filesize && len != LEN_FILESIZ) {
- lseek((proc)->fd, len-1, SEEK_SET);
- write((proc)->fd, "", 1);
- } else if (filesize && len == LEN_FILESIZ) {
- len = filesize;
- } else {
- errno = EINVAL;
- goto cl_sock;
- }
- (proc)->len = len;
- (proc)->map_mem = mmap(0, len, PROT_ALL, MAP_SHARED, (proc)->fd, 0);
- if ((proc)->map_mem == MAP_FAILED)
- goto cl_sock;
- return 0;
- cl_sock:
- close((proc)->fd);
- (proc) = NULL;
- out:
- return 1;
- }
- int iom_w32(unsigned int val, int endian, io_map_t *proc)
- {
- if ((proc)->pos >= ((proc)->len - 4))
- return ENOBUFS;
- if (endian == ENDIAN_BIG) {
- (proc)->map_mem[(proc)->pos++] = val & 0xFF;
- (proc)->map_mem[(proc)->pos++] = (val >> 8) & 0xFF;
- (proc)->map_mem[(proc)->pos++] = (val >> 16) & 0xFF;
- (proc)->map_mem[(proc)->pos++] = (val >> 24) & 0xFF;
- } else if (endian == ENDIAN_LITTLE) {
- (proc)->map_mem[(proc)->pos++] = (val >> 24) & 0xFF;
- (proc)->map_mem[(proc)->pos++] = (val >> 16) & 0xFF;
- (proc)->map_mem[(proc)->pos++] = (val >> 8) & 0xFF;
- (proc)->map_mem[(proc)->pos++] = val & 0xFF;
- } else {
- return EINVAL;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment