aboutsummaryrefslogtreecommitdiff
path: root/lib/system.ml
diff options
context:
space:
mode:
authorfilliatr1999-12-01 17:34:36 +0000
committerfilliatr1999-12-01 17:34:36 +0000
commit74f6dceaab0146085e8ac48f9976665026099555 (patch)
tree17aa9e493ac73397fd214b13e46e7f7204f814e1 /lib/system.ml
parent11b3d7716aa730a6b299e813ef6a711c82dadb5a (diff)
poursuite de Vernacentries
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@178 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'lib/system.ml')
-rw-r--r--lib/system.ml52
1 files changed, 32 insertions, 20 deletions
diff --git a/lib/system.ml b/lib/system.ml
index 0f005bd47f..9da302d302 100644
--- a/lib/system.ml
+++ b/lib/system.ml
@@ -3,6 +3,7 @@
open Pp
open Util
+open Unix
(* Files and load path. *)
@@ -14,6 +15,37 @@ let del_path dir =
if List.mem dir !load_path then
load_path := List.filter (fun s -> s <> dir) !load_path
+let search_paths () = !load_path
+
+(* All subdirectories, recursively *)
+
+let all_subdirs dir =
+ let l = ref [] in
+ let add f = l := f :: !l in
+ let rec traverse dir =
+ Printf.printf "%s\n" dir;
+ let dirh =
+ try opendir dir with Unix_error _ -> invalid_arg "all_subdirs"
+ in
+ try
+ while true do
+ let f = readdir dirh in
+ if f <> "." && f <> ".." then
+ let file = Filename.concat dir f in
+ if (stat file).st_kind = S_DIR then begin
+ add file;
+ traverse file
+ end
+ done
+ with End_of_file ->
+ closedir dirh
+ in
+ traverse dir; List.rev !l
+
+let radd_path dir = List.iter add_path (all_subdirs dir)
+
+
+
(* TODO: rétablir glob (expansion ~user et $VAR) si on le juge nécessaire *)
let glob s = s
@@ -50,26 +82,6 @@ let is_in_path lpath filename =
let make_suffix name suffix =
if Filename.check_suffix name suffix then name else (name ^ suffix)
-(*Gives the list of all the directories under dir*)
-let alldir dir =
- let ini = Unix.getcwd()
- and tmp = Filename.temp_file "coq" "rec"
- and lst = ref [] in
- Unix.chdir dir;
- let bse = Unix.getcwd() in
- let _ = Sys.command ("find "^bse^" -type d >> "^tmp) in
- let inf = open_in tmp in
- try
- while true do
- lst := !lst @ [input_line inf]
- done;
- []
- with End_of_file ->
- close_in inf;
- Sys.remove tmp;
- Unix.chdir ini;
- !lst
-
let open_trapping_failure open_fun name suffix =
let rname = make_suffix name suffix in
try open_fun rname with _ -> error ("Can't open " ^ rname)