desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY, 0, &absolute_name);
desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename, O_RDONLY | O_BINARY, 0, &absolute_name);
symfile_bfd_open (char *name){  bfd *sym_bfd;  int desc;  char *absolute_name;  name = tilde_expand (name);	/* Returns 1st new malloc'd copy */  /* Look down path for it, allocate 2nd new malloc'd copy.  */  desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);#if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)  if (desc < 0)    {      char *exename = alloca (strlen (name) + 5);      strcat (strcpy (exename, name), ".exe");      desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY,		    0, &absolute_name);    }#endif  if (desc < 0)    {      make_cleanup (xfree, name);      perror_with_name (name);    }  xfree (name);			/* Free 1st new malloc'd copy */  name = absolute_name;		/* Keep 2nd malloc'd copy in bfd */  /* It'll be freed in free_objfile(). */  sym_bfd = bfd_fdopenr (name, gnutarget, desc);  if (!sym_bfd)    {      close (desc);      make_cleanup (xfree, name);      error ("\"%s\": can't open to read symbols: %s.", name,	     bfd_errmsg (bfd_get_error ()));    }  bfd_set_cacheable (sym_bfd, 1);  if (!bfd_check_format (sym_bfd, bfd_object))    {      /* FIXME: should be checking for errors from bfd_close (for one thing,         on error it does not free all the storage associated with the         bfd).  */      bfd_close (sym_bfd);	/* This also closes desc */      make_cleanup (xfree, name);      error ("\"%s\": can't read symbols: %s.", name,	     bfd_errmsg (bfd_get_error ()));    }  return (sym_bfd);}