flags & MAP_FIXED,
! (flags & MAP_FIXED),
__mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset){  error_t err;  vm_prot_t vmprot;  memory_object_t memobj;  vm_address_t mapaddr;  vmprot = VM_PROT_NONE;  if (prot & PROT_READ)    vmprot |= VM_PROT_READ;  if (prot & PROT_WRITE)    vmprot |= VM_PROT_WRITE;  if (prot & PROT_EXEC)    vmprot |= VM_PROT_EXECUTE;  switch (flags & MAP_TYPE)    {    default:      return (caddr_t) (long int) __hurd_fail (EINVAL);    case MAP_ANON:      memobj = MACH_PORT_NULL;      break;    case MAP_FILE:      {	mach_port_t robj, wobj;	if (err = HURD_DPORT_USE (fd, __io_map (port, &robj, &wobj)))	  return (caddr_t) (long int) __hurd_dfail (fd, err);	switch (prot & (PROT_READ|PROT_WRITE))	  {	  case PROT_READ:	    memobj = robj;	    __mach_port_deallocate (__mach_task_self (), wobj);	    break;	  case PROT_WRITE:	    memobj = wobj;	    __mach_port_deallocate (__mach_task_self (), robj);	    break;	  case PROT_READ|PROT_WRITE:	    __mach_port_deallocate (__mach_task_self (), robj);	    if (robj == wobj)	      memobj = wobj;	    else	      {		__mach_port_deallocate (__mach_task_self (), wobj);		return ((caddr_t) (long int)			__hurd_fail (EGRATUITOUS)); /* XXX */	      }	    break;	  }	break;	/* XXX handle MAP_NOEXTEND */      }    }  mapaddr = (vm_address_t) addr;  err = __vm_map (__mach_task_self (),		  &mapaddr, (vm_size_t) len, (vm_address_t) 0,		  flags & MAP_FIXED,		  memobj, (vm_offset_t) offset,		  flags & (MAP_COPY|MAP_PRIVATE),		  vmprot, VM_PROT_ALL,		  flags & MAP_INHERIT);  if (memobj != MACH_PORT_NULL)    __mach_port_deallocate (__mach_task_self (), memobj);  return err ? (caddr_t) (long int) __hurd_fail (err) : (caddr_t) mapaddr;}