Skip to content

Commit

Permalink
Auto merge of #282 - fiveop:CONVENTIONS, r=@kamalmarhubi
Browse files Browse the repository at this point in the history
Add introduction/constants/enumeration/uninitialized to CONVENTIONS.

I have added new sections to the file. I would like the usual suspects to read them critically and offer critique.

When have agreed to add certain versions I will add Issues to track our progress in getting the code to follow the conventions. For two of the sections they already exist in #254 and #264.
  • Loading branch information
homu committed Feb 28, 2016
2 parents 6a2c164 + 4c5861c commit da2cb87
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 4 deletions.
45 changes: 41 additions & 4 deletions CONVENTIONS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,44 @@
# Bitflags
# Conventions

In order to achieve our goal of wrapping [libc][libc] code in idiomatic rust
constructs with minimal performance overhead, we follow the following
conventions.

Note that, thus far, not all the code follows these conventions and not all
conventions we try to follow have been documented here. If you find an instance
of either, feel free to remedy the flaw by opening a pull request with
appropriate changes or additions.


## Integer Constants

We do not define integer constants ourselves, but use or reexport them from the
[libc crate][libc].


## Bitflags

We represent sets of constants that are intended to be combined using bitwise
operations as parameters to functions by types defined using the `bitflags!`
macro from the [bitflags crate](https://crates.io/crates/bitflags/).
Instead of providing the concrete values ourselves, we prefer taking the
constants defined in [libc crate](https://crates.io/crates/libc/).
macro from the [bitflags crate][bitflags].


## Enumerations

We represent sets of constants that are intended as mutually exclusive arguments
to parameters of functions by [enumerations][enum].


## Structures Initialized by libc Functions

Whenever we need to use a [libc][libc] function to properly initialize a
variable and said function allows us to use uninitialized memory, we use
[`std::mem::uninitialized`][std_uninitialized] (or [`core::mem::uninitialized`][core_uninitialized])
when defining the variable. This allows us to avoid the overhead incurred by
zeroing or otherwise initializing the variable.

[bitflags]: https://crates.io/crates/bitflags/
[core_uninitialized]: https://doc.rust-lang.org/core/mem/fn.uninitialized.html
[enum]: https://doc.rust-lang.org/reference.html#enumerations
[libc]: https://crates.io/crates/libc/
[std_uninitialized]: https://doc.rust-lang.org/std/mem/fn.uninitialized.html
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,7 @@ Then, add this to your crate root:
```rust
extern crate nix;
```

## Contributing

See [CONTRIBUTING](CONTRIBUTING.md).

0 comments on commit da2cb87

Please sign in to comment.