119 lines
3.7 KiB
C
119 lines
3.7 KiB
C
#ifndef EINA_VPATH_H
|
|
#define EINA_VPATH_H
|
|
|
|
#include "eina_prefix.h"
|
|
|
|
#ifdef EFL_BETA_API_SUPPORT
|
|
|
|
/**
|
|
* Eina vpath is a path that can be prefixed with a virtual path.
|
|
*
|
|
* A virtual path can either start with (:XXXXXXXX:) that indicates a virtual
|
|
* path with XXXXXXXX as the location, OR a normal path with / or a relative
|
|
* path like ./ or ../ or even shell common locators like ~/ or ~username/
|
|
*
|
|
* The string between (: and :) is used as key to lookup the real value.
|
|
* The key has to be set by an interface before, otherwise you will get an
|
|
* error.
|
|
*
|
|
* Sample paths:
|
|
*
|
|
* ~/myfiles/file.png
|
|
* ~bob/dir/file.txt
|
|
* /path/to/file.cfg
|
|
* ./file/relative/path.txt
|
|
* file/relative/path.txt
|
|
* (:tmp:)/some-temp-file/file.txt
|
|
* (:home:)/myfiles/file.png
|
|
*
|
|
* (:app.dir:)/bin/app-executable
|
|
* (:app.bin:)/app-executable-file
|
|
* (:app.lib:)/app-library.so
|
|
* (:app.data:)/application/datafile.png
|
|
* (:app.locale:)/en_US/LC_MESSAGES/app.mo
|
|
* (:app.config:)/application-config.xml
|
|
* (:app.local:)/application-data-file.jpg
|
|
* (:app.tmp:)/some-temp-file/path/file.txt
|
|
*
|
|
* (:usr.desktop:)/file-in-users-desktop-directory.txt
|
|
* (:usr.documents:)/letter-to-grandma.doc
|
|
* (:usr.downloads:)/file-downloaded-here.zip
|
|
* (:usr.music:)/fave-song.mp3
|
|
* (:usr.pictures:)/a-photo.,jpg
|
|
* (:usr.public:)/some-publicly-shared-file
|
|
* (:usr.templates:)/some-template-document.txt
|
|
* (:usr.videos:)/some-video-file.mp4
|
|
* (:usr.data:)/file-in-user-data-dir
|
|
* (:usr.config:)/file-in-user-config-dir
|
|
* (:usr.cache:)/file-in-user-cache-dir
|
|
* (:usr.run:)/file-in-xdg-runtime-dir
|
|
* (:usr.tmp:)/some-temp-file/path/file.txt
|
|
*
|
|
* Commonly mapped to real path (but may vary):
|
|
*
|
|
* (:tmp:) - /tmp
|
|
* (:home:) - ~/
|
|
*
|
|
* (:app.dir:) - /usr - (assuming app install PREFIX of /usr. may be /usr/local or others too)
|
|
* (:app.bin:) - /usr/bin - (almost always PREFIX/bin)
|
|
* (:app.lib:) - /usr/lib - (almost always PREFIX/lib)
|
|
* (:app.data:) - /usr/share/appname - (almost always PREFIX/share/appname)
|
|
* (:app.locale:) - /usr/share/locale - (almost always PREFIX/locale)
|
|
* (:app.config:) - ~/.config/appname
|
|
* (:app.local:) - ~/.local/share/appname
|
|
* (:app.tmp:) - ~/.local/tmp/appname
|
|
*
|
|
* (:usr.desktop:) - ~/Desktop
|
|
* (:usr.documents:) - ~/Documents
|
|
* (:usr.downloads:) - ~/Downloads
|
|
* (:usr.music:) - ~/Music
|
|
* (:usr.pictures:) - ~/Pictures
|
|
* (:usr.public:) - ~/Public
|
|
* (:usr.templates:) - ~/Templates
|
|
* (:usr.videos:) - ~/Videos
|
|
* (:usr.data:) - ~/.local/share
|
|
* (:usr.config:) - ~/.config
|
|
* (:usr.cache:) - ~/.cache
|
|
* (:usr.run:) - /var/run/user/1000
|
|
* (:usr.tmp:) - ~/.local/tmp
|
|
*
|
|
* Additional info: https://phab.enlightenment.org/w/eina_vpath/
|
|
*
|
|
* @since 1.21
|
|
*
|
|
* @note on Windows, vpath like ~bob/foo is not supported.
|
|
*
|
|
*/
|
|
typedef const char * Eina_Vpath;
|
|
|
|
/**
|
|
* Translate a virtual path into a normal path.
|
|
*
|
|
* The return string is a string allocated by malloc and should be freed with
|
|
* free() when no longer needed.
|
|
*
|
|
* @param[in] path The path.
|
|
* @return NULL if failed, or a full normal string file path that is resolved
|
|
*
|
|
* @since 1.21
|
|
*
|
|
*/
|
|
EAPI char *eina_vpath_resolve(Eina_Vpath path);
|
|
|
|
/**
|
|
* Translate a virtual path into a normal path, and print it into str.
|
|
*
|
|
* @param[out] str the buffer to stuff the characters into
|
|
* @param[in] size the size of the buffer
|
|
* @param[in] format A snprintf style format string, which will get evaluated after the vpath strings are getting replaced
|
|
* @param[in] ... The arguments for the format string
|
|
*
|
|
* @return the number of characters that are written into str, on a error a value < 0 is returned.
|
|
*
|
|
* @since 1.21
|
|
*
|
|
*/
|
|
EAPI int eina_vpath_resolve_snprintf(char *str, size_t size, const char *format, ...);
|
|
#endif
|
|
#endif
|