[PATCH] Add ability for can_write to indicate why the file is not writable

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Sep 11 10:43:31 PDT 2014


On 3 September 2014 21:36, Richard Smith <richard at metafoo.co.uk> wrote:
> Hi dblaikie,
>
> Add an optional output parameter to `can_write` to allow it to indicate why a file is not considered writable (along with a sample use from Clang where we currently produce stupid diagnostics saying `"can't open output file: Success"`).
>
> I'm not entirely sure this is the right design, and in particular it's a somewhat different interface from the other functions in this file. I also considered:
>
>   std::error_code can_write(const Twine &Path, bool &result);
>
> ... which seems redundant because `result` is set to `true` iff the error code is `success`, and ...
>
>   std::error_code can_write(const Twine &Path);
>
> ... which is terrible because `bool(can_write(Path))` is `true` iff the file is *not* writable, and ...
>
>   std::error_code cannot_write(const Twine &Path);
>
> ... which is inconsistent with other functions near here and ugly.

There are only two calls to can_write, both in clang, so I would
consider consistency to not be a big issue. My preferences would be

* Don't use can_write.
* Change both exists and can_write to "std::error_code access(const
Twine &Path, SomeEnum Mode)".
* Change can_write to "std::error_code write_access(const Twine &Path)".

Cheers,
Rafael



More information about the llvm-commits mailing list