Changeset 649:0ee35e06288f in roaraudio


Ignore:
Timestamp:
08/26/08 13:45:18 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added roar_file_map() and roar_file_unmap()

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/file.h

    r556 r649  
    1414ssize_t roar_file_play       (struct roar_connection * con, char * file, int exec); 
    1515 
     16ssize_t roar_file_map        (char * filename, int flags, mode_t mode, size_t len, void ** mem); 
     17int     roar_file_unmap      (size_t len, void * mem); 
    1618#endif 
    1719 
  • libroar/file.c

    r636 r649  
    7373} 
    7474 
     75ssize_t     roar_file_map        (char * filename, int flags, mode_t mode, size_t len, void ** mem) { 
     76 int fh; 
     77 int mmap_flags = 0; 
     78 struct stat stat; 
     79 
     80 if ( mem == NULL || filename == NULL ) 
     81  return -1; 
     82 
     83 *mem = NULL; 
     84 
     85 if ( flags & O_RDWR ) { 
     86  mmap_flags = PROT_READ|PROT_WRITE; 
     87 } else if ( flags & O_WRONLY ) { 
     88  mmap_flags = PROT_WRITE; 
     89 } else { 
     90  mmap_flags = PROT_READ; 
     91 } 
     92 
     93 if ( (fh = open(filename, flags, mode)) == -1 ) { 
     94  return -1; 
     95 } 
     96 
     97 if ( fstat(fh, &stat) == -1 ) { 
     98  close(fh); 
     99  return -1; 
     100 } 
     101 
     102 if ( stat.st_size < len ) { 
     103  if ( ftruncate(fh, len) == -1 ) { 
     104   close(fh); 
     105   return -1; 
     106  } 
     107 } 
     108 
     109 if ( (*mem = mmap(NULL, len, mmap_flags, MAP_SHARED, fh, 0)) == NULL ) { 
     110  close(fh); 
     111  return -1; 
     112 } 
     113 
     114 close(fh); 
     115 
     116 return len; 
     117} 
     118 
     119int     roar_file_unmap      (size_t len, void * mem) { 
     120 return munmap(mem, len); 
     121} 
     122 
     123 
    75124ssize_t roar_file_play (struct roar_connection * con, char * file, int exec) { 
    76125 int codec = -1; 
Note: See TracChangeset for help on using the changeset viewer.