2006-10-19 21:50:23 +10:00
/** \file path.h
2012-11-18 11:23:22 +01:00
Directory utilities . This library contains functions for locating
configuration directories , for testing if a command with a given
name can be found in the PATH , and various other path - related
issues .
2006-10-19 21:50:23 +10:00
*/
# ifndef FISH_PATH_H
# define FISH_PATH_H
2012-07-20 22:11:05 -07:00
# include "env.h"
2008-01-14 02:47:47 +10:00
/**
Return value for path_cdpath_get when locatied a rotten symlink
*/
2007-09-21 03:52:43 +10:00
# define EROTTEN 1
2006-10-19 21:50:23 +10:00
/**
Returns the user configuration directory for fish . If the directory
or one of it ' s parents doesn ' t exist , they are first created .
2012-02-09 18:43:36 -08:00
\ param path The directory as an out param
\ return whether the directory was returned successfully
2006-10-19 21:50:23 +10:00
*/
2012-02-05 16:42:24 -08:00
bool path_get_config ( wcstring & path ) ;
2006-10-19 21:50:23 +10:00
/**
2012-07-20 22:11:05 -07:00
Finds the full path of an executable . Returns YES if successful .
2012-11-18 11:23:22 +01:00
2006-10-19 21:50:23 +10:00
\ param cmd The name of the executable .
2012-07-20 22:11:05 -07:00
\ param output_or_NULL If non - NULL , store the full path .
\ param vars The environment variables snapshot to use
2012-01-29 23:22:42 -08:00
\ return 0 if the command can not be found , the path of the command otherwise . The result should be freed with free ( ) .
2006-10-19 21:50:23 +10:00
*/
2012-07-20 22:11:05 -07:00
bool path_get_path ( const wcstring & cmd ,
wcstring * output_or_NULL ,
const env_vars_snapshot_t & vars = env_vars_snapshot_t : : current ( ) ) ;
2012-06-02 14:04:25 -07:00
2006-10-19 21:50:23 +10:00
/**
2007-09-21 03:52:43 +10:00
Returns the full path of the specified directory , using the CDPATH
variable as a list of base directories for relative paths . The
returned string is allocated using halloc and the specified
context .
2012-11-18 11:23:22 +01:00
2007-09-21 03:52:43 +10:00
If no valid path is found , null is returned and errno is set to
ENOTDIR if at least one such path was found , but it did not point
to a directory , EROTTEN if a arotten symbolic link was found , or
ENOENT if no file of the specified name was found . If both a rotten
symlink and a file are found , it is undefined which error status
will be returned .
2012-11-18 11:23:22 +01:00
2012-07-20 22:11:05 -07:00
\ param dir The name of the directory .
\ param out_or_NULL If non - NULL , return the path to the resolved directory
2012-02-18 18:54:36 -08:00
\ param wd The working directory , or NULL to use the default . The working directory should have a slash appended at the end .
2012-07-20 22:11:05 -07:00
\ param vars The environment variable snapshot to use ( for the CDPATH variable )
2012-01-31 16:50:03 -08:00
\ return 0 if the command can not be found , the path of the command otherwise . The path should be free ' d with free ( ) .
2006-10-19 21:50:23 +10:00
*/
2012-07-20 22:11:05 -07:00
bool path_get_cdpath ( const wcstring & dir ,
wcstring * out_or_NULL ,
const wchar_t * wd = NULL ,
const env_vars_snapshot_t & vars = env_vars_snapshot_t : : current ( ) ) ;
2012-02-09 01:18:51 +05:30
2012-07-20 22:11:05 -07:00
/** Returns whether the path can be used for an implicit cd command; if so, also returns the path by reference (if desired). This requires it to start with one of the allowed prefixes (., .., ~) and resolve to a directory. */
bool path_can_be_implicit_cd ( const wcstring & path ,
wcstring * out_path = NULL ,
const wchar_t * wd = NULL ,
const env_vars_snapshot_t & vars = env_vars_snapshot_t : : current ( ) ) ;
2006-10-19 21:50:23 +10:00
2008-01-14 02:47:47 +10:00
/**
2012-02-07 21:23:12 -08:00
Remove double slashes and trailing slashes from a path ,
e . g . transform foo //bar/ into foo/bar. The string is modified in-place.
2008-01-14 02:47:47 +10:00
*/
2012-11-18 16:30:30 -08:00
void path_make_canonical ( wcstring & path ) ;
2007-05-11 05:11:28 +10:00
2012-02-18 18:54:36 -08:00
bool path_is_valid ( const wcstring & path , const wcstring & working_directory ) ;
2012-02-18 21:56:30 -08:00
/** Returns whether the two paths refer to the same file */
bool paths_are_same_file ( const wcstring & path1 , const wcstring & path2 ) ;
2012-05-07 17:31:24 -07:00
/* Returns the current working directory as returned by wgetcwd */
2012-02-18 18:54:36 -08:00
wcstring get_working_directory ( void ) ;
2007-05-11 05:11:28 +10:00
2006-10-19 21:50:23 +10:00
# endif