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
12typedef 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 */
125enum {
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
135typedef 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
168extern "C" {
169#endif
170
171/* C interface */
172
173status_t find_directory(directory_which which, dev_t volume, bool createIt,
174	char* pathString, int32 length);
175
176status_t find_path(const void* codePointer, path_base_directory baseDirectory,
177	const char* subPath, char* pathBuffer, size_t bufferSize);
178
179status_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
183status_t find_path_for_path(const char* path, path_base_directory baseDirectory,
184	const char* subPath, char* pathBuffer, size_t bufferSize);
185
186status_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
190status_t find_paths(path_base_directory baseDirectory, const char* subPath,
191	char*** _paths, size_t* _pathCount);
192
193status_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
203class BVolume;
204class BPath;
205
206
207status_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