This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
94
unikernel/duniverse/dune_/otherlibs/xdg/xdg.ml
Normal file
94
unikernel/duniverse/dune_/otherlibs/xdg/xdg.ml
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
type t =
|
||||
{ env : string -> string option
|
||||
; win32 : bool
|
||||
; home_dir : string
|
||||
; mutable cache_dir : string
|
||||
; mutable config_dir : string
|
||||
; mutable data_dir : string
|
||||
; mutable state_dir : string
|
||||
; mutable runtime_dir : string option
|
||||
}
|
||||
|
||||
let ( / ) = Filename.concat
|
||||
|
||||
type known_folder =
|
||||
| InternetCache
|
||||
| LocalAppData
|
||||
|
||||
external get_known_folder_path
|
||||
: known_folder
|
||||
-> string option
|
||||
= "dune_xdg__get_known_folder_path"
|
||||
|
||||
let make t env_var unix_default win32_folder =
|
||||
let default =
|
||||
if t.win32
|
||||
then (
|
||||
match get_known_folder_path win32_folder with
|
||||
| None -> ""
|
||||
| Some s -> s)
|
||||
else unix_default
|
||||
in
|
||||
match t.env env_var with
|
||||
| None -> default
|
||||
| Some s when Filename.is_relative s -> default
|
||||
| Some s -> s
|
||||
;;
|
||||
|
||||
let cache_dir t =
|
||||
let home = t.home_dir in
|
||||
make t "XDG_CACHE_HOME" (home / ".cache") InternetCache
|
||||
;;
|
||||
|
||||
let config_dir t =
|
||||
let home = t.home_dir in
|
||||
make t "XDG_CONFIG_HOME" (home / ".config") LocalAppData
|
||||
;;
|
||||
|
||||
let data_dir t =
|
||||
let home = t.home_dir in
|
||||
make t "XDG_DATA_HOME" (home / ".local" / "share") LocalAppData
|
||||
;;
|
||||
|
||||
let state_dir t =
|
||||
let home = t.home_dir in
|
||||
make t "XDG_STATE_HOME" (home / ".local" / "state") LocalAppData
|
||||
;;
|
||||
|
||||
let create ?win32 ~env () =
|
||||
let win32 =
|
||||
match win32 with
|
||||
| None -> Sys.win32
|
||||
| Some s -> s
|
||||
in
|
||||
let home_dir =
|
||||
let var = if win32 then "USERPROFILE" else "HOME" in
|
||||
match env var with
|
||||
| None -> ""
|
||||
| Some s -> s
|
||||
in
|
||||
let t =
|
||||
{ env
|
||||
; win32
|
||||
; home_dir
|
||||
; cache_dir = ""
|
||||
; config_dir = ""
|
||||
; data_dir = ""
|
||||
; state_dir = ""
|
||||
; runtime_dir = None
|
||||
}
|
||||
in
|
||||
t.cache_dir <- cache_dir t;
|
||||
t.config_dir <- config_dir t;
|
||||
t.data_dir <- data_dir t;
|
||||
t.state_dir <- state_dir t;
|
||||
t.runtime_dir <- env "XDG_RUNTIME_DIR";
|
||||
t
|
||||
;;
|
||||
|
||||
let home_dir t = t.home_dir
|
||||
let config_dir t = t.config_dir
|
||||
let data_dir t = t.data_dir
|
||||
let cache_dir t = t.cache_dir
|
||||
let state_dir t = t.state_dir
|
||||
let runtime_dir t = t.runtime_dir
|
||||
Loading…
Add table
Add a link
Reference in a new issue