hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

README (1409B)


      1 The path module provides utilities for working with filesystem paths.
      2 
      3 Note that Hare expects paths to be valid UTF-8 strings. If you require the use
      4 of non-UTF-8 paths (ideally for only as long as it takes to delete or rename
      5 those files), see the low-level functions available from [[rt::]].
      6 
      7 Use of the [[buffer]] type is recommended for efficient and consistent
      8 manipulation of filesystem paths. The path will always be
      9 normalized, which is to say that it will not include any of the following:
     10 
     11 - Redundant ".." components
     12 - Redundant path separators
     13 - Any "." components, except in the case of "."
     14 
     15 Assuming that [[SEP]] is '/', "/usr//bin/../bin/./hare/" becomes "/usr/bin/hare"
     16 and "../../foo/bar" is unchanged.
     17 
     18 Different [[fs::fs]] implementations may have different rules for normalizing
     19 paths. For use-cases in which this is relevant, [[fs::resolve]] should be used
     20 instead.
     21 
     22 The buffer object includes an array of length [[MAX]], which can be somewhat
     23 large; on Linux it's 4095 bytes. You can allocate this on the stack in most
     24 cases, but you may prefer to allocate it elsewhere depending on your needs.
     25 Functions in this module return [[too_long]] if the buffer's capacity would be
     26 exceeded.
     27 
     28 	// Stack allocated
     29 	let buf = path::init()!;
     30 
     31 	// Statically allocated
     32 	static let buf = path::buffer { ... };
     33 	path::set(&buf)!;
     34 
     35 	// Heap allocated
     36 	let buf = alloc(path::init()!);
     37 	defer free(buf);