Implementation de Filename.quote pour Win32
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4515 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
f2bd146780
commit
4efb58b231
|
@ -13,6 +13,18 @@
|
||||||
|
|
||||||
(* $Id$ *)
|
(* $Id$ *)
|
||||||
|
|
||||||
|
let generic_quote quotequote s =
|
||||||
|
let l = String.length s in
|
||||||
|
let b = Buffer.create (l + 20) in
|
||||||
|
Buffer.add_char b '\'';
|
||||||
|
for i = 0 to l - 1 do
|
||||||
|
if s.[i] = '\''
|
||||||
|
then Buffer.add_string b quotequote
|
||||||
|
else Buffer.add_char b s.[i]
|
||||||
|
done;
|
||||||
|
Buffer.add_char b '\'';
|
||||||
|
Buffer.contents b
|
||||||
|
|
||||||
module Unix = struct
|
module Unix = struct
|
||||||
let current_dir_name = "."
|
let current_dir_name = "."
|
||||||
let parent_dir_name = ".."
|
let parent_dir_name = ".."
|
||||||
|
@ -45,6 +57,7 @@ module Unix = struct
|
||||||
"."
|
"."
|
||||||
let temporary_directory =
|
let temporary_directory =
|
||||||
try Sys.getenv "TMPDIR" with Not_found -> "/tmp"
|
try Sys.getenv "TMPDIR" with Not_found -> "/tmp"
|
||||||
|
let quote = generic_quote "'\\''"
|
||||||
end
|
end
|
||||||
|
|
||||||
module Win32 = struct
|
module Win32 = struct
|
||||||
|
@ -95,6 +108,20 @@ module Win32 = struct
|
||||||
"."
|
"."
|
||||||
let temporary_directory =
|
let temporary_directory =
|
||||||
try Sys.getenv "TEMP" with Not_found -> "C:\\temp"
|
try Sys.getenv "TEMP" with Not_found -> "C:\\temp"
|
||||||
|
let quote s =
|
||||||
|
let l = String.length s in
|
||||||
|
let b = Buffer.create (l + 20) in
|
||||||
|
Buffer.add_char b '\"';
|
||||||
|
for i = 0 to l - 1 do
|
||||||
|
match s.[i] with
|
||||||
|
'\"' -> Buffer.add_string b "\\\""
|
||||||
|
| '\\' -> if i + 1 = l then Buffer.add_string b "\\\\"
|
||||||
|
else if s.[i + 1] = '\"' then Buffer.add_string b "\\\\\\\""
|
||||||
|
else Buffer.add_char b '\\'
|
||||||
|
| c -> Buffer.add_char b c
|
||||||
|
done;
|
||||||
|
Buffer.add_char b '\"';
|
||||||
|
Buffer.contents b
|
||||||
end
|
end
|
||||||
|
|
||||||
module MacOS = struct
|
module MacOS = struct
|
||||||
|
@ -123,23 +150,24 @@ module MacOS = struct
|
||||||
with Not_found -> ":"
|
with Not_found -> ":"
|
||||||
let temporary_directory =
|
let temporary_directory =
|
||||||
try Sys.getenv "TempFolder" with Not_found -> ":"
|
try Sys.getenv "TempFolder" with Not_found -> ":"
|
||||||
|
let quote = generic_quote "'\182''"
|
||||||
end
|
end
|
||||||
|
|
||||||
let (current_dir_name, parent_dir_name, concat, is_relative, is_implicit,
|
let (current_dir_name, parent_dir_name, concat, is_relative, is_implicit,
|
||||||
check_suffix, basename, dirname, temporary_directory) =
|
check_suffix, basename, dirname, temporary_directory, quote) =
|
||||||
match Sys.os_type with
|
match Sys.os_type with
|
||||||
"Unix" | "Cygwin" ->
|
"Unix" | "Cygwin" ->
|
||||||
(Unix.current_dir_name, Unix.parent_dir_name, Unix.concat,
|
(Unix.current_dir_name, Unix.parent_dir_name, Unix.concat,
|
||||||
Unix.is_relative, Unix.is_implicit, Unix.check_suffix,
|
Unix.is_relative, Unix.is_implicit, Unix.check_suffix,
|
||||||
Unix.basename, Unix.dirname, Unix.temporary_directory)
|
Unix.basename, Unix.dirname, Unix.temporary_directory, Unix.quote)
|
||||||
| "Win32" ->
|
| "Win32" ->
|
||||||
(Win32.current_dir_name, Win32.parent_dir_name, Win32.concat,
|
(Win32.current_dir_name, Win32.parent_dir_name, Win32.concat,
|
||||||
Win32.is_relative, Win32.is_implicit, Win32.check_suffix,
|
Win32.is_relative, Win32.is_implicit, Win32.check_suffix,
|
||||||
Win32.basename, Win32.dirname, Win32.temporary_directory)
|
Win32.basename, Win32.dirname, Win32.temporary_directory, Win32.quote)
|
||||||
| "MacOS" ->
|
| "MacOS" ->
|
||||||
(MacOS.current_dir_name, MacOS.parent_dir_name, MacOS.concat,
|
(MacOS.current_dir_name, MacOS.parent_dir_name, MacOS.concat,
|
||||||
MacOS.is_relative, MacOS.is_implicit, MacOS.check_suffix,
|
MacOS.is_relative, MacOS.is_implicit, MacOS.check_suffix,
|
||||||
MacOS.basename, MacOS.dirname, MacOS.temporary_directory)
|
MacOS.basename, MacOS.dirname, MacOS.temporary_directory, MacOS.quote)
|
||||||
| _ -> assert false
|
| _ -> assert false
|
||||||
|
|
||||||
let chop_suffix name suff =
|
let chop_suffix name suff =
|
||||||
|
@ -170,16 +198,3 @@ let temp_file prefix suffix =
|
||||||
end
|
end
|
||||||
in try_name 0
|
in try_name 0
|
||||||
|
|
||||||
let quote s =
|
|
||||||
let quotequote =
|
|
||||||
match Sys.os_type with "MacOS" -> "'\182''" | _ -> "'\\''" in
|
|
||||||
let l = String.length s in
|
|
||||||
let b = Buffer.create (l + 20) in
|
|
||||||
Buffer.add_char b '\'';
|
|
||||||
for i = 0 to l - 1 do
|
|
||||||
if s.[i] = '\''
|
|
||||||
then Buffer.add_string b quotequote
|
|
||||||
else Buffer.add_char b s.[i]
|
|
||||||
done;
|
|
||||||
Buffer.add_char b '\'';
|
|
||||||
Buffer.contents b
|
|
||||||
|
|
Loading…
Reference in New Issue