69 lines
2.0 KiB
OCaml
69 lines
2.0 KiB
OCaml
(***********************************************************************)
|
|
(* *)
|
|
(* Caml Special Light *)
|
|
(* *)
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 1995 Institut National de Recherche en Informatique et *)
|
|
(* Automatique. Distributed only by permission. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
|
|
(* $Id$ *)
|
|
|
|
let current_dir_name = "."
|
|
|
|
let concat dirname filename =
|
|
let l = String.length dirname - 1 in
|
|
if l < 0 or String.get dirname l = '/'
|
|
then dirname ^ filename
|
|
else dirname ^ "/" ^ filename
|
|
|
|
let is_absolute n =
|
|
(String.length n >= 1 & String.sub n 0 1 = "/")
|
|
or (String.length n >= 2 & String.sub n 0 2 = "./")
|
|
or (String.length n >= 3 & String.sub n 0 3 = "../")
|
|
|
|
let rindex s c =
|
|
let rec pos i =
|
|
if i < 0 then raise Not_found
|
|
else if String.get s i = c then i
|
|
else pos (i - 1)
|
|
in pos (String.length s - 1)
|
|
|
|
let check_suffix name suff =
|
|
String.length name >= String.length suff &
|
|
String.sub name (String.length name - String.length suff) (String.length suff)
|
|
= suff
|
|
|
|
let chop_suffix name suff =
|
|
let n = String.length name - String.length suff in
|
|
if n < 0 then invalid_arg "chop_suffix" else String.sub name 0 n
|
|
|
|
let chop_extension name =
|
|
try
|
|
String.sub name 0 (rindex name '.')
|
|
with Not_found ->
|
|
invalid_arg "Filename.chop_extension"
|
|
|
|
let basename name =
|
|
try
|
|
let p = rindex name '/' + 1 in
|
|
String.sub name p (String.length name - p)
|
|
with Not_found ->
|
|
name
|
|
|
|
let dirname name =
|
|
try
|
|
match rindex name '/' with
|
|
0 -> "/"
|
|
| n -> String.sub name 0 n
|
|
with Not_found ->
|
|
"."
|
|
|
|
|
|
|
|
|
|
|
|
|