Skip to content

Commit 0c055cb

Browse files
authored
Merge pull request #231 from ribasushi/explicit-warning-unexpected-mode-bits
Be more explicit about future changes to `mode`
2 parents 7b87248 + ace8b9d commit 0c055cb

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

UNIXFS.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,14 @@ For files comprised of a single block, the 'Type' field will be set to 'File', '
8282
UnixFS currently supports two optional metadata fields:
8383

8484
* `mode` -- The `mode` is for persisting the file permissions in [numeric notation](https://en.wikipedia.org/wiki/File_system_permissions#Numeric_notation) \[[spec](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html)\].
85-
If unspecified this defaults to `0755` for directories/HAMT shards and `0644` for all other types where applicable
86-
The nine least significant bits represent `ugo-rwx`
87-
The next three least significant bits represent `setuid`, `setgid` and the `sticky bit`
88-
All others are reserved for future use
85+
- If unspecified this defaults to
86+
- `0755` for directories/HAMT shards
87+
- `0644` for all other types where applicable
88+
- The nine least significant bits represent `ugo-rwx`
89+
- The next three least significant bits represent `setuid`, `setgid` and the `sticky bit`
90+
- The remaining 20 bits are reserved for future use, and are subject to change. Spec implementations **MUST** handle bits they do not expect as follows:
91+
- For future-proofing the (de)serialization layer must preserve the entire uint32 value during clone/copy operations, modifying only bit values that have a well defined meaning: `clonedValue = ( modifiedBits & 07777 ) | ( originalValue & 0xFFFFF000 )`
92+
- Implementations of this spec must proactively mask off bits without a defined meaning in the implemented version of the spec: `interpretedValue = originalValue & 07777`
8993
* `mtime` -- The modification time in seconds since the epoch. This defaults to the unix epoch if unspecified
9094

9195
### Deduplication and inlining

0 commit comments

Comments
 (0)