annotate C++/Xdg.h @ 296:5806c767aec7

Zip: fix resize if read less than requested Task: #312
author David Demelier <markand@malikania.fr>
date Thu, 13 Nov 2014 21:10:13 +0100
parents f6d9fdb5eeeb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
239
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * Xdg.h -- XDG directory specifications
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr>
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _XDG_H_
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _XDG_H_
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <vector>
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <string>
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #if defined(_WIN32)
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 # if defined(BUILDING_DLL)
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 # define EXPORT __declspec(dllexport)
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # else
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # define EXPORT __declspec(dllimport)
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 # endif
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #else
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 # define EXPORT
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #endif
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * @class Xdg
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 * @brief XDG specifications
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 *
240
f6d9fdb5eeeb Xdg: don't use bad directories, add tests
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
39 * Read and get XDG directories. This file contains exports thingies so it can
f6d9fdb5eeeb Xdg: don't use bad directories, add tests
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
40 * compiles successfully on Windows but its usage is discouraged.
239
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 class EXPORT Xdg {
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 public:
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 using List = std::vector<std::string>;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 private:
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 std::string m_configHome;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 std::string m_dataHome;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 std::string m_cacheHome;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 std::string m_runtimeDir;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 List m_configDirs;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 List m_dataDirs;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 public:
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 * Open an xdg instance and load directories.
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * @throw std::runtime_error on failures
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 Xdg();
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 * Get the config directory. ${XDG_CONFIG_HOME} or ${HOME}/.config
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * @return the config directory
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 const std::string &configHome() const noexcept;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * Get the data directory. ${XDG_DATA_HOME} or ${HOME}/.local/share
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * @return the data directory
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 const std::string &dataHome() const noexcept;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * Get the cache directory. ${XDG_CACHE_HOME} or ${HOME}/.cache
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * @return the cache directory
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 const std::string &cacheHome() const noexcept;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * Get the runtime directory. ${XDG_RUNTIME_DIR} must be set,
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 * if not, it throws an exception.
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 * The XDG standard says that application should handle XDG_RUNTIME_DIR by
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * themselves.
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * @return the runtime directory
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 * @throw std::runtime_error on error
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 const std::string &runtimeDir() const;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 * Get the standard config directories. ${XDG_CONFIG_DIRS} or { "/etc/xdg" }
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * @return the list of config directories
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 const List &configDirs() const noexcept;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 /**
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 * Get the data directories. ${XDG_DATA_DIRS} or { "/usr/local/share", "/usr/share" }
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 *
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 * @return the list of data directories
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 */
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 const List &dataDirs() const noexcept;
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 };
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
109
9b69f810d3b9 Add Xdg, a replacement for XDG standard directories
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 #endif // !_XDG_H_