about summary refs log tree commit diff
path: root/src/libstd/path/windows.rs
AgeCommit message (Collapse)AuthorLines
2014-02-07Rewrite path::Display to reduce unnecessary allocationKevin Ballard-12/+4
2014-02-06Remove std::conditionAlex Crichton-75/+13
This has been a long time coming. Conditions in rust were initially envisioned as being a good alternative to error code return pattern. The idea is that all errors are fatal-by-default, and you can opt-in to handling the error by registering an error handler. While sounding nice, conditions ended up having some unforseen shortcomings: * Actually handling an error has some very awkward syntax: let mut result = None; let mut answer = None; io::io_error::cond.trap(|e| { result = Some(e) }).inside(|| { answer = Some(some_io_operation()); }); match result { Some(err) => { /* hit an I/O error */ } None => { let answer = answer.unwrap(); /* deal with the result of I/O */ } } This pattern can certainly use functions like io::result, but at its core actually handling conditions is fairly difficult * The "zero value" of a function is often confusing. One of the main ideas behind using conditions was to change the signature of I/O functions. Instead of read_be_u32() returning a result, it returned a u32. Errors were notified via a condition, and if you caught the condition you understood that the "zero value" returned is actually a garbage value. These zero values are often difficult to understand, however. One case of this is the read_bytes() function. The function takes an integer length of the amount of bytes to read, and returns an array of that size. The array may actually be shorter, however, if an error occurred. Another case is fs::stat(). The theoretical "zero value" is a blank stat struct, but it's a little awkward to create and return a zero'd out stat struct on a call to stat(). In general, the return value of functions that can raise error are much more natural when using a Result as opposed to an always-usable zero-value. * Conditions impose a necessary runtime requirement on *all* I/O. In theory I/O is as simple as calling read() and write(), but using conditions imposed the restriction that a rust local task was required if you wanted to catch errors with I/O. While certainly an surmountable difficulty, this was always a bit of a thorn in the side of conditions. * Functions raising conditions are not always clear that they are raising conditions. This suffers a similar problem to exceptions where you don't actually know whether a function raises a condition or not. The documentation likely explains, but if someone retroactively adds a condition to a function there's nothing forcing upstream users to acknowledge a new point of task failure. * Libaries using I/O are not guaranteed to correctly raise on conditions when an error occurs. In developing various I/O libraries, it's much easier to just return `None` from a read rather than raising an error. The silent contract of "don't raise on EOF" was a little difficult to understand and threw a wrench into the answer of the question "when do I raise a condition?" Many of these difficulties can be overcome through documentation, examples, and general practice. In the end, all of these difficulties added together ended up being too overwhelming and improving various aspects didn't end up helping that much. A result-based I/O error handling strategy also has shortcomings, but the cognitive burden is much smaller. The tooling necessary to make this strategy as usable as conditions were is much smaller than the tooling necessary for conditions. Perhaps conditions may manifest themselves as a future entity, but for now we're going to remove them from the standard library. Closes #9795 Closes #8968
2014-02-02std,extra: remove use of & support for @[].Huon Wilson-8/+0
2014-02-02libextra: Remove `@str` from all the librariesPatrick Walton-2/+0
2014-01-29Removing do keyword from libstd and librustcScott Lawrence-2/+2
2014-01-23Update flip() to be rev().Sean Chalmers-5/+5
Consensus leaned in favour of using rev instead of flip.
2014-01-23Rename Invert to Flip - Issue 10632Sean Chalmers-5/+5
Renamed the invert() function in iter.rs to flip(). Also renamed the Invert<T> type to Flip<T>. Some related code comments changed. Documentation that I could find has been updated, and all the instances I could locate where the function/type were called have been updated as well.
2014-01-21[std::str] Remove the now unused not_utf8 condition.Simon Sapin-3/+3
2014-01-21[std::path] Rename .container_as_str_opt() to .container_as_str(), drop the ↵Simon Sapin-14/+6
old .container_as_str() behavior
2014-01-21[std::vec] Rename .pop_opt() to .pop(), drop the old .pop() behaviorSimon Sapin-1/+1
2014-01-19auto merge of #11643 : kballard/rust/path-root-path, r=ericktbors-3/+6
2014-01-18Expose platform independent path separatorsErick Tryzelaar-22/+27
2014-01-18auto merge of #11605 : alexcrichton/rust/issue-9582, r=brsonbors-2/+2
Closes #9582
2014-01-17Make WindowsPath::new("C:foo").root_path() return Some("C:")Kevin Ballard-3/+6
2014-01-18Rename iterators for consistencyPalmer Cox-13/+13
Rename existing iterators to get rid of the Iterator suffix and to give them names that better describe the things being iterated over.
2014-01-17auto merge of #11585 : nikomatsakis/rust/issue-3511-rvalue-lifetimes, r=pcwaltonbors-4/+10
Major changes: - Define temporary scopes in a syntax-based way that basically defaults to the innermost statement or conditional block, except for in a `let` initializer, where we default to the innermost block. Rules are documented in the code, but not in the manual (yet). See new test run-pass/cleanup-value-scopes.rs for examples. - Refactors Datum to better define cleanup roles. - Refactor cleanup scopes to not be tied to basic blocks, permitting us to have a very large number of scopes (one per AST node). - Introduce nascent documentation in trans/doc.rs covering datums and cleanup in a more comprehensive way. r? @pcwalton
2014-01-16Forbid coercing unsafe functions to closuresAlex Crichton-2/+2
Closes #9582
2014-01-15Issue #3511 - Rationalize temporary lifetimes.Niko Matsakis-4/+10
Major changes: - Define temporary scopes in a syntax-based way that basically defaults to the innermost statement or conditional block, except for in a `let` initializer, where we default to the innermost block. Rules are documented in the code, but not in the manual (yet). See new test run-pass/cleanup-value-scopes.rs for examples. - Refactors Datum to better define cleanup roles. - Refactor cleanup scopes to not be tied to basic blocks, permitting us to have a very large number of scopes (one per AST node). - Introduce nascent documentation in trans/doc.rs covering datums and cleanup in a more comprehensive way.
2014-01-15path: Fix joining Windows path when the receiver is "C:"Kevin Ballard-2/+9
WindowsPath::new("C:").join("a") produces r"C:\a". This is incorrect. It should produce "C:a".
2014-01-07stdtest: Fix all leaked trait importsAlex Crichton-3/+1
2014-01-07std: Fill in all missing importsAlex Crichton-2/+4
Fallout from the previous commits
2014-01-08Renamed Option::map_default and mutate_default to map_or and mutate_or_setMarvin Löbel-1/+1
2013-12-11Make 'self lifetime illegal.Erik Price-10/+10
Also remove all instances of 'self within the codebase. This fixes #10889.
2013-12-08Remove dead codesKiet Tran-5/+0
2013-12-04Revert "libstd: Change `Path::new` to `Path::init`."Kevin Ballard-172/+172
This reverts commit c54427ddfbbab41a39d14f2b1dc4f080cbc2d41b. Leave the #[ignores] in that were added to rustpkg tests. Conflicts: src/librustc/driver/driver.rs src/librustc/metadata/creader.rs
2013-11-29libstd: Change `Path::new` to `Path::init`.Patrick Walton-172/+172
2013-11-26test: Remove non-procedure uses of `do` from compiletest, libstd tests,Patrick Walton-22/+22
compile-fail tests, run-fail tests, and run-pass tests.
2013-11-26Removed unneccessary `_iter` suffixes from various APIsMarvin Löbel-33/+33
2013-11-24Remove linked failure from the runtimeAlex Crichton-1/+0
The reasons for doing this are: * The model on which linked failure is based is inherently complex * The implementation is also very complex, and there are few remaining who fully understand the implementation * There are existing race conditions in the core context switching function of the scheduler, and possibly others. * It's unclear whether this model of linked failure maps well to a 1:1 threading model Linked failure is often a desired aspect of tasks, but we would like to take a much more conservative approach in re-implementing linked failure if at all. Closes #8674 Closes #8318 Closes #8863
2013-11-19libstd: Change all uses of `&fn(A)->B` over to `|A|->B` in libstdPatrick Walton-2/+3
2013-11-03Fill out the remaining functionality in io::fileAlex Crichton-64/+0
This adds bindings to the remaining functions provided by libuv, all of which are useful operations on files which need to get exposed somehow. Some highlights: * Dropped `FileReader` and `FileWriter` and `FileStream` for one `File` type * Moved all file-related methods to be static methods under `File` * All directory related methods are still top-level functions * Created `io::FilePermission` types (backed by u32) that are what you'd expect * Created `io::FileType` and refactored `FileStat` to use FileType and FilePermission * Removed the expanding matrix of `FileMode` operations. The mode of reading a file will not have the O_CREAT flag, but a write mode will always have the O_CREAT flag. Closes #10130 Closes #10131 Closes #10121
2013-10-22Remove thread-blocking call to `libc::stat` in `Path::stat`Ziad Hatahet-28/+19
Fixes #9958
2013-10-16path2: Update for privacy changesKevin Ballard-9/+3
Remove redundant `contains_nul` definition. Make `parse_prefix` private.
2013-10-16path2: Update for latest masterKevin Ballard-9/+18
Also fix some issues that crept into earlier commits during the conflict resoution for the rebase.
2013-10-16path2: Remove Path.into_str()Kevin Ballard-9/+0
2013-10-16path2: Remove some API functionsKevin Ballard-261/+50
Delete the following API functions: - set_dirname() - with_dirname() - set_filestem() - with_filestem() - add_extension() - file_path() Also change pop() to return a boolean instead of an owned copy of the old filename.
2013-10-16path2: Update based on more review feedbackKevin Ballard-132/+115
Standardize the is_sep() functions to be the same in both posix and windows, and re-export from path. Update extra::glob to use this. Remove the usage of either, as it's going away. Move the WindowsPath-specific methods out of WindowsPath and make them top-level functions of path::windows instead. This way you cannot accidentally write code that will fail to compile on non-windows architectures without typing ::windows anywhere. Remove GenericPath::from_c_str() and just impl BytesContainer for CString instead. Remove .join_path() and .push_path() and just implement BytesContainer for Path instead. Remove FilenameDisplay and add a boolean flag to Display instead. Remove .each_parent(). It only had one caller, so just inline its definition there.
2013-10-15path2: Remove .with_display_str and friendsKevin Ballard-15/+9
Rewrite these methods as methods on Display and FilenameDisplay. This turns do path.with_display_str |s| { ... } into do path.display().with_str |s| { ... }
2013-10-15path2: Adjust the API to remove all the _str mutation methodsKevin Ballard-452/+396
Add a new trait BytesContainer that is implemented for both byte vectors and strings. Convert Path::from_vec and ::from_str to one function, Path::new(). Remove all the _str-suffixed mutation methods (push, join, with_*, set_*) and modify the non-suffixed versions to use BytesContainer.
2013-10-15path2: Remove Path::normalize()Kevin Ballard-7/+0
There are no clients of this API, so just remove it. Update the module docstring to mention normalization.
2013-10-15path2: Update for loop -> continueKevin Ballard-1/+1
2013-10-15path2: Update asserts for new format!() styleKevin Ballard-20/+23
2013-10-15path2: Replace the path module outrightKevin Ballard-0/+2733
Remove the old path. Rename path2 to path. Update all clients for the new path. Also make some miscellaneous changes to the Path APIs to help the adoption process.