<html><head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="FileUtil" rel="Chapter" href="FileUtil.html"> <link title="FileUtilStr" rel="Chapter" href="FileUtilStr.html"> <link title="FilePath" rel="Chapter" href="FilePath.html"><title>FileUtil.cmp</title> </head> <body> <code class="code"><span class="keyword">let</span> cmp ?(skip1 = 0) fln1 ?(skip2 = 0) fln2 =<br> <span class="keyword">if</span> (reduce fln1) = (reduce fln2) <span class="keyword">then</span><br> <span class="constructor">None</span><br> <span class="keyword">else</span> <span class="keyword">if</span> (test (<span class="constructor">And</span>(<span class="constructor">Is_readable</span>,<span class="constructor">Is_file</span>)) fln1) <span class="keywordsign">&&</span> (test (<span class="constructor">And</span>(<span class="constructor">Is_readable</span>,<span class="constructor">Is_file</span>)) fln2) <span class="keyword">then</span><br> <span class="keyword">let</span> fd1 = open_in_bin fln1<br> <span class="keyword">in</span><br> <span class="keyword">let</span> fd2 = open_in_bin fln2<br> <span class="keyword">in</span><br> <span class="keyword">let</span> _ = seek_in fd1 skip1<br> <span class="keyword">in</span><br> <span class="keyword">let</span> _ = seek_in fd2 skip2<br> <span class="keyword">in</span><br> <span class="keyword">let</span> stream1 = <span class="constructor">Stream</span>.of_channel fd1<br> <span class="keyword">in</span><br> <span class="keyword">let</span> stream2 = <span class="constructor">Stream</span>.of_channel fd2<br> <span class="keyword">in</span><br> <span class="keyword">try</span> <br> <span class="keyword">while</span> ((<span class="constructor">Stream</span>.next stream1) = (<span class="constructor">Stream</span>.next stream2)) <br> <span class="keyword">do</span> () <span class="keyword">done</span>;<br> <span class="constructor">Some</span> (<span class="constructor">Stream</span>.count stream1)<br> <span class="keyword">with</span> <span class="constructor">Stream</span>.<span class="constructor">Failure</span> <span class="keywordsign">-></span><br> <span class="keyword">let</span> test_empty st = <br> <span class="keyword">try</span> <br> <span class="constructor">Stream</span>.empty st;<br> <span class="keyword">true</span><br> <span class="keyword">with</span> <span class="constructor">Stream</span>.<span class="constructor">Failure</span> <span class="keywordsign">-></span><br> <span class="keyword">false</span><br> <span class="keyword">in</span><br> <span class="keyword">match</span> ((test_empty stream1),(test_empty stream2)) <span class="keyword">with</span><br> <span class="keyword">true</span>, <span class="keyword">true</span> <span class="keywordsign">-></span> <span class="constructor">None</span><br> <span class="keywordsign">|</span> <span class="keyword">true</span>, <span class="keyword">false</span> <br> <span class="keywordsign">|</span> <span class="keyword">false</span>, <span class="keyword">true</span> <br> <span class="comment">(* Don't know how this case could be... *)</span><br> <span class="keywordsign">|</span> <span class="keyword">false</span>, <span class="keyword">false</span> <span class="keywordsign">-></span> <span class="constructor">Some</span> (<span class="constructor">Stream</span>.count stream1)<br> <span class="keyword">else</span><br> (<span class="constructor">Some</span> (-1))</code></body></html>