diff options
author | Fabrice Le Fessant <Fabrice.Le_fessant@inria.fr> | 2012-11-27 19:33:38 +0000 |
---|---|---|
committer | Fabrice Le Fessant <Fabrice.Le_fessant@inria.fr> | 2012-11-27 19:33:38 +0000 |
commit | 26fb459100237f249fe094a5c6f0192054e977c9 (patch) | |
tree | 85b50375142fff22d2fc6a28af57502c090b9eed /vendors/labltk/browser/useunix.ml | |
parent | f80d01e968bf899aaa36882840eddc11ce428f94 (diff) | |
download | ocaml-stripped-ocaml.tar.gz |
stripped-ocaml: moved labltk, ocamlbuild, camlp4 to vendors/ subdirstripped-ocaml
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/stripped-ocaml@13105 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'vendors/labltk/browser/useunix.ml')
-rw-r--r-- | vendors/labltk/browser/useunix.ml | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/vendors/labltk/browser/useunix.ml b/vendors/labltk/browser/useunix.ml new file mode 100644 index 0000000000..86554d4884 --- /dev/null +++ b/vendors/labltk/browser/useunix.ml @@ -0,0 +1,69 @@ +(*************************************************************************) +(* *) +(* OCaml LablTk library *) +(* *) +(* Jacques Garrigue, Kyoto University RIMS *) +(* *) +(* Copyright 1999 Institut National de Recherche en Informatique et *) +(* en Automatique and Kyoto University. All rights reserved. *) +(* This file is distributed under the terms of the GNU Library *) +(* General Public License, with the special exception on linking *) +(* described in file ../../../LICENSE. *) +(* *) +(*************************************************************************) + +(* $Id$ *) + +open StdLabels +open UnixLabels + +let get_files_in_directory dir = + let len = String.length dir in + let dir = + if len > 0 && Sys.os_type = "Win32" && + (dir.[len-1] = '/' || dir.[len-1] = '\\') + then String.sub dir ~pos:0 ~len:(len-1) + else dir + in match + try Some(opendir dir) with Unix_error _ -> None + with + None -> [] + | Some dirh -> + let rec get_them l = + match + try Some(readdir dirh) with _ -> None + with + | Some x -> + get_them (x::l) + | None -> + closedir dirh; l + in + List.sort ~cmp:compare (get_them []) + +let is_directory name = + try + (stat name).st_kind = S_DIR + with _ -> false + +let concat dir name = + let len = String.length dir in + if len = 0 then name else + if dir.[len-1] = '/' then dir ^ name + else dir ^ "/" ^ name + +let get_directories_in_files ~path = + List.filter ~f:(fun x -> is_directory (concat path x)) + +(************************************************** Subshell call *) +let subshell ~cmd = + let rc = open_process_in cmd in + let rec it l = + match + try Some(input_line rc) with _ -> None + with + Some x -> it (x::l) + | None -> List.rev l + in + let answer = it [] in + ignore (close_process_in rc); + answer |