summaryrefslogtreecommitdiffstats
path: root/stdlib/filename.ml
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/filename.ml')
-rw-r--r--stdlib/filename.ml49
1 files changed, 49 insertions, 0 deletions
diff --git a/stdlib/filename.ml b/stdlib/filename.ml
new file mode 100644
index 000000000..af63af08f
--- /dev/null
+++ b/stdlib/filename.ml
@@ -0,0 +1,49 @@
+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 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 slash_pos s =
+ let rec pos i =
+ if i < 0 then raise Not_found
+ else if String.get s i = '/' then i
+ else pos (i - 1)
+ in pos (String.length s - 1)
+
+let basename name =
+ try
+ let p = slash_pos name + 1 in
+ String.sub name p (String.length name - p)
+ with Not_found ->
+ name
+
+let dirname name =
+ try
+ match slash_pos name with
+ 0 -> "/"
+ | n -> String.sub name 0 (slash_pos name)
+ with Not_found ->
+ "."
+
+
+
+
+
+