memcpy

io functions

Feb 28th, 2012
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. int iom_init (size_t len, const char *path, io_map_t *proc)
  2. {    
  3.     size_t filesize;
  4.    
  5.     (proc)->pos = 0;
  6.  
  7.     (proc)->fd = open(path, O_RDWR|O_CREAT);
  8.    
  9.     if ((proc)->fd < 0)
  10.         goto out;
  11.    
  12.     filesize = lseek((proc)->fd, 0, SEEK_END);
  13.    
  14.     if (!filesize && len != LEN_FILESIZ) {
  15.         lseek((proc)->fd, len-1, SEEK_SET);
  16.         write((proc)->fd, "", 1);
  17.     } else if (filesize && len == LEN_FILESIZ) {
  18.         len = filesize;
  19.     } else {
  20.         errno = EINVAL;
  21.         goto cl_sock;
  22.     }
  23.    
  24.     (proc)->len = len;
  25.    
  26.     (proc)->map_mem = mmap(0, len, PROT_ALL, MAP_SHARED, (proc)->fd, 0);
  27.    
  28.     if ((proc)->map_mem == MAP_FAILED)
  29.         goto cl_sock;
  30.    
  31.     return 0;
  32.    
  33. cl_sock:
  34.     close((proc)->fd);
  35.     (proc) = NULL;
  36. out:
  37.     return 1;
  38. }
  39.  
  40. int iom_w32(unsigned int val, int endian, io_map_t *proc)
  41. {
  42.     if ((proc)->pos >= ((proc)->len - 4))
  43.         return ENOBUFS;
  44.    
  45.     if (endian == ENDIAN_BIG) {
  46.         (proc)->map_mem[(proc)->pos++] = val & 0xFF;
  47.         (proc)->map_mem[(proc)->pos++] = (val >> 8) & 0xFF;
  48.         (proc)->map_mem[(proc)->pos++] = (val >> 16) & 0xFF;
  49.         (proc)->map_mem[(proc)->pos++] = (val >> 24) & 0xFF;
  50.     } else if (endian == ENDIAN_LITTLE) {
  51.         (proc)->map_mem[(proc)->pos++] = (val >> 24) & 0xFF;
  52.         (proc)->map_mem[(proc)->pos++] = (val >> 16) & 0xFF;
  53.         (proc)->map_mem[(proc)->pos++] = (val >> 8) & 0xFF;
  54.         (proc)->map_mem[(proc)->pos++] = val & 0xFF;
  55.     } else {
  56.         return EINVAL;
  57.     }
  58.    
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment