Skip to content

Process::new and dynamic_library::open_external should take &[u8]s, not Paths or ~strs #11650

Closed
@erickt

Description

@erickt

@kballard pointed out in IRC that the argument types for std::run::Process::new and std::unstable::dynamic_library::open_external are wrong for a couple reasons:

  • They don't quite work like proper paths. Process::new wraps the syscall execvp, which looks in the current directory for "./foo", but in the PATH search paths for "foo". open_external uses dlopen, does the same thing with the DL_LIBRARY_PATH or DYLD_LIBRARY_PATH environment variables. Since Path::new automatically normalizes the paths, it turns a local reference of "./foo" into "foo", which changes the semantics of the syscall.
  • In the case of Process::new, it uses ~str for the program and arguments, but on Unix paths have no encoding.
  • In the case of dynamic_library::open_external, on Macs you can embed special dyld macros as in "@executable_path/../foo", which will look for a library relative to the location of the executable.

Because of these issues, I feel that the only real option is to have those methods take &[u8], or a trait that can produce one, like std::path::BytesContainer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions