errno = err; return MACH_PORT_NULL;
if (dealloc_dir) __mach_port_deallocate (__mach_task_self (), startdir); if (err) return lookup_error (err);  switch (doretry) { case FS_RETRY_REAUTH: { mach_port_t ref = __mach_reply_port (); err = __io_reauthenticate (*result, ref, MACH_MSG_TYPE_MAKE_SEND); if (! err) err = __USEPORT (AUTH, __auth_user_authenticate (port, *result, ref, MACH_MSG_TYPE_MAKE_SEND, &newpt)); __mach_port_destroy (__mach_task_self (), ref); } __mach_port_deallocate (__mach_task_self (), *result); if (err) return err; *result = newpt;   case FS_RETRY_NORMAL: #ifdef SYMLOOP_MAX if (nloops++ >= SYMLOOP_MAX) return ELOOP; #endif   if (retryname[0] == '\0') {  if (flags & O_EXLOCK) ;		 if (!err && (flags & O_SHLOCK)) ;		 if (!err && (flags & O_TRUNC)) err = __file_set_size (*result, 0);  if (err) __mach_port_deallocate (__mach_task_self (), *result); return err; }  startdir = *result; dealloc_dir = 1; file_name = retryname; break;  case FS_RETRY_MAGICAL: switch (retryname[0]) { case '/': startdir = crdir; dealloc_dir = 0; if (*result != MACH_PORT_NULL) __mach_port_deallocate (__mach_task_self (), *result); file_name = &retryname[1]; break;  case 'f': if (retryname[1] == 'd' && retryname[2] == '/') { int fd; char *end; int save = errno; errno = 0; fd = (int) strtol (retryname, &end, 10); if (end == NULL || errno ||   (*end != '/' && *end != '\0')) { errno = save; return ENOENT; } *result = __getdport (fd); if (*result == MACH_PORT_NULL) {  error_t err = errno; errno = save; return err; } errno = save; if (*end == '\0') return 0; else {  startdir = *result; dealloc_dir = 1; file_name = end + 1;  break; } } else goto bad_magic; break;  case 'm': if (retryname[1] == 'a' && retryname[2] == 'c' && retryname[3] == 'h' && retryname[4] == 't' && retryname[5] == 'y' && retryname[6] == 'p' && retryname[7] == 'e') { error_t err; struct host_basic_info hostinfo; mach_msg_type_number_t hostinfocnt = HOST_BASIC_INFO_COUNT; char *p; if (err = __host_info (__mach_host_self (), HOST_BASIC_INFO, (natural_t *) &hostinfo, &hostinfocnt)) return err; if (hostinfocnt != HOST_BASIC_INFO_COUNT) return EGRATUITOUS; p = _itoa (hostinfo.cpu_subtype, &retryname[8], 10, 0); *--p = '/'; p = _itoa (hostinfo.cpu_type, &retryname[8], 10, 0); if (p < retryname) abort ();	 if (p > retryname) strcpy (retryname, p); startdir = *result; dealloc_dir = 1; } else goto bad_magic; break;  case 't': if (retryname[1] == 't' && retryname[2] == 'y') switch (retryname[3]) { error_t opentty (file_t *result) { error_t err; file_t unauth; err = __USEPORT (CTTYID, __termctty_open_terminal (port, flags, &unauth)); if (! err) { mach_port_t ref = __mach_reply_port (); err = __io_reauthenticate (unauth, ref, MACH_MSG_TYPE_MAKE_SEND); if (! err) err = __USEPORT (AUTH, __auth_user_authenticate (port, unauth, ref, MACH_MSG_TYPE_MAKE_SEND, result)); __mach_port_deallocate (__mach_task_self (), unauth); __mach_port_destroy (__mach_task_self (), ref); } return err; }  case '\0': return opentty (result); case '/': if (err = opentty (&startdir)) return err; dealloc_dir = 1; strcpy (retryname, &retryname[4]); break; default: goto bad_magic; } else goto bad_magic; break;  default: bad_magic: return EGRATUITOUS; } break;  default: return EGRATUITOUS; }  err = __dir_lookup (startdir, file_name, flags, mode, &doretry, retryname, result);
weak_alias (__file_name_lookup, file_name_lookup)file_t__file_name_split (const char *file_name, char **name){  error_t err;  file_t dir, crdir, cwdir;  struct hurd_userlink crdir_ulink, cwdir_ulink;  crdir = _hurd_port_get (&_hurd_ports[INIT_PORT_CRDIR], &crdir_ulink);  cwdir = _hurd_port_get (&_hurd_ports[INIT_PORT_CWDIR], &cwdir_ulink);  err = __hurd_file_name_split (crdir, cwdir, file_name, &dir, name);  _hurd_port_free (&_hurd_ports[INIT_PORT_CRDIR], &crdir_ulink, crdir);  _hurd_port_free (&_hurd_ports[INIT_PORT_CWDIR], &cwdir_ulink, cwdir);  if (err)    {      errno = err;      return MACH_PORT_NULL;    }  else    return dir;}