unison

Fork of Unison, a bi-directional file synchronization tool
git clone git://git.laack.co/unison.git
Log | Files | Refs | README | LICENSE

fileutil.ml (1353B)


      1 (* Unison file synchronizer: src/fileutil.ml *)
      2 (* Copyright 1999-2020, Benjamin C. Pierce
      3 
      4     This program is free software: you can redistribute it and/or modify
      5     it under the terms of the GNU General Public License as published by
      6     the Free Software Foundation, either version 3 of the License, or
      7     (at your option) any later version.
      8 
      9     This program is distributed in the hope that it will be useful,
     10     but WITHOUT ANY WARRANTY; without even the implied warranty of
     11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12     GNU General Public License for more details.
     13 
     14     You should have received a copy of the GNU General Public License
     15     along with this program.  If not, see <http://www.gnu.org/licenses/>.
     16 *)
     17 
     18 
     19 (* Convert backslashes in a string to forward slashes.  Useful in Windows.   *)
     20 let backslashes2forwardslashes s0 =
     21   try
     22     ignore(String.index s0 '\\'); (* avoid alloc if possible *)
     23     let n = String.length s0 in
     24     let s = Bytes.create n in
     25     for i = 0 to n-1 do
     26       let c = String.get s0 i in
     27       if c = '\\'
     28       then Bytes.set s i '/'
     29       else Bytes.set s i c
     30     done;
     31     Bytes.to_string s
     32   with Not_found -> s0
     33 
     34 let rec removeTrailingSlashes s =
     35   let len = String.length s in
     36   if len>0 && String.get s (len-1) = '/'
     37   then removeTrailingSlashes (String.sub s 0 (len-1))
     38   else s