http://git-wip-us.apache.org/repos/asf/mesos-site/blob/30b7fa50/content/api/latest/c++/windows_2rmdir_8hpp_source.html
----------------------------------------------------------------------
diff --git a/content/api/latest/c++/windows_2rmdir_8hpp_source.html
b/content/api/latest/c++/windows_2rmdir_8hpp_source.html
index ee22934..28a2f61 100644
--- a/content/api/latest/c++/windows_2rmdir_8hpp_source.html
+++ b/content/api/latest/c++/windows_2rmdir_8hpp_source.html
@@ -67,238 +67,191 @@
<div class="line"><a name="l00013"></a><span class="lineno">
13</span> <span class="preprocessor">#ifndef
__STOUT_OS_WINDOWS_RMDIR_HPP__</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">
14</span> <span class="preprocessor"></span><span
class="preprocessor">#define __STOUT_OS_WINDOWS_RMDIR_HPP__</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">
15</span> <span class="preprocessor"></span></div>
-<div class="line"><a name="l00016"></a><span class="lineno">
16</span> <span class="preprocessor">#include
<glog/logging.h></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">
16</span> <span class="preprocessor">#include <string></span></div>
<div class="line"><a name="l00017"></a><span class="lineno">
17</span> </div>
-<div class="line"><a name="l00018"></a><span class="lineno">
18</span> <span class="preprocessor">#include <<a class="code"
href="nothing_8hpp.html">stout/nothing.hpp</a>></span></div>
-<div class="line"><a name="l00019"></a><span class="lineno">
19</span> <span class="preprocessor">#include <<a class="code"
href="strings_8hpp.html">stout/strings.hpp</a>></span></div>
-<div class="line"><a name="l00020"></a><span class="lineno">
20</span> <span class="preprocessor">#include <<a class="code"
href="try_8hpp.html">stout/try.hpp</a>></span></div>
-<div class="line"><a name="l00021"></a><span class="lineno">
21</span> <span class="preprocessor">#include <<a class="code"
href="3rdparty_2stout_2include_2stout_2windows_8hpp.html">stout/windows.hpp</a>></span></div>
-<div class="line"><a name="l00022"></a><span class="lineno">
22</span> </div>
-<div class="line"><a name="l00023"></a><span class="lineno">
23</span> <span class="preprocessor">#include <<a class="code"
href="realpath_8hpp.html">stout/os/realpath.hpp</a>></span></div>
-<div class="line"><a name="l00024"></a><span class="lineno">
24</span> <span class="preprocessor">#include <<a class="code"
href="rm_8hpp.html">stout/os/rm.hpp</a>></span></div>
-<div class="line"><a name="l00025"></a><span class="lineno">
25</span> <span class="preprocessor">#include <<a class="code"
href="stat_8hpp.html">stout/os/stat.hpp</a>></span></div>
-<div class="line"><a name="l00026"></a><span class="lineno">
26</span> </div>
-<div class="line"><a name="l00027"></a><span class="lineno">
27</span> <span class="preprocessor">#include <<a class="code"
href="windows_2error_8hpp.html">stout/windows/error.hpp</a>></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">
18</span> <span class="preprocessor">#include
<glog/logging.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">
19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">
20</span> <span class="preprocessor">#include <<a class="code"
href="error_8hpp.html">stout/error.hpp</a>></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">
21</span> <span class="preprocessor">#include <<a class="code"
href="nothing_8hpp.html">stout/nothing.hpp</a>></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">
22</span> <span class="preprocessor">#include <<a class="code"
href="strings_8hpp.html">stout/strings.hpp</a>></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">
23</span> <span class="preprocessor">#include <<a class="code"
href="try_8hpp.html">stout/try.hpp</a>></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">
24</span> <span class="preprocessor">#include <<a class="code"
href="3rdparty_2stout_2include_2stout_2windows_8hpp.html">stout/windows.hpp</a>></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">
25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">
26</span> <span class="preprocessor">#include <<a class="code"
href="rm_8hpp.html">stout/os/rm.hpp</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">
27</span> <span class="preprocessor">#include <<a class="code"
href="stat_8hpp.html">stout/os/stat.hpp</a>></span></div>
<div class="line"><a name="l00028"></a><span class="lineno">
28</span> </div>
-<div class="line"><a name="l00029"></a><span class="lineno">
29</span> <span class="preprocessor">#include <<a class="code"
href="longpath_8hpp.html">stout/internal/windows/longpath.hpp</a>></span></div>
-<div class="line"><a name="l00030"></a><span class="lineno">
30</span> <span class="preprocessor">#include <<a class="code"
href="reparsepoint_8hpp.html">stout/internal/windows/reparsepoint.hpp</a>></span></div>
-<div class="line"><a name="l00031"></a><span class="lineno">
31</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">
29</span> <span class="preprocessor">#include <<a class="code"
href="windows_2error_8hpp.html">stout/windows/error.hpp</a>></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">
30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">
31</span> <span class="preprocessor">#include <<a class="code"
href="longpath_8hpp.html">stout/internal/windows/longpath.hpp</a>></span></div>
<div class="line"><a name="l00032"></a><span class="lineno">
32</span> </div>
-<div class="line"><a name="l00033"></a><span class="lineno">
33</span> <span class="keyword">namespace </span>os {</div>
-<div class="line"><a name="l00034"></a><span class="lineno">
34</span> <span class="keyword">namespace </span>internal {</div>
-<div class="line"><a name="l00035"></a><span class="lineno">
35</span> </div>
-<div class="line"><a name="l00036"></a><span class="lineno">
36</span> <span class="comment">// Recursive version of `RemoveDirectory`.
Two things are notable about this</span></div>
-<div class="line"><a name="l00037"></a><span class="lineno">
37</span> <span class="comment">// implementation:</span></div>
-<div class="line"><a name="l00038"></a><span class="lineno">
38</span> <span class="comment">//</span></div>
-<div class="line"><a name="l00039"></a><span class="lineno">
39</span> <span class="comment">// 1. Unlike `rmdir`, this requires
Windows-formatted paths, and therefore</span></div>
-<div class="line"><a name="l00040"></a><span class="lineno">
40</span> <span class="comment">// should be in the `internal`
namespace.</span></div>
-<div class="line"><a name="l00041"></a><span class="lineno">
41</span> <span class="comment">// 2. To match the semantics of the POSIX
implementation, this function</span></div>
-<div class="line"><a name="l00042"></a><span class="lineno">
42</span> <span class="comment">// implements the semantics of `rm -r`,
rather than `rmdir`. In particular,</span></div>
-<div class="line"><a name="l00043"></a><span class="lineno">
43</span> <span class="comment">// if `path` points at a file, this
function will delete it, while a call to</span></div>
-<div class="line"><a name="l00044"></a><span class="lineno">
44</span> <span class="comment">// `rmdir` will not.</span></div>
-<div class="line"><a name="l00045"></a><span class="lineno"><a class="line"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">
45</a></span> <span class="keyword">inline</span> <a class="code"
href="classTry.html">Try<Nothing></a> <a class="code"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">recursive_remove_directory</a>(</div>
-<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 
<span class="keyword">const</span> std::string& path, <span
class="keywordtype">bool</span> removeRoot, <span
class="keywordtype">bool</span> continueOnError)</div>
-<div class="line"><a name="l00047"></a><span class="lineno">
47</span> {</div>
-<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> 
<span class="comment">// NOTE: Special case required to match the semantics of
POSIX. See comment</span></div>
-<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> 
<span class="comment">// above. As below, this also handles symlinks
correctly, i.e., given a path</span></div>
-<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> 
<span class="comment">// to a symlink, we delete the symlink rather than the
target.</span></div>
-<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> 
<span class="keywordflow">if</span> (<a class="code"
href="namespaceos_1_1stat.html#a178d1c99fc88dae58f9a5fc4fc3167d5">os::stat::isfile</a>(path))
{</div>
-<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> 
<span class="keywordflow">return</span> <a class="code"
href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a>(path);</div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> 
}</div>
-<div class="line"><a name="l00054"></a><span class="lineno">
54</span> </div>
-<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> 
<span class="comment">// Appending a slash here if the path doesn't
already have one simplifies</span></div>
-<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> 
<span class="comment">// path join logic later, because (unlike Unix) Windows
doesn't like double</span></div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> 
<span class="comment">// slashes in paths.</span></div>
-<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> 
std::string current_path;</div>
-<div class="line"><a name="l00059"></a><span class="lineno">
59</span> </div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> 
<span class="keywordflow">if</span> (!<a class="code"
href="namespacestrings.html#a04772ad549ec2958e0cd80218c32a865">strings::endsWith</a>(path,
<span class="stringliteral">"\\"</span>)) {</div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> 
current_path = path + <span
class="stringliteral">"\\"</span>;</div>
-<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> 
current_path = path;</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> 
}</div>
+<div class="line"><a name="l00033"></a><span class="lineno">
33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">
34</span> <span class="keyword">namespace </span>os {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">
35</span> <span class="keyword">namespace </span>internal {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">
36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">
37</span> <span class="comment">// Recursive version of `RemoveDirectory`.
Two things are notable about this</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">
38</span> <span class="comment">// implementation:</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">
39</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">
40</span> <span class="comment">// 1. Unlike `rmdir`, this requires
Windows-formatted paths, and therefore</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">
41</span> <span class="comment">// should be in the `internal`
namespace.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">
42</span> <span class="comment">// 2. To match the semantics of the POSIX
implementation, this function</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">
43</span> <span class="comment">// implements the semantics of `rm -r`,
rather than `rmdir`. In particular,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">
44</span> <span class="comment">// if `path` points at a file, this
function will delete it, while a call to</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">
45</span> <span class="comment">// `rmdir` will not.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">
46</a></span> <span class="keyword">inline</span> <a class="code"
href="classTry.html">Try<Nothing></a> <a class="code"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">recursive_remove_directory</a>(</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> 
<span class="keyword">const</span> std::string& path, <span
class="keywordtype">bool</span> removeRoot, <span
class="keywordtype">bool</span> continueOnError)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">
48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> 
<span class="comment">// Base recursion case to delete a symlink or
file.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> 
<span class="comment">//</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> 
<span class="comment">// We explicitly delete symlinks here to handle hanging
symlinks. Note that</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> 
<span class="comment">// `os::rm` will correctly delete the symlink, not the
target.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> 
<span class="keywordflow">if</span> (<a class="code"
href="namespaceos_1_1stat.html#a0ba4d272b938da76e404648103077480">os::stat::islink</a>(path)
|| <a class="code"
href="namespaceos_1_1stat.html#a178d1c99fc88dae58f9a5fc4fc3167d5">os::stat::isfile</a>(path))
{</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> 
<span class="keywordflow">return</span> <a class="code"
href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a>(path);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> 
}</div>
+<div class="line"><a name="l00056"></a><span class="lineno">
56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> 
<span class="comment">// Recursion case to delete all files and subdirectories
of a directory.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">
58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> 
<span class="comment">// Appending a slash here if the path doesn't
already have one simplifies</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> 
<span class="comment">// path join logic later, because (unlike Unix) Windows
doesn't like double</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> 
<span class="comment">// slashes in paths.</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> 
<span class="keyword">const</span> std::string current_path =</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> 
<a class="code"
href="namespacestrings.html#a04772ad549ec2958e0cd80218c32a865">strings::endsWith</a>(path,
<span class="stringliteral">"\\"</span>) ? path : path + <span
class="stringliteral">"\\"</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">
64</span> </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> 
<span class="keyword">const</span> std::wstring long_current_path =</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> 
<a class="code"
href="namespaceinternal_1_1windows.html#abd7dbdbc8d95626d0c66455078380aa1">::internal::windows::longpath</a>(current_path);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> 
<a class="code"
href="namespaceinternal_1_1windows.html#abd7dbdbc8d95626d0c66455078380aa1">::internal::windows::longpath</a>(current_path);</div>
<div class="line"><a name="l00067"></a><span class="lineno">
67</span> </div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> 
<span class="comment">// Get first file matching pattern
`X:\path\to\wherever\*`.</span></div>
-<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> 
WIN32_FIND_DATAW found;</div>
-<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> 
<span class="keyword">const</span> std::wstring search_pattern =
long_current_path + L<span class="stringliteral">"*"</span>;</div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> 
<span class="keyword">const</span> <a class="code"
href="classSharedHandle.html">SharedHandle</a> search_handle(</div>
-<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> 
::FindFirstFileW(search_pattern.data(), &found),</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> 
::FindClose);</div>
-<div class="line"><a name="l00074"></a><span class="lineno">
74</span> </div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> 
<span class="keywordflow">if</span> (search_handle.get() ==
INVALID_HANDLE_VALUE) {</div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> 
<span class="keywordflow">return</span> <a class="code"
href="classWindowsError.html">WindowsError</a>(</div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> 
<span
class="stringliteral">"`os::internal::recursive_remove_directory` failed
when searching "</span></div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> 
<span class="stringliteral">"for files with pattern
'"</span> + <a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(search_pattern)
+ <span class="stringliteral">"'"</span>);</div>
-<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> 
}</div>
-<div class="line"><a name="l00080"></a><span class="lineno">
80</span> </div>
-<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> 
<span class="keywordflow">do</span> {</div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> 
<span class="comment">// NOTE: do-while is appropriate here because folder
is guaranteed to have</span></div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> 
<span class="comment">// at least a file called `.` (and probably also one
called `..`).</span></div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> 
<span class="keyword">const</span> std::wstring
current_file(found.cFileName);</div>
-<div class="line"><a name="l00085"></a><span class="lineno">
85</span> </div>
-<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> 
<span class="keyword">const</span> <span class="keywordtype">bool</span>
is_current_directory = current_file.compare(L<span
class="stringliteral">"."</span>) == 0;</div>
-<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> 
<span class="keyword">const</span> <span class="keywordtype">bool</span>
is_parent_directory = current_file.compare(L<span
class="stringliteral">".."</span>) == 0;</div>
-<div class="line"><a name="l00088"></a><span class="lineno">
88</span> </div>
-<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> 
<span class="comment">// Don't try to delete `.` and `..` files in
directory.</span></div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> 
<span class="keywordflow">if</span> (is_current_directory ||
is_parent_directory) {</div>
-<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> 
<span class="keywordflow">continue</span>;</div>
-<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> 
}</div>
-<div class="line"><a name="l00093"></a><span class="lineno">
93</span> </div>
-<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> 
<span class="comment">// Path to remove.</span></div>
-<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> 
<span class="keyword">const</span> std::wstring current_absolute_path =
long_current_path + current_file;</div>
-<div class="line"><a name="l00096"></a><span class="lineno">
96</span> </div>
-<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> 
<a class="code" href="classTry.html">Try<bool></a> is_reparse_point
=</div>
-<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> 
<a class="code"
href="namespaceinternal_1_1windows.html#a9205fe9be7dc028375cd24338483152b">::internal::windows::reparse_point_attribute_set</a>(current_absolute_path);</div>
-<div class="line"><a name="l00099"></a><span class="lineno">
99</span> </div>
-<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> 
<span class="comment">// Delete current path, whether it's a symlink,
directory, or file.</span></div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> 
<span class="keywordflow">if</span> (!is_reparse_point.<a class="code"
href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>() &&
is_reparse_point.<a class="code"
href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()) {</div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> 
<span class="comment">// NOTE: This is a best-effort attempt to delete
symlinks even when they</span></div>
-<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> 
<span class="comment">// are "hanging" (i.e., when the target
has since been deleted). We call</span></div>
-<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> 
<span class="comment">// both `RemoveDirectory` and `DeleteFile` here
because we are not sure</span></div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> 
<span class="comment">// whether the deleted target was a directory or a
file, which in general</span></div>
-<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> 
<span class="comment">// is hard to determine on Windows.</span></div>
-<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> 
<span class="comment">//</span></div>
-<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> 
<span class="comment">// If either `RemoveDirectory` or `DeleteFile`
succeeds, the reparse</span></div>
-<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> 
<span class="comment">// point has been successfully removed, and we
report success.</span></div>
-<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> 
<span class="keyword">const</span> BOOL <a class="code"
href="namespaceos.html#a84298b990ad52dfd353358427b04ff3f">rmdir</a> =
::RemoveDirectoryW(current_absolute_path.data());</div>
-<div class="line"><a name="l00111"></a><span class="lineno">
111</span> </div>
-<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> 
<span class="keywordflow">if</span> (rmdir == FALSE) {</div>
-<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> 
<span class="keyword">const</span> BOOL <a class="code"
href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">rm</a> =
::DeleteFileW(current_absolute_path.data());</div>
-<div class="line"><a name="l00114"></a><span class="lineno">
114</span> </div>
-<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> 
<span class="keywordflow">if</span> (rm == FALSE) {</div>
-<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> 
<span class="keywordflow">return</span> <a class="code"
href="classWindowsError.html">WindowsError</a>(</div>
-<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> 
<span class="stringliteral">"Failed to remove reparse point
at '"</span> +</div>
-<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> 
<a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path)
+ <span class="stringliteral">"'"</span>);</div>
-<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> 
}</div>
-<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> 
}</div>
-<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> 
} <span class="keywordflow">else</span> <span class="keywordflow">if</span>
(<a class="code"
href="namespaceos_1_1stat.html#aa86aaa21fefc0e9cab89050b60aeca40">os::stat::isdir</a>(<a
class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path)))
{</div>
-<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> 
<a class="code" href="classTry.html">Try<Nothing></a> <a
class="code"
href="namespacerouting_1_1link.html#aec1d046cc8ec45a0265d0522d673ade8">removed</a>
= <a class="code"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">recursive_remove_directory</a>(</div>
-<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> 
<a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path),
<span class="keyword">true</span>, continueOnError);</div>
-<div class="line"><a name="l00124"></a><span class="lineno">
124</span> </div>
-<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> 
<span class="keywordflow">if</span> (removed.<a class="code"
href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> 
<span class="keywordflow">if</span> (continueOnError) {</div>
-<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> 
LOG(WARNING) << <span class="stringliteral">"Failed to
delete directory "</span></div>
-<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> 
<< <a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path)</div>
-<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> 
<< <span class="stringliteral">" with error
"</span> << removed.<a class="code"
href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>();</div>
-<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> 
<span class="keywordflow">return</span> <a class="code"
href="classError.html">Error</a>(removed.<a class="code"
href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
-<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> 
}</div>
-<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> 
}</div>
-<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> 
<span class="keywordflow">if</span>
(::DeleteFileW(current_absolute_path.data()) == 0) {</div>
-<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> 
<span class="keywordflow">if</span> (continueOnError) {</div>
-<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> 
LOG(WARNING)</div>
-<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> 
<< <span
class="stringliteral">"`os::internal::recursive_remove_directory`"</span></div>
-<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> 
<< <span class="stringliteral">" attempted to delete
file '"</span></div>
-<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> 
<< <a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path)
<< <span class="stringliteral">"', but
failed"</span>;</div>
-<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> 
<span class="keywordflow">return</span> <a class="code"
href="classWindowsError.html">WindowsError</a>(</div>
-<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> 
<span
class="stringliteral">"`os::internal::recursive_remove_directory`
attempted to delete "</span></div>
-<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> 
<span class="stringliteral">"file '"</span> + <a
class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path)
+ <span class="stringliteral">"', but failed"</span>);</div>
-<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> 
}</div>
-<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> 
}</div>
-<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> 
}</div>
-<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> 
} <span class="keywordflow">while</span> (::FindNextFileW(search_handle.get(),
&found));</div>
-<div class="line"><a name="l00149"></a><span class="lineno">
149</span> </div>
-<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> 
<span class="comment">// Finally, remove current directory unless `removeRoot`
is disabled.</span></div>
-<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> 
<span class="keywordflow">if</span> (removeRoot &&
::RemoveDirectoryW(long_current_path.data()) == FALSE) {</div>
-<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> 
<span class="keywordflow">if</span> (continueOnError) {</div>
-<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> 
LOG(WARNING) << <span
class="stringliteral">"`os::internal::recursive_remove_directory`"</span></div>
-<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> 
<< <span class="stringliteral">" attempted to
delete directory '"</span></div>
-<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> 
<< current_path << <span
class="stringliteral">"', but failed"</span>;</div>
-<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> 
<span class="keywordflow">return</span> <a class="code"
href="classErrnoError.html">ErrnoError</a>(<span
class="stringliteral">"rmdir failed in 'continueOnError'
mode"</span>);</div>
-<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> 
<span class="keywordflow">return</span> <a class="code"
href="classErrnoError.html">ErrnoError</a>(</div>
-<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> 
<span
class="stringliteral">"`os::internal::recursive_remove_directory`
attempted to delete "</span></div>
-<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> 
<span class="stringliteral">"directory '"</span> +
current_path + <span class="stringliteral">"', but
failed"</span>);</div>
-<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> 
}</div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> 
}</div>
-<div class="line"><a name="l00163"></a><span class="lineno">
163</span> </div>
-<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> 
<span class="keywordflow">return</span> <a class="code"
href="structNothing.html">Nothing</a>();</div>
-<div class="line"><a name="l00165"></a><span class="lineno">
165</span> }</div>
-<div class="line"><a name="l00166"></a><span class="lineno">
166</span> </div>
-<div class="line"><a name="l00167"></a><span class="lineno">
167</span> } <span class="comment">// namespace internal {</span></div>
-<div class="line"><a name="l00168"></a><span class="lineno">
168</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> 
<span class="comment">// Scope the `search_handle` so that it is closed before
we delete the current</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> 
<span class="comment">// directory.</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> 
{</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> 
<span class="comment">// Get first file matching pattern
`X:\path\to\wherever\*`.</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> 
WIN32_FIND_DATAW found;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> 
<span class="keyword">const</span> std::wstring search_pattern =
long_current_path + L<span class="stringliteral">"*"</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> 
<span class="keyword">const</span> <a class="code"
href="classSharedHandle.html">SharedHandle</a> search_handle(</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> 
::FindFirstFileW(search_pattern.data(), &found), ::FindClose);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">
76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> 
<span class="keywordflow">if</span> (search_handle.get() ==
INVALID_HANDLE_VALUE) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> 
<span class="keywordflow">return</span> <a class="code"
href="classWindowsError.html">WindowsError</a>(</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> 
<span class="stringliteral">"FindFirstFile failed for pattern
"</span> + <a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(search_pattern));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> 
}</div>
+<div class="line"><a name="l00081"></a><span class="lineno">
81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> 
<span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> 
<span class="comment">// NOTE: do-while is appropriate here because folder
is guaranteed to have</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> 
<span class="comment">// at least a file called `.` (and probably also one
called `..`).</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> 
<span class="keyword">const</span> std::wstring
current_file(found.cFileName);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">
86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> 
<span class="keyword">const</span> <span class="keywordtype">bool</span>
is_current_directory = current_file.compare(L<span
class="stringliteral">"."</span>) == 0;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> 
<span class="keyword">const</span> <span class="keywordtype">bool</span>
is_parent_directory = current_file.compare(L<span
class="stringliteral">".."</span>) == 0;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">
89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> 
<span class="comment">// Don't try to delete `.` and `..` files in
directory.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> 
<span class="keywordflow">if</span> (is_current_directory ||
is_parent_directory) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> 
<span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> 
}</div>
+<div class="line"><a name="l00094"></a><span class="lineno">
94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> 
<span class="comment">// Path to remove, note that recursion will call
`longpath`.</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> 
<span class="keyword">const</span> std::wstring current_absolute_path
=</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> 
long_current_path + current_file;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">
98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> 
<span class="comment">// Depth-first search, deleting files and
directories.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> 
<a class="code" href="classTry.html">Try<Nothing></a> <a
class="code"
href="namespacerouting_1_1link.html#aec1d046cc8ec45a0265d0522d673ade8">removed</a>
= <a class="code"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">recursive_remove_directory</a>(</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> 
<a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path),
<span class="keyword">true</span>, continueOnError);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">
102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> 
<span class="keywordflow">if</span> (removed.<a class="code"
href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> 
<span class="keywordflow">if</span> (continueOnError) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> 
LOG(WARNING) << <span class="stringliteral">"Failed to
delete path "</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> 
<< <a class="code"
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(current_absolute_path)
<< <span class="stringliteral">" with error "</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> 
<< removed.<a class="code"
href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>();</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> 
} <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> 
<span class="keywordflow">return</span> <a class="code"
href="classError.html">Error</a>(removed.<a class="code"
href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> 
}</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> 
}</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> 
} <span class="keywordflow">while</span>
(::FindNextFileW(search_handle.get(), &found));</div>
+<div class="line"><a name="l00113"></a><span class="lineno">
113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> 
<span class="comment">// Check that this loop ended for the right
reason.</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> 
<span class="keyword">const</span> DWORD <a class="code"
href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>
= ::GetLastError();</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> 
<span class="keywordflow">if</span> (error != ERROR_NO_MORE_FILES) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> 
<span class="keywordflow">return</span> <a class="code"
href="classWindowsError.html">WindowsError</a>(error);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> 
}</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> 
} <span class="comment">// Search Handle is closed when this scope is
exited.</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">
120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> 
<span class="comment">// Finally, remove current directory unless `removeRoot`
is disabled.</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> 
<span class="keywordflow">if</span> (removeRoot) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> 
<span class="keywordflow">if</span> (!<a class="code"
href="namespaceos_1_1stat.html#aa86aaa21fefc0e9cab89050b60aeca40">os::stat::isdir</a>(current_path,</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> 
<a class="code"
href="namespaceos_1_1stat.html#a305c82e6d53ccd82665b4b3648afcd1ca884cbffa48c7e5b804161fdc71389c7e">os::stat::FollowSymlink::DO_NOT_FOLLOW_SYMLINK</a>))
{</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> 
<span class="keywordflow">return</span> <a class="code"
href="classError.html">Error</a>(<span class="stringliteral">"Refusing to
rmdir non-directory "</span> + current_path);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> 
} <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> 
<span class="keywordflow">return</span> <a class="code"
href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a>(current_path);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> 
}</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> 
}</div>
+<div class="line"><a name="l00130"></a><span class="lineno">
130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> 
<span class="keywordflow">return</span> <a class="code"
href="structNothing.html">Nothing</a>();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">
132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno">
133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">
134</span> } <span class="comment">// namespace internal {</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">
135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">
136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">
137</span> <span class="comment">// By default, recursively deletes a
directory akin to: 'rm -r'. If</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">
138</span> <span class="comment">// `recursive` is false, it deletes a
directory akin to: 'rmdir'. In</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">
139</span> <span class="comment">// recursive mode, `removeRoot` can be
set to false to enable removing</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">
140</span> <span class="comment">// all the files and directories beneath
the given root directory, but</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">
141</span> <span class="comment">// not the root directory
itself.</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">
142</span> <span class="comment">// Note that this function expects an
absolute path.</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">
143</span> <span class="comment">// By default rmdir aborts when an error
occurs during the deletion of any file</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">
144</span> <span class="comment">// but if continueOnError is set to true,
rmdir logs the error and continues</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">
145</span> <span class="comment">// with the next file.</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">
146</span> <span class="keyword">inline</span> <a class="code"
href="classTry.html">Try<Nothing></a> <a class="code"
href="namespaceos.html#a84298b990ad52dfd353358427b04ff3f">rmdir</a>(</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> 
<span class="keyword">const</span> std::string& directory,</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> 
<span class="keywordtype">bool</span> recursive = <span
class="keyword">true</span>,</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> 
<span class="keywordtype">bool</span> removeRoot = <span
class="keyword">true</span>,</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> 
<span class="keywordtype">bool</span> continueOnError = <span
class="keyword">false</span>)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">
151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> 
<span class="comment">// The API of this function also deletes files symlinks
according to the tests.</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> 
<span class="keywordflow">if</span> (!<a class="code"
href="namespaceos.html#a69b3969276ffa4cb698b9431ee43bd7c">os::exists</a>(directory))
{</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> 
<span class="keywordflow">return</span> <a class="code"
href="classWindowsError.html">WindowsError</a>(ERROR_FILE_NOT_FOUND);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> 
}</div>
+<div class="line"><a name="l00156"></a><span class="lineno">
156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> 
<span class="keywordflow">if</span> (recursive) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> 
<span class="keywordflow">return</span> <a class="code"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">os::internal::recursive_remove_directory</a>(</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> 
directory, removeRoot, continueOnError);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> 
} <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> 
<span class="keywordflow">if</span> (!<a class="code"
href="namespaceos_1_1stat.html#aa86aaa21fefc0e9cab89050b60aeca40">os::stat::isdir</a>(directory,</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> 
<a class="code"
href="namespaceos_1_1stat.html#a305c82e6d53ccd82665b4b3648afcd1ca884cbffa48c7e5b804161fdc71389c7e">os::stat::FollowSymlink::DO_NOT_FOLLOW_SYMLINK</a>))
{</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> 
<span class="keywordflow">return</span> <a class="code"
href="classError.html">Error</a>(<span class="stringliteral">"Refusing to
rmdir non-directory "</span> + directory);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> 
} <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> 
<span class="keywordflow">return</span> <a class="code"
href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a>(directory);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> 
}</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> 
}</div>
+<div class="line"><a name="l00168"></a><span class="lineno">
168</span> }</div>
<div class="line"><a name="l00169"></a><span class="lineno">
169</span> </div>
-<div class="line"><a name="l00170"></a><span class="lineno">
170</span> <span class="comment">// By default, recursively deletes a
directory akin to: 'rm -r'. If</span></div>
-<div class="line"><a name="l00171"></a><span class="lineno">
171</span> <span class="comment">// `recursive` is false, it deletes a
directory akin to: 'rmdir'. In</span></div>
-<div class="line"><a name="l00172"></a><span class="lineno">
172</span> <span class="comment">// recursive mode, `removeRoot` can be
set to false to enable removing</span></div>
-<div class="line"><a name="l00173"></a><span class="lineno">
173</span> <span class="comment">// all the files and directories beneath
the given root directory, but</span></div>
-<div class="line"><a name="l00174"></a><span class="lineno">
174</span> <span class="comment">// not the root directory
itself.</span></div>
-<div class="line"><a name="l00175"></a><span class="lineno">
175</span> <span class="comment">// Note that this function expects an
absolute path.</span></div>
-<div class="line"><a name="l00176"></a><span class="lineno">
176</span> <span class="comment">// By default rmdir aborts when an error
occurs during the deletion of any file</span></div>
-<div class="line"><a name="l00177"></a><span class="lineno">
177</span> <span class="comment">// but if continueOnError is set to true,
rmdir logs the error and continues</span></div>
-<div class="line"><a name="l00178"></a><span class="lineno">
178</span> <span class="comment">// with the next file.</span></div>
-<div class="line"><a name="l00179"></a><span class="lineno">
179</span> <span class="keyword">inline</span> <a class="code"
href="classTry.html">Try<Nothing></a> <a class="code"
href="namespaceos.html#a84298b990ad52dfd353358427b04ff3f">rmdir</a>(</div>
-<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> 
<span class="keyword">const</span> std::string& directory,</div>
-<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> 
<span class="keywordtype">bool</span> recursive = <span
class="keyword">true</span>,</div>
-<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> 
<span class="keywordtype">bool</span> removeRoot = <span
class="keyword">true</span>,</div>
-<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> 
<span class="keywordtype">bool</span> continueOnError = <span
class="keyword">false</span>)</div>
-<div class="line"><a name="l00184"></a><span class="lineno">
184</span> {</div>
-<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> 
<span class="comment">// Canonicalize the path to Windows style for the call
to</span></div>
-<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> 
<span class="comment">// `recursive_remove_directory`.</span></div>
-<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> 
<a class="code" href="classResult.html">Result<std::string></a> root =
<a class="code"
href="namespaceos.html#aa533c79d98af12b40b567a851e442373">os::realpath</a>(directory);</div>
-<div class="line"><a name="l00188"></a><span class="lineno">
188</span> </div>
-<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> 
<span class="keywordflow">if</span> (root.<a class="code"
href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> 
<span class="keywordflow">return</span> <a class="code"
href="classError.html">Error</a>(root.<a class="code"
href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">error</a>());</div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> 
} <span class="keywordflow">else</span> <span class="keywordflow">if</span>
(root.<a class="code"
href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> 
<span class="keywordflow">return</span> <a class="code"
href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> 
<span class="stringliteral">"Argument to `os::rmdir` is not a valid
directory or file: '"</span> +</div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> 
directory + <span class="stringliteral">"'"</span>);</div>
-<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> 
}</div>
-<div class="line"><a name="l00196"></a><span class="lineno">
196</span> </div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> 
<span class="keywordflow">if</span> (!recursive) {</div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> 
<span class="keywordflow">if</span> (::_rmdir(directory.c_str()) < 0)
{</div>
-<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> 
<span class="keywordflow">return</span> <a class="code"
href="classErrnoError.html">ErrnoError</a>();</div>
-<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> 
<span class="keywordflow">return</span> <a class="code"
href="structNothing.html">Nothing</a>();</div>
-<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> 
}</div>
-<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> 
} <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> 
<span class="keywordflow">return</span> <a class="code"
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">os::internal::recursive_remove_directory</a>(</div>
-<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> 
root.<a class="code"
href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>(),</div>
-<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> 
removeRoot,</div>
-<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> 
continueOnError);</div>
-<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> 
}</div>
-<div class="line"><a name="l00209"></a><span class="lineno">
209</span> }</div>
-<div class="line"><a name="l00210"></a><span class="lineno">
210</span> </div>
-<div class="line"><a name="l00211"></a><span class="lineno">
211</span> } <span class="comment">// namespace os {</span></div>
-<div class="line"><a name="l00212"></a><span class="lineno">
212</span> </div>
-<div class="line"><a name="l00213"></a><span class="lineno">
213</span> </div>
-<div class="line"><a name="l00214"></a><span class="lineno">
214</span> <span class="preprocessor">#endif //
__STOUT_OS_WINDOWS_RMDIR_HPP__</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">
170</span> } <span class="comment">// namespace os {</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">
171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">
172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">
173</span> <span class="preprocessor">#endif //
__STOUT_OS_WINDOWS_RMDIR_HPP__</span></div>
<div class="ttc"
id="namespacestrings_html_a04772ad549ec2958e0cd80218c32a865"><div
class="ttname"><a
href="namespacestrings.html#a04772ad549ec2958e0cd80218c32a865">strings::endsWith</a></div><div
class="ttdeci">bool endsWith(const std::string &s, const std::string
&suffix)</div><div class="ttdef"><b>Definition:</b>
strings.hpp:393</div></div>
-<div class="ttc" id="realpath_8hpp_html"><div class="ttname"><a
href="realpath_8hpp.html">realpath.hpp</a></div></div>
<div class="ttc" id="namespaceos_html_a84298b990ad52dfd353358427b04ff3f"><div
class="ttname"><a
href="namespaceos.html#a84298b990ad52dfd353358427b04ff3f">os::rmdir</a></div><div
class="ttdeci">Try< Nothing > rmdir(const std::string &directory,
bool recursive=true, bool removeRoot=true, bool
continueOnError=false)</div><div class="ttdef"><b>Definition:</b>
rmdir.hpp:43</div></div>
-<div class="ttc" id="classResult_html_ac2cdc0db9f9d29a5bb2f1cf19c29da49"><div
class="ttname"><a
href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">Result::isNone</a></div><div
class="ttdeci">bool isNone() const </div><div class="ttdef"><b>Definition:</b>
result.hpp:109</div></div>
+<div class="ttc" id="namespaceos_html_a69b3969276ffa4cb698b9431ee43bd7c"><div
class="ttname"><a
href="namespaceos.html#a69b3969276ffa4cb698b9431ee43bd7c">os::exists</a></div><div
class="ttdeci">bool exists(const std::string &path)</div><div
class="ttdef"><b>Definition:</b> exists.hpp:26</div></div>
<div class="ttc" id="structNothing_html"><div class="ttname"><a
href="structNothing.html">Nothing</a></div><div
class="ttdef"><b>Definition:</b> nothing.hpp:16</div></div>
<div class="ttc"
id="namespaceos_1_1stat_html_a178d1c99fc88dae58f9a5fc4fc3167d5"><div
class="ttname"><a
href="namespaceos_1_1stat.html#a178d1c99fc88dae58f9a5fc4fc3167d5">os::stat::isfile</a></div><div
class="ttdeci">bool isfile(const std::string &path, const FollowSymlink
follow=FollowSymlink::FOLLOW_SYMLINK)</div><div
class="ttdef"><b>Definition:</b> stat.hpp:87</div></div>
<div class="ttc" id="classError_html"><div class="ttname"><a
href="classError.html">Error</a></div><div class="ttdef"><b>Definition:</b>
errorbase.hpp:35</div></div>
<div class="ttc" id="namespaceos_html_ac1c8ce3595084d78291f98c2be9f62ba"><div
class="ttname"><a
href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a></div><div
class="ttdeci">Try< Nothing > rm(const std::string &path)</div><div
class="ttdef"><b>Definition:</b> rm.hpp:26</div></div>
<div class="ttc" id="classSharedHandle_html"><div class="ttname"><a
href="classSharedHandle.html">SharedHandle</a></div><div
class="ttdef"><b>Definition:</b> windows.hpp:78</div></div>
+<div class="ttc"
id="namespaceos_1_1stat_html_a0ba4d272b938da76e404648103077480"><div
class="ttname"><a
href="namespaceos_1_1stat.html#a0ba4d272b938da76e404648103077480">os::stat::islink</a></div><div
class="ttdeci">bool islink(const std::string &path)</div><div
class="ttdef"><b>Definition:</b> stat.hpp:67</div></div>
<div class="ttc" id="classTry_html"><div class="ttname"><a
href="classTry.html">Try</a></div><div class="ttdef"><b>Definition:</b>
try.hpp:34</div></div>
-<div class="ttc" id="namespaceos_html_aa533c79d98af12b40b567a851e442373"><div
class="ttname"><a
href="namespaceos.html#aa533c79d98af12b40b567a851e442373">os::realpath</a></div><div
class="ttdeci">Result< std::string > realpath(const std::string
&path)</div><div class="ttdef"><b>Definition:</b>
realpath.hpp:24</div></div>
-<div class="ttc" id="classResult_html_a521adf96f5c27d26d6b1d580aae8aaee"><div
class="ttname"><a
href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">Result::error</a></div><div
class="ttdeci">static Result< T > error(const std::string
&message)</div><div class="ttdef"><b>Definition:</b>
result.hpp:53</div></div>
<div class="ttc" id="classWindowsError_html"><div class="ttname"><a
href="classWindowsError.html">WindowsError</a></div><div
class="ttdef"><b>Definition:</b> error.hpp:106</div></div>
-<div class="ttc" id="classErrnoError_html"><div class="ttname"><a
href="classErrnoError.html">ErrnoError</a></div><div
class="ttdef"><b>Definition:</b> errorbase.hpp:49</div></div>
-<div class="ttc"
id="namespaceinternal_1_1windows_html_a9205fe9be7dc028375cd24338483152b"><div
class="ttname"><a
href="namespaceinternal_1_1windows.html#a9205fe9be7dc028375cd24338483152b">internal::windows::reparse_point_attribute_set</a></div><div
class="ttdeci">Try< bool > reparse_point_attribute_set(const
std::wstring &absolute_path)</div><div class="ttdef"><b>Definition:</b>
reparsepoint.hpp:136</div></div>
+<div class="ttc"
id="namespaceos_1_1stat_html_a305c82e6d53ccd82665b4b3648afcd1ca884cbffa48c7e5b804161fdc71389c7e"><div
class="ttname"><a
href="namespaceos_1_1stat.html#a305c82e6d53ccd82665b4b3648afcd1ca884cbffa48c7e5b804161fdc71389c7e">os::stat::FollowSymlink::DO_NOT_FOLLOW_SYMLINK</a></div></div>
<div class="ttc" id="3rdparty_2stout_2include_2stout_2windows_8hpp_html"><div
class="ttname"><a
href="3rdparty_2stout_2include_2stout_2windows_8hpp.html">windows.hpp</a></div></div>
-<div class="ttc" id="classResult_html"><div class="ttname"><a
href="classResult.html">Result</a></div><div class="ttdef"><b>Definition:</b>
result.hpp:40</div></div>
-<div class="ttc" id="reparsepoint_8hpp_html"><div class="ttname"><a
href="reparsepoint_8hpp.html">reparsepoint.hpp</a></div></div>
-<div class="ttc"
id="namespaceos_1_1internal_html_a1f75643e24051d2b8d98244abf0b9ece"><div
class="ttname"><a
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">os::internal::recursive_remove_directory</a></div><div
class="ttdeci">Try< Nothing > recursive_remove_directory(const
std::string &path, bool removeRoot, bool continueOnError)</div><div
class="ttdef"><b>Definition:</b> rmdir.hpp:45</div></div>
+<div class="ttc"
id="namespaceos_1_1internal_html_a1f75643e24051d2b8d98244abf0b9ece"><div
class="ttname"><a
href="namespaceos_1_1internal.html#a1f75643e24051d2b8d98244abf0b9ece">os::internal::recursive_remove_directory</a></div><div
class="ttdeci">Try< Nothing > recursive_remove_directory(const
std::string &path, bool removeRoot, bool continueOnError)</div><div
class="ttdef"><b>Definition:</b> rmdir.hpp:46</div></div>
<div class="ttc" id="nothing_8hpp_html"><div class="ttname"><a
href="nothing_8hpp.html">nothing.hpp</a></div></div>
<div class="ttc"
id="namespacerouting_1_1link_html_aec1d046cc8ec45a0265d0522d673ade8"><div
class="ttname"><a
href="namespacerouting_1_1link.html#aec1d046cc8ec45a0265d0522d673ade8">routing::link::removed</a></div><div
class="ttdeci">process::Future< Nothing > removed(const std::string
&link)</div></div>
<div class="ttc" id="longpath_8hpp_html"><div class="ttname"><a
href="longpath_8hpp.html">longpath.hpp</a></div></div>
-<div class="ttc" id="classResult_html_aedf79f3b14dcda5791b84a64ada4d412"><div
class="ttname"><a
href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">Result::get</a></div><div
class="ttdeci">const T & get() const </div><div
class="ttdef"><b>Definition:</b> result.hpp:112</div></div>
<div class="ttc" id="classTry_html_aec4a11ddd3c036e889d90b7eb6258ba7"><div
class="ttname"><a
href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">Try::error</a></div><div
class="ttdeci">static Try error(const E &e)</div><div
class="ttdef"><b>Definition:</b> try.hpp:42</div></div>
+<div class="ttc" id="error_8hpp_html"><div class="ttname"><a
href="error_8hpp.html">error.hpp</a></div></div>
<div class="ttc" id="classTry_html_a0b98f95163b8a38daafd1651b043a276"><div
class="ttname"><a
href="classTry.html#a0b98f95163b8a38daafd1651b043a276">Try::isError</a></div><div
class="ttdeci">bool isError() const </div><div
class="ttdef"><b>Definition:</b> try.hpp:71</div></div>
+<div class="ttc"
id="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec_html_ae58e703656ab4a1bd5d9870441236727"><div
class="ttname"><a
href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">mesos::internal::slave::cni::spec::error</a></div><div
class="ttdeci">std::string error(const std::string &msg, uint32_t
code)</div></div>
<div class="ttc" id="try_8hpp_html"><div class="ttname"><a
href="try_8hpp.html">try.hpp</a></div></div>
<div class="ttc" id="stat_8hpp_html"><div class="ttname"><a
href="stat_8hpp.html">stat.hpp</a></div></div>
<div class="ttc"
id="namespaceos_1_1stat_html_aa86aaa21fefc0e9cab89050b60aeca40"><div
class="ttname"><a
href="namespaceos_1_1stat.html#aa86aaa21fefc0e9cab89050b60aeca40">os::stat::isdir</a></div><div
class="ttdeci">bool isdir(const std::string &path, const FollowSymlink
follow=FollowSymlink::FOLLOW_SYMLINK)</div><div
class="ttdef"><b>Definition:</b> stat.hpp:78</div></div>
-<div class="ttc" id="classResult_html_aeca16ad17d299ad885c9b46c83b12a3d"><div
class="ttname"><a
href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">Result::isError</a></div><div
class="ttdeci">bool isError() const </div><div
class="ttdef"><b>Definition:</b> result.hpp:110</div></div>
<div class="ttc"
id="namespaceinternal_1_1windows_html_abd7dbdbc8d95626d0c66455078380aa1"><div
class="ttname"><a
href="namespaceinternal_1_1windows.html#abd7dbdbc8d95626d0c66455078380aa1">internal::windows::longpath</a></div><div
class="ttdeci">std::wstring longpath(const std::string &path)</div><div
class="ttdef"><b>Definition:</b> longpath.hpp:38</div></div>
<div class="ttc" id="windows_2error_8hpp_html"><div class="ttname"><a
href="windows_2error_8hpp.html">error.hpp</a></div></div>
<div class="ttc" id="namespacens_html_a28116b46e6543597a11733424cd1aa20"><div
class="ttname"><a
href="namespacens.html#a28116b46e6543597a11733424cd1aa20">ns::stringify</a></div><div
class="ttdeci">std::string stringify(int flags)</div></div>
-<div class="ttc" id="classTry_html_a7be0768038e0628632492edf6cc1515a"><div
class="ttname"><a
href="classTry.html#a7be0768038e0628632492edf6cc1515a">Try::get</a></div><div
class="ttdeci">const T & get() const </div><div
class="ttdef"><b>Definition:</b> try.hpp:73</div></div>
<div class="ttc" id="rm_8hpp_html"><div class="ttname"><a
href="rm_8hpp.html">rm.hpp</a></div></div>
<div class="ttc" id="strings_8hpp_html"><div class="ttname"><a
href="strings_8hpp.html">strings.hpp</a></div></div>
</div><!-- fragment --></div><!-- contents -->