Frama-C API - Filepath
Functions manipulating normalized filepaths. In these functions, references to the current working directory refer to the result given by function Sys.getcwd.
Basic datatype functions
Filepath.t is a Frama-C datatype, and comes with usual compare, equal, hash and pretty functions.
Pretty-print is done according to these rules:
- relative filenames are kept, except for leading './', which is stripped;
- absolute filenames are relativized if their prefix is included in the current working directory; also, symbolic names are resolved, i.e. the result may be prefixed by known aliases (e.g. FRAMAC_SHARE). See
add_symbolic_dirfor more details. Therefore, the result of this function may not designate a valid name in the filesystem and must ONLY be used to pretty-print information; it must NEVER be converted back to a filepath later on.
include Datatype.S_with_collections with type t := t
include Datatype.S with type t := t
include Datatype.S_no_copy with type t := t
include Datatype.Ty with type t := t
val packed_descr : Structural_descr.packPacked version of the descriptor.
val reprs : t listList of representants of the descriptor.
val hash : t -> intHash function: same spec than Hashtbl.hash.
val pretty : Stdlib.Format.formatter -> t -> unitPretty print each value in an user-friendly way.
val mem_project : (Project_skeleton.t -> bool) -> t -> boolmem_project f x must return true iff there is a value p of type Project.t in x such that f p returns true.
module Set : Datatype.Set with type elt = tmodule Map : Datatype.Map with type key = tmodule Hashtbl : Datatype.Hashtbl with type key = tCompares prettified (i.e. relative) paths, with or without case sensitivity (by default, case_sensitive = false).
val pretty_abs : Stdlib.Format.formatter -> t -> unitPretty-prints as absolute path, without symbolic names.
val pretty_rel : Stdlib.Format.formatter -> t -> unitPretty-prints as relative path relative to current working directory, without symbolic names.
val dummy : tDummy filepath.
Constant paths
val empty : tEmpty filepath.
val is_empty : t -> boolval is_special_stdout : t -> boolis_special_stdout f returns true iff f is '-' (a single dash), which is a special notation for 'stdout'.
Path manipulation
Returns an absolute path leading to the given file. The result is similar to realpath --no-symlinks. Some special behaviors include:
normalize ""(empty string) returns "" (realpath returns an error);normalizepreserves multiple sequential '/' characters, unlikerealpath;- non-existing directories in
realpathmay lead to ENOTDIR errors, butnormalizemay accept them.
val to_string : t -> stringto_string p returns p prettified, that is, a relative path-like string. The resulting string may contain symbolic dirs, thus it is not a path.
to_string_rel ?quoted ?base p returns p relativized, if relative to base, or its absolute path otherwise. The resulting string has no symbolic names, thus it can be converted back to Filepath.t.
val to_string_abs : ?quoted:bool -> t -> stringto_string_abs p returns p absolutized. The resulting string has no symbolic names, thus it can be converted back to Filepath.t.
val to_string_list : t list -> string listto_string_list l returns l as a list of strings containing the absolute paths to the elements of l.
val to_base_uri : t -> Hpath.base * stringto_base_uri path returns a pair base, rest, according to the prettified value of path:
- if it starts with symbolic path SYMB, prefix is Hpath.Name "SYMB";
- if it is a relative path, prefix is Hpath.Cwd;
- else (an absolute path), prefix is Hpath.Absolute.
restcontains everything after the '/' following the prefix. E.g. for the path "FRAMAC_SHARE/libc/string.h", returns (Name "FRAMAC_SHARE", "libc/string.h").
val basename : t -> stringEquivalent to Filename.basename.
val extension : t -> stringEquivalent to Filename.extension.
extend ~existence file ext returns the normalized path to the file file ^ ext. Note that it does not introduce a dot. The resulting path must respect existence.
concat ~existence dir file returns the normalized path resulting from the concatenation of dir ^ "/" ^ file. The resulting path must respect existence.
Operator version of Filepath.concat. Filepath.(dir / file) is equivalent to Filepath.concat dir file.
concats ~existence dir paths concatenates a list of paths, as per the concat function.
val has_suffix : t -> string -> boolSame as Filename.check_suffix.
sanitize_filename name returns the given filename with every character not allowed as filename replaced with _. Note that this function takes a file name so path separators like / and \ are replaced.
Current working directory
val pwd : unit -> tSymboling Names
val add_symbolic_dir : string -> t -> unitadd_symbolic_dir name dir indicates that the (absolute) path dir must be replaced by name when pretty-printing paths. This alias ensures that system-dependent paths such as FRAMAC_SHARE are printed identically in different machines.
val add_symbolic_dir_list : string -> t list -> unitval remove_symbolic_dir : t -> unitRemove all symbolic dirs that have been added earlier.
val all_symbolic_dirs : unit -> (string * t) listReturns the list of symbolic dirs added via add_symbolic_dir, plus preexisting ones (e.g. FRAMAC_SHARE), as pairs (name, dir).
Position in source file
Describes a position in a source file.
val empty_pos : positionEmpty position, used as 'dummy' for Cil_datatype.Position.
val pp_pos : Stdlib.Format.formatter -> position -> unitPretty-prints a position, in the format file:line.
val is_empty_pos : position -> boolReturn true if the given position is the empty position.
