xref: /haiku/headers/os/storage/FindDirectory.h (revision c237c4ce593ee823d9867fd997e51e4c447f5623)
1 /*
2  * Copyright 2002-2015, Haiku Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _FIND_DIRECTORY_H
6 #define _FIND_DIRECTORY_H
7 
8 
9 #include <image.h>
10 
11 
12 typedef enum {
13 	/* Per volume directories */
14 	B_DESKTOP_DIRECTORY					= 0,
15 	B_TRASH_DIRECTORY,
16 
17 	/* System directories */
18 	B_SYSTEM_DIRECTORY					= 1000,
19 	B_SYSTEM_ADDONS_DIRECTORY			= 1002,
20 	B_SYSTEM_BOOT_DIRECTORY,
21 	B_SYSTEM_FONTS_DIRECTORY,
22 	B_SYSTEM_LIB_DIRECTORY,
23 	B_SYSTEM_SERVERS_DIRECTORY,
24 	B_SYSTEM_APPS_DIRECTORY,
25 	B_SYSTEM_BIN_DIRECTORY,
26 	B_SYSTEM_DOCUMENTATION_DIRECTORY	= 1010,
27 	B_SYSTEM_PREFERENCES_DIRECTORY,
28 	B_SYSTEM_TRANSLATORS_DIRECTORY,
29 	B_SYSTEM_MEDIA_NODES_DIRECTORY,
30 	B_SYSTEM_SOUNDS_DIRECTORY,
31 	B_SYSTEM_DATA_DIRECTORY,
32 	B_SYSTEM_DEVELOP_DIRECTORY,
33 	B_SYSTEM_PACKAGES_DIRECTORY,
34 	B_SYSTEM_HEADERS_DIRECTORY,
35 	B_SYSTEM_DESKBAR_DIRECTORY,
36 
37 	B_SYSTEM_ETC_DIRECTORY				= 2008,
38 	B_SYSTEM_SETTINGS_DIRECTORY			= 2010,
39 	B_SYSTEM_LOG_DIRECTORY				= 2012,
40 	B_SYSTEM_SPOOL_DIRECTORY,
41 	B_SYSTEM_TEMP_DIRECTORY,
42 	B_SYSTEM_VAR_DIRECTORY,
43 	B_SYSTEM_CACHE_DIRECTORY			= 2020,
44 
45 	B_SYSTEM_NONPACKAGED_DIRECTORY		= 2023,
46 	B_SYSTEM_NONPACKAGED_ADDONS_DIRECTORY,
47 	B_SYSTEM_NONPACKAGED_TRANSLATORS_DIRECTORY,
48 	B_SYSTEM_NONPACKAGED_MEDIA_NODES_DIRECTORY,
49 	B_SYSTEM_NONPACKAGED_BIN_DIRECTORY,
50 	B_SYSTEM_NONPACKAGED_DATA_DIRECTORY,
51 	B_SYSTEM_NONPACKAGED_FONTS_DIRECTORY,
52 	B_SYSTEM_NONPACKAGED_SOUNDS_DIRECTORY,
53 	B_SYSTEM_NONPACKAGED_DOCUMENTATION_DIRECTORY,
54 	B_SYSTEM_NONPACKAGED_LIB_DIRECTORY,
55 	B_SYSTEM_NONPACKAGED_HEADERS_DIRECTORY,
56 	B_SYSTEM_NONPACKAGED_DEVELOP_DIRECTORY,
57 
58 	/* User directories. These are interpreted in the context
59 	   of the user making the find_directory call. */
60 	B_USER_DIRECTORY					= 3000,
61 	B_USER_CONFIG_DIRECTORY,
62 	B_USER_ADDONS_DIRECTORY,
63 	B_USER_BOOT_DIRECTORY,
64 	B_USER_FONTS_DIRECTORY,
65 	B_USER_LIB_DIRECTORY,
66 	B_USER_SETTINGS_DIRECTORY,
67 	B_USER_DESKBAR_DIRECTORY,
68 	B_USER_PRINTERS_DIRECTORY,
69 	B_USER_TRANSLATORS_DIRECTORY,
70 	B_USER_MEDIA_NODES_DIRECTORY,
71 	B_USER_SOUNDS_DIRECTORY,
72 	B_USER_DATA_DIRECTORY,
73 	B_USER_CACHE_DIRECTORY,
74 	B_USER_PACKAGES_DIRECTORY,
75 	B_USER_HEADERS_DIRECTORY,
76 	B_USER_NONPACKAGED_DIRECTORY,
77 	B_USER_NONPACKAGED_ADDONS_DIRECTORY,
78 	B_USER_NONPACKAGED_TRANSLATORS_DIRECTORY,
79 	B_USER_NONPACKAGED_MEDIA_NODES_DIRECTORY,
80 	B_USER_NONPACKAGED_BIN_DIRECTORY,
81 	B_USER_NONPACKAGED_DATA_DIRECTORY,
82 	B_USER_NONPACKAGED_FONTS_DIRECTORY,
83 	B_USER_NONPACKAGED_SOUNDS_DIRECTORY,
84 	B_USER_NONPACKAGED_DOCUMENTATION_DIRECTORY,
85 	B_USER_NONPACKAGED_LIB_DIRECTORY,
86 	B_USER_NONPACKAGED_HEADERS_DIRECTORY,
87 	B_USER_NONPACKAGED_DEVELOP_DIRECTORY,
88 	B_USER_DEVELOP_DIRECTORY,
89 	B_USER_DOCUMENTATION_DIRECTORY,
90 	B_USER_SERVERS_DIRECTORY,
91 	B_USER_APPS_DIRECTORY,
92 	B_USER_BIN_DIRECTORY,
93 	B_USER_PREFERENCES_DIRECTORY,
94 	B_USER_ETC_DIRECTORY,
95 	B_USER_LOG_DIRECTORY,
96 	B_USER_SPOOL_DIRECTORY,
97 	B_USER_VAR_DIRECTORY,
98 
99 	/* Global directories. */
100 	B_APPS_DIRECTORY					= 4000,
101 	B_PREFERENCES_DIRECTORY,
102 	B_UTILITIES_DIRECTORY,
103 	B_PACKAGE_LINKS_DIRECTORY,
104 
105 	/* Obsolete: Legacy BeOS definition to be phased out */
106 	B_BEOS_DIRECTORY					= 1000,
107 	B_BEOS_SYSTEM_DIRECTORY,
108 	B_BEOS_ADDONS_DIRECTORY,
109 	B_BEOS_BOOT_DIRECTORY,
110 	B_BEOS_FONTS_DIRECTORY,
111 	B_BEOS_LIB_DIRECTORY,
112 	B_BEOS_SERVERS_DIRECTORY,
113 	B_BEOS_APPS_DIRECTORY,
114 	B_BEOS_BIN_DIRECTORY,
115 	B_BEOS_ETC_DIRECTORY,
116 	B_BEOS_DOCUMENTATION_DIRECTORY,
117 	B_BEOS_PREFERENCES_DIRECTORY,
118 	B_BEOS_TRANSLATORS_DIRECTORY,
119 	B_BEOS_MEDIA_NODES_DIRECTORY,
120 	B_BEOS_SOUNDS_DIRECTORY,
121 } directory_which;
122 
123 
124 /* find_path[s]() flags */
125 enum {
126 	B_FIND_PATH_CREATE_DIRECTORY			= 0x0001,
127 	B_FIND_PATH_CREATE_PARENT_DIRECTORY		= 0x0002,
128 	B_FIND_PATH_EXISTING_ONLY				= 0x0004,
129 
130 	B_FIND_PATHS_SYSTEM_ONLY				= 0x0010,
131 	B_FIND_PATHS_USER_ONLY					= 0x0020,
132 };
133 
134 
135 typedef enum path_base_directory {
136 	B_FIND_PATH_INSTALLATION_LOCATION_DIRECTORY,
137 	B_FIND_PATH_ADD_ONS_DIRECTORY,
138 	B_FIND_PATH_APPS_DIRECTORY,
139 	B_FIND_PATH_BIN_DIRECTORY,
140 	B_FIND_PATH_BOOT_DIRECTORY,
141 	B_FIND_PATH_CACHE_DIRECTORY,
142 	B_FIND_PATH_DATA_DIRECTORY,
143 	B_FIND_PATH_DEVELOP_DIRECTORY,
144 	B_FIND_PATH_DEVELOP_LIB_DIRECTORY,
145 	B_FIND_PATH_DOCUMENTATION_DIRECTORY,
146 	B_FIND_PATH_ETC_DIRECTORY,
147 	B_FIND_PATH_FONTS_DIRECTORY,
148 	B_FIND_PATH_HEADERS_DIRECTORY,
149 	B_FIND_PATH_LIB_DIRECTORY,
150 	B_FIND_PATH_LOG_DIRECTORY,
151 	B_FIND_PATH_MEDIA_NODES_DIRECTORY,
152 	B_FIND_PATH_PACKAGES_DIRECTORY,
153 	B_FIND_PATH_PREFERENCES_DIRECTORY,
154 	B_FIND_PATH_SERVERS_DIRECTORY,
155 	B_FIND_PATH_SETTINGS_DIRECTORY,
156 	B_FIND_PATH_SOUNDS_DIRECTORY,
157 	B_FIND_PATH_SPOOL_DIRECTORY,
158 	B_FIND_PATH_TRANSLATORS_DIRECTORY,
159 	B_FIND_PATH_VAR_DIRECTORY,
160 
161 	/* find_path() only */
162 	B_FIND_PATH_IMAGE_PATH			= 1000,
163 	B_FIND_PATH_PACKAGE_PATH,
164 } path_base_directory;
165 
166 
167 #ifdef __cplusplus
168 extern "C" {
169 #endif
170 
171 /* C interface */
172 
173 status_t find_directory(directory_which which, dev_t volume, bool createIt,
174 	char* pathString, int32 length);
175 
176 status_t find_path(const void* codePointer, path_base_directory baseDirectory,
177 	const char* subPath, char* pathBuffer, size_t bufferSize);
178 
179 status_t find_path_etc(const void* codePointer, const char* dependency,
180 	const char* architecture, path_base_directory baseDirectory,
181 	const char* subPath, uint32 flags, char* pathBuffer, size_t bufferSize);
182 
183 status_t find_path_for_path(const char* path, path_base_directory baseDirectory,
184 	const char* subPath, char* pathBuffer, size_t bufferSize);
185 
186 status_t find_path_for_path_etc(const char* path, const char* dependency,
187 	const char* architecture, path_base_directory baseDirectory,
188 	const char* subPath, uint32 flags, char* pathBuffer, size_t bufferSize);
189 
190 status_t find_paths(path_base_directory baseDirectory, const char* subPath,
191 	char*** _paths, size_t* _pathCount);
192 
193 status_t find_paths_etc(const char* architecture,
194 	path_base_directory baseDirectory, const char* subPath, uint32 flags,
195 	char*** _paths, size_t* _pathCount);
196 
197 
198 #ifdef __cplusplus
199 }
200 
201 /* C++ interface */
202 
203 class BVolume;
204 class BPath;
205 
206 
207 status_t find_directory(directory_which which, BPath* path,
208 	bool createIt = false, BVolume* volume = NULL);
209 
210 
211 #endif	/* __cplusplus */
212 
213 #endif	/* _FIND_DIRECTORY_H */
214