libargs

Crates.iolibargs
lib.rslibargs
version0.1.2
sourcesrc
created_at2019-11-20 15:24:09.165948
updated_at2019-11-20 15:38:56.527841
descriptionGet CLI arguments in a library called from C
homepagehttps://github.com/leo60228/libargs
repositoryhttps://github.com/leo60228/libargs
max_upload_size
id182991
size6,471
leo60228 (leo60228)

documentation

README

libargs

On most Rust platforms, std::env::args will work in a function called from a C program. However, this is not the case on Linux. The following platforms are supported:

  • cfg(all(target_os = "linux", target_env = "gnu")): glibc will pass command line arguments to static constructors, which is non-standard
  • cfg(all(target_os = "linux", not(target_env = "gnu"))): The envp pointer passed to _start is stored in the __environ symbol. As command line arguments precede it in the stack, we can walk the stack backwards from __environ to find argc and argv. This works on all platforms I've tested it on, however it takes linear time with regards to argc.
  • cfg(not(target_os = "linux")): std::env::args is used, which works on most platforms (including Windows and macOS). On unsupported platforms, an empty Vec will be returned.
Commit count: 4

cargo fmt