2006-10-19 19:50:23 +08:00
/** \file path.h
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 .
*/
# ifndef FISH_PATH_H
# define FISH_PATH_H
2008-01-14 00:47:47 +08:00
/**
Return value for path_cdpath_get when locatied a rotten symlink
*/
2007-09-21 01:52:43 +08:00
# define EROTTEN 1
2006-10-19 19:50:23 +08: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-10 10:43:36 +08:00
\ param path The directory as an out param
\ return whether the directory was returned successfully
2006-10-19 19:50:23 +08:00
*/
2012-02-06 08:42:24 +08:00
bool path_get_config ( wcstring & path ) ;
2006-10-19 19:50:23 +08:00
/**
Finds the full path of an executable in a newly allocated string .
2011-12-27 11:18:46 +08:00
2006-10-19 19:50:23 +08:00
\ param cmd The name of the executable .
2012-01-30 15: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 19:50:23 +08:00
*/
2012-01-30 15:22:42 +08:00
wchar_t * path_get_path ( const wchar_t * cmd ) ;
2006-10-19 19:50:23 +08:00
2012-06-03 05:04:25 +08: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 ) ;
2011-12-27 11:18:46 +08:00
class env_vars ;
2012-02-08 14:44:10 +08:00
bool path_get_path_string ( const wcstring & cmd , wcstring & output ) ;
2011-12-27 11:18:46 +08:00
bool path_get_path_string ( const wcstring & cmd , wcstring & output , const env_vars & vars ) ;
2006-10-19 19:50:23 +08:00
/**
2007-09-21 01:52:43 +08: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 .
2011-12-27 11:18:46 +08:00
2007-09-21 01:52:43 +08: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 .
2011-12-27 11:18:46 +08:00
2006-10-19 19:50:23 +08:00
\ param in The name of the directory .
2012-02-19 10: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-02-01 08: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 19:50:23 +08:00
*/
2012-02-09 03:48:51 +08:00
2012-05-09 17:33:42 +08:00
wchar_t * path_allocate_cdpath ( const wcstring & in , const wchar_t * wd = NULL ) ;
2012-02-19 10:54:36 +08:00
bool path_can_get_cdpath ( const wcstring & in , const wchar_t * wd = NULL ) ;
2011-12-27 11:18:46 +08:00
bool path_get_cdpath_string ( const wcstring & in , wcstring & out , const env_vars & vars ) ;
2006-10-19 19:50:23 +08:00
2008-01-14 00:47:47 +08:00
/**
2012-02-08 13: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 00:47:47 +08:00
*/
2012-02-08 13:23:12 +08:00
void path_make_canonical ( wcstring & path ) ;
2007-05-11 03:11:28 +08:00
2012-02-19 10:54:36 +08:00
bool path_is_valid ( const wcstring & path , const wcstring & working_directory ) ;
2012-02-19 13: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-08 08:31:24 +08:00
/* Returns the current working directory as returned by wgetcwd */
2012-02-19 10:54:36 +08:00
wcstring get_working_directory ( void ) ;
2007-05-11 03:11:28 +08:00
2006-10-19 19:50:23 +08:00
# endif