annotate common/path.h @ 2:3fe22529f66c

Irccdctl: invalid alias arguments destructuration
author David Demelier <markand@malikania.fr>
date Tue, 09 Feb 2016 12:49:27 +0100
parents 1158cffe5a5e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * path.h -- special paths inside irccd
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _IRCCD_PATH_H_
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _IRCCD_PATH_H_
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <string>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <vector>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 namespace irccd {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 namespace path {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * PATH separator, either : or ;.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 extern const char Separator;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 * @enum Path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * @brief Which special path to get
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 enum Path {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 PathConfig, //!< Configuration files
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 PathData, //!< Data directory
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 PathCache, //!< Cache files
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 PathPlugins //!< Path to the plugins
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 };
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 * @enum Owner
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 * @brief For paths, get the installation path or the user ones
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 enum Owner {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 OwnerSystem, //!< System wide
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 OwnerUser //!< User
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 };
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * This function must be called before at the beginning of the main.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * It use system dependant program path lookup if available and fallbacks to the path given as argument if any failure
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * was encoutered.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 * @param argv0 the path to the executable (argv[0])
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 void setApplicationPath(const std::string &argv0);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * Clean a path by removing any extra / or \ and add a trailing one.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 * @param path the path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 * @return the updated path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 std::string clean(std::string path);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * Generic function for path retrievement.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 * The path is always terminated by a trailing / or \\.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * @pre setApplicationPath must have been called
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 * @param path the type of path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * @param owner system or user wide
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 * @return the path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 std::string get(Path path, Owner owner);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 * Generic function for multiple paths.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 * This function will add more directories than pathSystem*() and pathUser*() functions, for example
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * it will add some path if irccd is relocatable.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * @pre setApplicationPath must have been called
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 * @param path the type of path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * @return the list of preferred directories in order
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 std::vector<std::string> list(Path path);
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 } // !path
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 } // !irccd
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 #endif // !_IRCCD_PATH_H_